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);
}
}
Ich fange gerade mit cocos2d-Android an und habe Probleme, ein Menü auf Berührungsereignisse reagieren zu lassen.
Die Szene wird geladen und läuft gut, sie reagiert nur nicht auf Berührungsereignisse. Wenn ich einen Haltepunkt in ccTouchesEnded setze, kann ich das Ereignis abfangen, aber startTouched, optionsTouched und helpTouched werden nie aufgerufen. Soweit ich gelesen habe, sollte CCMenu diese Funktionalität eingebaut haben.
cocos2d-Android ist eine Portierung von cocos2d-iphone.
Kann mir jemand den richtigen Weg weisen?
UPDATE:
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
Es sieht so aus, als ob der Selektorparameter nicht in die richtige Methode aufgelöst wird. Kann jemand sehen, etwas falsch mit startTouched oder die anderen?