首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocos2d-android CCMenu不响应触摸

Cocos2d-android CCMenu不响应触摸
EN

Stack Overflow用户
提问于 2011-07-22 04:10:17
回答 1查看 3.3K关注 0票数 2
代码语言:javascript
复制
import org.cocos2d.events.CCTouchDispatcher;
import org.cocos2d.layers.CCColorLayer;
import org.cocos2d.layers.CCLayer;
import org.cocos2d.layers.CCScene;
import org.cocos2d.menus.CCMenu;
import org.cocos2d.menus.CCMenuItem;
import org.cocos2d.menus.CCMenuItemImage;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.types.ccColor4B;
import android.view.MotionEvent;

public class MenuLayer extends CCColorLayer {


public static CCScene scene() {
    // Create the scene
    CCScene scene = CCScene.node();
    // Create a background layer.
    CCLayer background = new MenuLayer(ccColor4B.ccc4(255, 255, 255, 255));
    scene.addChild(background);
    return scene;
}

protected MenuLayer(ccColor4B colour) {
    super(colour);

    // Create a menu items.
    CCMenuItem start = CCMenuItemImage.item("Start.png", "Start.png",
             this, "startTouched"); 
    CCMenuItem options = CCMenuItemImage.item("Options.png",
            "Options.png", this, "optionsTouched");
    CCMenuItem help = CCMenuItemImage.item("Help.png", "Help.png", this,
            "helpTouched");
    // Create array of CCMenuItem object to add to CCMenu
    CCMenuItem[] items = { start, options, help };
    // Add menu items to menu
    CCMenu menu = CCMenu.menu(items);
    // Align items with 150px adding
    menu.alignItemsVertically(150);
    // Add menu to the scene
    addChild(menu);
    CCTouchDispatcher.sharedDispatcher().addTargetedDelegate(this, 0, true);
    this.setIsTouchEnabled(true);
}

@Override
public boolean ccTouchesBegan(MotionEvent event) {
    return true;
}

@Override
public boolean ccTouchesEnded(MotionEvent event) {
    return super.ccTouchesEnded(event);
}

/**This method is called when the start menu item is touched**/
public void startTouched() {
    CCScene scene = GameLayer.scene();
    CCDirector.sharedDirector().pushScene(scene);
}

/**This method is called when the options menu item is touched**/
public void optionsTouched() {
    CCScene scene = OptionsLayer.scene();
    CCDirector.sharedDirector().replaceScene(scene);
}

/**This method is called when the help menu item is touched**/
public void helpTouched() {
    CCScene scene = HelpLayer.scene();
    CCDirector.sharedDirector().replaceScene(scene);
}
}

我刚开始使用cocos2d-android,但我在获取响应触摸事件的菜单时遇到了麻烦。

场景加载并运行正常,只是不会对触摸事件做出响应。如果我在ccTouchesEnded中设置一个断点,我可以拦截事件,但是startTouched、optionsTouched和helpTouched永远不会被调用。据我所知,CCMenu应该内置了这个功能。

cocos2d-android是从cocos2d-iphone移植过来的。

有谁能给我指个方向吗?

更新:

代码语言:javascript
复制
07-21 13:31:17.933: WARN/System.err(6660): java.lang.NoSuchMethodException: startTouched
07-21 13:31:17.933: WARN/System.err(6660): at
java.lang.ClassCache.findMethodByName(ClassCache.java:247)
07-21 13:31:17.933: WARN/System.err(6660): at
java.lang.Class.getMethod(Class.java:962)
07-21 13:31:17.933: WARN/System.err(6660): at org.cocos2d.menus.CCMenuItem.<init>
(CCMenuItem.java:54)
...
// The errors repeat for optionsTouched and helpTouched

看起来它没有将选择器参数解析为正确的方法。有人能看出startTouched或其他软件有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-23 00:20:51

我通过向回调方法添加一个参数来修复它。

示例:

代码语言:javascript
复制
public void startTouched(Object sender) {
    CCScene scene = GameLayer.scene();
    CCDirector.sharedDirector().pushScene(scene);
}

我还没有弄清楚为什么需要这样做,但它是有效的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6782122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档