【问题标题】:How to repeat an action while MenuItem button is held down? (cocos2d)按住 MenuItem 按钮时如何重复操作? (cocos2d)
【发布时间】:2011-07-27 18:31:28
【问题描述】:

如何在按住 MenuItem 按钮时重复一个动作? 我试图在 CCMenuItemImage 上创建一个子类并制作了

@implementation CCMenuItemSpriteHoldable

@synthesize buttonHeld;

-(void) selected
{
[super selected];
buttonHeld = true;
}
-(void) unselected
{
[super unselected];
buttonHeld = false;
}

@end

把它放在我的初始化中

CCMenuItem *upButtonItem = [CCMenuItemSpriteHoldable
                            itemFromNormalImage:@"up.png" selectedImage:@"upsel.png"
                            target:self selector:@selector(upButtonTapped:)];

但它什么也没做... :( 当我释放按钮时,它只会加载(void)upButtonTapped。 有什么方法可以制作一个可以让你按住的按钮?

谢谢

【问题讨论】:

    标签: iphone ios cocos2d-iphone


    【解决方案1】:

    您必须在 CCLayer 中添加一个 CCSprite,当用户点击您的 CCSprite(使用 [yourSprite boundingBox])时实现 CCLayer 触摸(开始、移动、结束)捕获并开始按下选择器:当用户触摸开始于您的按钮 CCSprite 和 unschedule 选择器触摸结束!

    注意取消计划按下:选择器如果在触摸中从您的按钮 CCSprite 边界框移动触摸退出

    【讨论】:

      【解决方案2】:

      我只能回答 Cocos2dX 但它应该是相同的机制。实现这个功能有点hacky,所以我建议你将Sprite子类化并添加一个CCLayerTouch。

      但是,如果您想使用 CCMenuItem,我可以告诉您应该从哪里开始查找。 每次用户触摸 CCMenuItem-(Node) 时,该类都会检查哪些孩子被触摸并将这些孩子设置为选中。当您松开手指时,它会将其设置回未选中状态并触发您分配给它的选择器(动作)。这是一次性操作。

      现在有两种方式:

      1. 为了让它一直触发,您需要继承 CCMenuItem 并覆盖四个触摸回调(不调用 super)。在 touchbegan 中,您将您的 sprite 注册为被触摸,并在 touchend 中取消注册。您的课程还需要一个 update() 方法,该方法将在您的运行循环中的每一帧中被调用。在这个 update() 方法中,您测试精灵是否被触摸,如果是,则触发。这是一种不那么 cocos 风格的方法。

      2. 如上所述。注册调度程序,并在触摸结束时取消注册。

      在这种情况下,触摸移动方法没有做任何事情。 touchCancelled 方法的行为类似于 touchEnded。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        • 2023-03-13
        • 1970-01-01
        相关资源
        最近更新 更多