按住MenuItem按钮时如何重复操作? 我试图在CCMenuItemImage上创建一个子类并生成
@implementation CCMenuItemSpriteHoldable
@synthesize buttonHeld;
-(void) selected
{
[super selected];
buttonHeld = true;
}
-(void) unselected
{
[super unselected];
buttonHeld = false;
}
@end
并将其放在我的init
上CCMenuItem *upButtonItem = [CCMenuItemSpriteHoldable
itemFromNormalImage:@"up.png" selectedImage:@"upsel.png"
target:self selector:@selector(upButtonTapped:)];
但它什么也没做...... :( 它只是在我释放按钮时加载(void)upButtonTapped。 有没有办法制作一个允许你按住的按钮?
谢谢
答案 0 :(得分:2)
你必须在CCLayer中添加一个CCSprite,当用户点击你的CCSprite(使用[yourSprite boundingBox])并开始按下选择器时,实现CCLayer touch(开始,移动,结束)catch:当用户触摸开始时按钮CCSprite和取消预定选择器触摸结束!
N.B。取消预定按下:选择器如果触摸移动触摸退出按钮CCSprite边界框
答案 1 :(得分:0)
我只能回答Cocos2dX,但它应该是相同的机制。实现这个功能有点笨拙,所以我建议你继续使用Sprite子类化并添加一个CCLayerTouch。
但是如果你想使用CCMenuItem,我可以告诉你应该从哪里开始寻找。 每次用户触摸CCMenuItem-(节点)时,该班级都会检查哪些孩子被触摸并将这些孩子设置为已选中。当您松开手指时,它会将其设置为未选中并触发您指定给它的选择器(动作)。这是一次性行动。
现在有两种方式:
为了让它一直激活,你需要子类化CCMenuItem并覆盖四个触控回调(不调用super)。在touchbegan中,您将精灵注册为触摸,并在取消注册时注册。你的类还需要一个update()方法,它将在你的runloop中的每一帧被调用。在此update()方法中,您将测试是否触摸了精灵,如果是,则触发。这是一种较少采用cocos风格的方法。
如上所述。注册调度程序,并在触摸结束时取消注册。
触摸移动方法在这种情况下没有做任何事情。 touchCancelled方法的行为类似于touchEnded。