不知道我是不是想太多了……但我正在努力调整当我的角色向不同方向移动时显示的精灵。
例如,如果玩家的手指在角色上方,我希望它转到“moveUp”帧。如果玩家的手指在角色下方,我想进入“moveDown”框架,否则停留在“normalState”框架。
有人可以给我看一个例子吗?或者指导我阅读有关以这种方式实现 Sprite 表/Sprites 的一般教程。
我已经在演示项目中使用并使用了精灵表,但我希望发布它并希望以正确和最成功的方式来处理它。
谢谢!!
不知道我是不是想太多了……但我正在努力调整当我的角色向不同方向移动时显示的精灵。
例如,如果玩家的手指在角色上方,我希望它转到“moveUp”帧。如果玩家的手指在角色下方,我想进入“moveDown”框架,否则停留在“normalState”框架。
有人可以给我看一个例子吗?或者指导我阅读有关以这种方式实现 Sprite 表/Sprites 的一般教程。
我已经在演示项目中使用并使用了精灵表,但我希望发布它并希望以正确和最成功的方式来处理它。
谢谢!!
我假设您已经制作了精灵表和/或打包了它(我喜欢 TexturePacker)。代码将类似于:
...init...
//Place all sprite frames from sprite sheet into cache
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spriteSheet.png"];
CCSpriteBatchNode *gameBatchNode = [CCSpriteBatchNode batchNodeWithFile:@"spriteSheet.png"];
CCSprite *player = [CCSprite spriteWithSpriteFrameName:@"moveUp"];
[gameBatchNode addChild: player];
....
- (void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *aTouch = [touches anyObject];
CGPoint touchPosition = [player.parent convertTouchToNodeSpace:aTouch];
CGPoint touchPositionRelativeToPlayer = ccpSub(touchPosition, player.position);
if(touchPositionRelativeToPlayer.y > 0)
[player setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"moveUp"]];
else
[player setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"moveDown"]];
}
如果您想要其他方向(W、E、NW 等),我建议您将其转换touchPositionRelativeToPlayer
为角度atan2
并从中确定框架。