ios - 场景中一次只有一个 Sprite Cocos2D 3.x

标签 ios cocos2d-iphone sprite

每次触摸屏幕时 Sprite 都会出现,然后它会射向所需区域。我如何才能让它一次只有一个 Sprite 出现在场景中,直到它退出场景或撞到一个物体? (即使多次触摸屏幕)

这是弹丸代码

- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
// 1
CGPoint touchLocation = [touch locationInNode:self];

// 2
CGPoint offset    = ccpSub(touchLocation, _player.position);
float   ratio     = offset.y/offset.x;
int     targetX   = _player.contentSize.width/2 + self.contentSize.width;
int     targetY   = (targetX*ratio) + _player.position.y;
CGPoint targetPosition = ccp(targetX,targetY);

// 3
CCSprite *projectile = [CCSprite spriteWithImageNamed:@"projectile.png"];
projectile.position = _player.position;
projectile.physicsBody = [CCPhysicsBody bodyWithCircleOfRadius:projectile.contentSize.width/2.0f andCenter:projectile.anchorPointInPoints];
projectile.physicsBody.collisionGroup = @"playerGroup";
projectile.physicsBody.collisionType  = @"projectileCollision";
[_physicsWorld addChild:projectile];

// 4
CCActionMoveTo *actionMove   = [CCActionMoveTo actionWithDuration:1.5f position:targetPosition];
CCActionRemove *actionRemove = [CCActionRemove action];
[projectile runAction:[CCActionSequence actionWithArray:@[actionMove,actionRemove]]];

[[OALSimpleAudio sharedInstance] playEffect:@"pew-pew-lei.caf"];

}

最佳答案

如果我正确理解你的观点,你可以简单地添加一个标志,以便能够注意到场景中已经有 Sprite 。只需在您的类(class)上声明

BOOL isSpritePresent;

在类自定义 id 方法上初始化它。

-(id)init {
self=[super init];
isSpritePresent=NO;
return self; }

然后在 TouchBegan 开始时添加类似的内容

if(isSpritePresent){
return; //As there's already an sprite on the scene.
}

最后

isSpritePresent=YES;

最后,当箭头或 w/e 到达目标时,调用一个方法来重置 bool 值。

或者...如果您希望做的事情更简单,并且您相信您有特定的时间让用户再次射击,只需在其他操作之后添加一个延迟,如..

CCActionDelay *delay = [CCActionDelay actionWithDuration:1.2f];
        [projectile runAction:[CCActionSequence actionWithArray:@[actionMove,actionRemove,delay]]];

关于ios - 场景中一次只有一个 Sprite Cocos2D 3.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666494/

相关文章:

ios - Swift 无法将类型 __NSInlineData 的值转换为 PFFile

iphone - 如何计算等轴测图上两点之间的实际距离?

c# - 在 XNA 中缩放 Texture2D

javascript - 如何从浏览器安装脚本到手机并运行?

ios - 如何将这几种不同的值类型组合到 NSData 中呢?

objective-c - 在表格 View 中制作淡入淡出的标题,就像在笔记应用程序中一样

iPhone:删除所需的缩略图以自定义完整的图像

ios - 如何将 CCSprite 转换为 UIImage

swift - 如何在 spritekit 中通过触摸将 Sprite 相对于其原始位置移动

sprite - background-size with background-position 不缩放位置?