不同的cclayer尺寸取决于块内引用的位置
Different CCLayer size depending on where it is referenced inside the block
我对C 和cocos2d-X很新,所以答案可能很简单,但是对于我的生活,我不知道为什么它会这样。<<<<<<<<<<<</p>
以下是HelloWorldScene.cpp
的相关片段,修改/简化的版本:
bool PlayGame::init()
{
if ( !Layer::init() ) return false;
double startX = this->getBoundingBox().getMidX() / 3;
double startY = this->getBoundingBox().size.height * 0.95;
Sprite* sprite = Sprite::create( "sprite.png" );
sprite->setPosition( startX, startY );
this->addChild( sprite );
return true;
}
现在,我的代码按预期完美地工作,但是如果我要在之前定义 startX
和 startY
检查了CCLayer
是否正确初始化的行,它们会返回 (0, 0)
而不是在左上角中。我的猜测是,在if ( !Layer::init() )
行之前,PlayGame
层尚未初始化,因此大小为0
。
,但就我而言,该行仅负责检查该层是否在没有问题的情况下进行初始化,并且实际的初始化是由create()
方法触发的,该方法在父级CCScene
的定义内部触发。因此,我认为该层的大小应该在功能块内的任何地方初始化。
我在这里缺少什么?
createScene()
中的 PlayGame::create()
函数,在您的情况下看起来像这样
Scene* PlayGame::createScene()
{
auto scene = Scene::create();
auto layer = PlayGame::create(); // this one right here constructs the Layer and triggers PlayGame::init()
scene->addChild(layer);
return scene;
}
负责调用您的PlayGame::init()
功能。但是,在设置或获取Layer
与init()
中的任何相关成员之前,必须明确调用静态Layer::init()
。
这是直接从库中提取的Layer::init()
的实现
bool Layer::init()
{
Director * director = Director::getInstance();
setContentSize(director->getWinSize()); // this is the line that needs to be executed before you set anything
return true;
}
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 为什么模板别名专用化取决于引用它的上下文
- 不同的cclayer尺寸取决于块内引用的位置
- C++ "错误:"引用中缺少对象..."取决于 GCC 版本
- 引用全局变量的模板函数(取决于类型)