Jump to content

  • Log In with Google      Sign In   
  • Create Account

Detect pixel color at a point


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 cold_heats_.--.   Members   -  Reputation: 127

Like
0Likes
Like

Posted 24 July 2012 - 12:07 AM

Hi there.
Suppose I have an array of block-like sprites.In the center of each sprite, the pixel is set to a color , say magenta.When my character moves, he does it with a fixed velocity and the sprites are displayed in such a way that when the caracter collides with them , he practically covers the whole sprite, not just a part of it .They all have the same dimensions.
In my snake-like game, I have to check 2 arrays of coordinates and the "food" coordinates, regarding their collision with the head.Wouldnt it be easier to set in the center of each sprite a certain color and in the collision function to check wether the pixel color in center of the head's rectangle has those certain RGB values ?
If it's possible, how could I do that in SDL ?
My guess is that the blocks would first have to be blitted on the background and then the background to the display.

Sponsor:

#2 Rld_   Members   -  Reputation: 1520

Like
0Likes
Like

Posted 24 July 2012 - 02:34 AM

I don't think it matters that much in your case. Whether you check upon a color on a certain point or just at a certain point. If you for some reason want the collision to be on the sides/border of the head you will need to calculate the offset anyway based on the point in the middle of the head.

Also not sure about this, how SDL works with its buffer and such, but you will probably have to check every pixel in your buffer for that color. This might be fine in your case, but wouldn't be a smart thing to do when you make some more complex games.

#3 Servant of the Lord   Crossbones+   -  Reputation: 21030

Like
0Likes
Like

Posted 24 July 2012 - 11:28 AM

In my snake-like game, I have to check 2 arrays of coordinates and the "food" coordinates, regarding their collision with the head.Wouldnt it be easier to set in the center of each sprite a certain color and in the collision function to check wether the pixel color in center of the head's rectangle has those certain RGB values ?

I think that would be less effective. It's not much of a slowdown to check the two arrays.

Here it might get complicated: What if your user is accidentally running the game with 16-bit colors? The colors you are expecting would be wrong.
You'd have to check last frame's screen, otherwise the snake would have already been drawn over the object he's trying to eat.

While a good programming experiment, this way of doing things is not very applicable to your future game projects - you may need to do so from time to time, but in general, your future games would be managing and tracking the location of each object individually, not reading their locations by pixel color.

Why do you have two arrays? What do they contain? You said the second contains food coordinates, but what does the first contain?

If it's possible, how could I do that in SDL ?
My guess is that the blocks would first have to be blitted on the background and then the background to the display.


This tutorial explains setting and picking single pixel values.
It's perfectly fine to abbreviate my username to 'Servant' rather than copy+pasting it all the time.
All glory be to the Man at the right hand... On David's throne the King will reign, and the Government will rest upon His shoulders. All the earth will see the salvation of God.
Of Stranger Flames - [indie turn-based rpg set in a para-historical French colony] | Indie RPG development journal

[Fly with me on Twitter] [Google+] [My broken website]

[Need web hosting? I personally like A Small Orange]





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS