我用cocos2d编写了一些游戏,但它们都是由加速度计控制的,只使用简单的触摸事件。我需要做的就是在任何地方触摸屏幕时进行注册。我不需要任何关于位置或速度的信息。角色当前在屏幕上移动,用户应该能够触摸以使角色在屏幕上向上移动。当前代码无法按预期工作。角色不受触摸影响,只是继续向下移动屏幕。请指教。下面是我现在尝试使用的代码。
在游戏更新方法中:
if (IsTouched == TRUE) {
SealPositionBasedOnTouchInt = SealPositionBasedOnTouchInt - (100*dt);
}
else {
SealPositionBasedOnTouchInt = SealPositionBasedOnTouchInt + (100*dt);
}
SealSwimming.position = ccp(SealPositionBasedOnTouchInt, SealSwimming.position.y);
触摸事件:
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for( UITouch *touch in touches )
{
CGPoint location = [touch locationInView: [touch view]];
location = [[CCDirector sharedDirector] convertToGL: location];
IsTouched = TRUE;
}
}
你会注意到我确实得到了触摸位置,这个目前没有用于任何东西,但是在样本中。
答案 0 :(得分:1)
确保图层启用了触摸事件isTouchEnabled
答案 1 :(得分:0)
你有没有被覆盖:
-(void) registerWithTouchDispatcher {
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}
在接收触摸的图层/节点中?
您也可以尝试从代码addTargetedDelegate:self
拨打电话,而不会覆盖registerWithTouchDispatcher
,但我从未尝试过。
答案 2 :(得分:0)
塞尔吉奥可以解决您未触及的问题。我最近遇到了类似的问题。如果用户触摸屏幕的位置无关紧要,那么吞下:好的,但如果您有几个需要注册触摸的图层,则可能需要将其设置为NO。
答案 3 :(得分:0)
我没有测试过这个。
in .h
CCSprite *sprite;
in .m
-(id)init
{
if ((self=[super init))
{
CGSize s = [[CCDirector sharedDirector] winSize];
sprite = [CCSprite spriteWithFile:@"imagename.png"];
sprite.position = ccp(s.width/2, s.height/2);
[self addChild:sprite];
}
return self;
}
- (void) ccTouchesBegan: (NSSet *)touches withEvent: (UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInView: [touch view]];
touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
[sprite setPosition:touchLocation];
//OR YOU CAN RUN AN ANIMATION TO MAKE IT LOOK LIKE IT'S WALKING
//[sprite runAction:[CCMoveTo actionWithDuration:5 position:touchLocation]];
}