我正在使用cocos2d-iphone 3.0开发游戏。我使用这个bool来使代码内部(在用户触摸精灵之后)只实现一次。当用户第二次触摸精灵时,将不会执行此代码。唯一的问题是,Xcode表示touchBegan
方法不应返回值(return NO ;
)。我怎样才能改变方法,所以不会有错误?我应该改变别的吗?这种方式是否正确?
bool firstClicked = false;
-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
if(firstClicked==true)
{
return NO ;
}
CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedlocation = [[CCDirector sharedDirector] convertToGL: location];
CGPoint convertedNodeSpacePoint = [self convertToNodeSpace:convertedlocation];
if (CGRectContainsPoint([_sprite boundingBox],convertedNodeSpacePoint))
{ firstActFirstTimeClicked=true;
.......// some code. not important
} }
答案 0 :(得分:0)
如果您只需要执行一次,则需要停用精灵上的触摸功能。所以在你的custom overriden sprite
中只需做这样的事情:
-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
{
// Do awesome game related code over here
self.userInteractionEnabled = NO;
}
这应该适用于自定义CCSrpite
。这样您就不必处理场景中所有愚蠢的位置代码,并且您已准备好使用一行代码。
显然,您需要在创建CCSprite
时启用用户互动,以便首先调用touchBegan
。
答案 1 :(得分:-1)
不要返回BOOL。如果只想运行一次代码,那么只需从方法返回即可。无需返回BOOL NO。试试这个..
bool firstClicked = false;
-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
if(firstClicked==true)
{
return;
}
CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedlocation = [[CCDirector sharedDirector] convertToGL: location];
CGPoint convertedNodeSpacePoint = [self convertToNodeSpace:convertedlocation];
if (CGRectContainsPoint([_sprite boundingBox],convertedNodeSpacePoint))
{ firstActFirstTimeClicked=true;
.......// some code. not important
} }