cocos2d-x 3.1 EXC#u接触不良访问事件+;作用
我是cocos2d-x初学者,在TouchStart事件+函数方面有困难。 当我用xCode(5.1.1+iPhone sim 7.1)运行这个简单的代码时,我总是在[label->setString(“Foo Bar”)]点获得EXC_BAD_访问权限 我尝试了几种方法来解决这个问题,但我在这个问题上完全陷入了两三天的困境 有人知道错误的观点吗 HelloWorld.h HelloWorld.cppcocos2d-x 3.1 EXC#u接触不良访问事件+;作用,cocos2d-x,exc-bad-access,cocos2d-x-3.0,Cocos2d X,Exc Bad Access,Cocos2d X 3.0,我是cocos2d-x初学者,在TouchStart事件+函数方面有困难。 当我用xCode(5.1.1+iPhone sim 7.1)运行这个简单的代码时,我总是在[label->setString(“Foo Bar”)]点获得EXC_BAD_访问权限 我尝试了几种方法来解决这个问题,但我在这个问题上完全陷入了两三天的困境 有人知道错误的观点吗 HelloWorld.h HelloWorld.cpp 谢谢。您的问题在这一行: auto label = Label::create("Hello
谢谢。您的问题在这一行:
auto label = Label::create("Hello World", "Arial", 112);
在这一行中,您声明了一个名为label
的新变量,其作用域仅适用于init
函数。您还有一个名为label
的类变量,它们是不同的。如果在方法中声明了一个与类变量同名的变量,它将shadow
。考虑这个例子:
class A {
int variable;
void method() {
int variable; // this is not the same thing as the one above
variable = 5; //assignment to local variable
this->variable = 3; //asignment to class variable
}
}
因此,您实际上没有向类变量
label
分配任何内容,您稍后将在touch方法中引用这些变量。解决此问题的最简单方法是从init()
方法中删除auto
处的auto
关键字。正如@Losiowaty所指出的,使用auto
有时可能是危险的
cocos2d::Label* label = cocos2d::Label::create("Hello World", "Arial", 112);
另外,可能还有更好的构造函数可以使用:非常感谢您的回答Losiowaty。我想我有点理解你写的东西。我尝试删除“auto”,并在“label->setPosition”行获得了EXC\u BAD\u访问权限。。嗯…终于,它像你说的那样起作用了。我一直在尝试使用
Label::createWithTTF
,出于某种原因,它会返回EXC\u BAD\u访问错误。但是“auto
deleted-ver”完全可以使用Label::create
。非常感谢你的建议!这并不能解决他的问题——它仍然不会将值(地址)分配给类变量,而是分配给本地变量。谢谢GameDeveloper,我也尝试了这段代码,但正如Losiowaty所说,它不起作用。无论如何谢谢你!
class A {
int variable;
void method() {
int variable; // this is not the same thing as the one above
variable = 5; //assignment to local variable
this->variable = 3; //asignment to class variable
}
}
cocos2d::Label* label = cocos2d::Label::create("Hello World", "Arial", 112);