0

cocos2d的问题??

如何更改触摸类型?往下看

image = [MenuItemImage itemFromNormalImage:@"image1.png" selectedImage:@"image2.png" target:self selector:@selector(step1:)];
    Menu *menu = [Menu menuWithItems:image, nil];
    image.position = cpv( -135, -185);
    [self addChild: menu z:2]

step1 是定义为稍后在代码中执行某些操作的 void。我的问题不是 step1 不起作用,我的问题是当用户触摸内部按钮时 step1 会发生。当用户按下内部按钮时,我希望它能够工作。谢谢您的帮助!

4

1 回答 1

1

MenuItem 目前无法响应“触摸开始”,并且被硬编码为仅响应“触摸结束”。

在 Menu.m 中,从第 105 行开始,您将看到 ccTouchesBegan 声明。

如果你想修改 Menu 的当前行为,你可以像这样子类化它:

@interface MenuDown: Menu
{
}
@end

@implementation MenuDown
-(BOOL)ccTouchesBegan:(UITouch *)touches withEvent:(UIEvent *)event {
    [self ccTouchesBegan:touches withEvent: event];
    if(item) { [item unselected]; [item activate]; }
}
@end

这是未经测试的,但基本上......我刚刚从 ccTouchesEnded 中的 Menu.m 中获取了一些代码,并将其复制到新的 MenuDown 类的 ccTouchesBegan 的覆盖版本中。

然后,您将菜单定义为:

MenuDown *menu = [MenuDown menuWithItems: image, nil];

这 - 应该 - 给你一个来自 Cocos2D MenuItem 的 'react on touch started' 响应......

然而,这并不是真正的建议......因为我看不出你为什么希望“按钮”响应触摸,而不是“最终操作”......正如它所写的那样,当前菜单允许用户按下,然后滑下...取消菜单选择动作。

Menu/MenuItem 不打算用作“触摸反应对象”(即,实际游戏对象),如果这是您尝试做的事情的话。

于 2009-05-30T18:06:17.643 回答