开发者

App graphic making (transparent and no extra spaces)

开发者 https://www.devze.com 2023-04-11 15:29 出处:网络
I am a coder but not a graphic maker. I can decently produce graphics that meet the quality standards visually although I cannot produce graphics that will technically \"work.\" This is what I mean:

I am a coder but not a graphic maker. I can decently produce graphics that meet the quality standards visually although I cannot produce graphics that will technically "work." This is what I mean:

I am using CGRectIntersectsRect for colliding images. My image has SOME extra space which I have made completely transparent using Adobe PhotoShop but even if this extra transparent space is not visible, when the two images collide, it will look like you will be hitting nothing as this extra invisible transparent space is开发者_JAVA技巧 PART of the image and when CGRectIntersectsRect is called it detects touch between two images. So if the other image touches the transparent space, CGRectIntersectsRect is called and my code is executed. I only want my code to be executed if it hits the actual COLOR space of the image. Here is two things that could help me through that, they follow through with questions.

  1. Learn how to make NO EXTRA SPACE on an image in photoshop. How could I do this, tutorials?
  2. CGRectIntersectsRect only called when touching a color part of an image. A way to do this?

Thank you guys!


Regarding your question #1, it depends. All images are rectangular, all. So, if your sprite is rectangular, you can crop it in Photoshop to just the rectangular area. But if you want to handle, say, a circle ball, then you can't do such thing as "remove extra space". Your circle ball will always be stored in a rectangular image, with transparent space on the corners.


Learn how to make NO EXTRA SPACE on an image in photoshop. How could I do this, tutorials?

You can manually select an area using the Rectangular Marquee Tool and Image > Crop or automatically trim the image based on an edge pixel color using Image > Trim.

CGRectIntersectsRect only called when touching a color part of an image. A way to do this?

You can use pixel-perfect collisions or create better bounding shapes for your game objects. For example, instead of using pixel-perfect collision for a spaceship like this one, you could use a triangle for the wings, a rectangle for the body, and a triangle for the head.

Pixel-perfect collision

One way you could implement it would be to

  1. Have an blank image in memory.
  2. Draw visible pixels from one image in blue (#0000ff).
  3. Draw visible pixels from the other image in red (#ff0000).
  4. If there's any purple pixels in the image (#ff00ff), then there's an intersection.

Alternative collision detection solution

If your game is physics-based, then you can use a physics engine like Box2D. You can use circles, rectangles, and polygons to represent all of your game objects and it'll give you accurate results without unnecessary overhead.


For collision detection for non-rectangular shapes, you should look into one of the many game and/or physics libraries available for iOS. Cocos2d coupled with Box2d or chipmunk are popular choices.

If you want to do it yourself, you'll need to start with something like a custom CGPath tracing the actual shape of each object, then use a function like CGPathContainsPoint (that's from memory, it may be wrong). But it is not a simple job. Angry birds uses box2d, AFAIK.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号