【发布时间】:2014-05-27 10:46:12
【问题描述】:
我是 cocos2d-x 初学者,在使用 TouchBegan 事件 + 函数时遇到问题。 当我使用 xCode(5.1.1 + iPhone sim 7.1) 运行这个简单的代码时,我总是在 [label->setString("Foo Bar");] 点得到 EXC_BAD_ACCESS。
我尝试了几种方法来解决,但我完全被这个问题困住了 2 或 3 天。
有人对错误的观点有任何想法吗?
HelloWorld.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::LayerGradient
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
bool onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event);
cocos2d::Label* label;
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
HelloWorld.cpp
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if(!LayerGradient::initWithColor(Color4B(0, 0, 0, 255), Color4B(50, 50, 50, 255))){
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
auto label = Label::create("Hello World", "Arial", 112);
label->setPosition(Vec2(origin.x + visibleSize.width/2,
origin.y + visibleSize.height - label->getContentSize().height));
this->addChild(label, 1);
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
this->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 100);
return true;
}
bool HelloWorld::onTouchBegan(Touch *touch, Event *event){
label->setString("Foo Bar");
return true;
}
谢谢。
【问题讨论】:
标签: cocos2d-x exc-bad-access cocos2d-x-3.0