2 qq 30823901 qq_30823901 于 2016.02.25 22:29 提问

cocos2d-x游戏场景精灵无法显示 ,跪求大神帮解决

cocos2d-x游戏场景精灵无法显示 ,跪求大神帮解决

问题如下:
如果直接在AppDelegate.cpp中执行:
auto scene = GameLayer::createScene();
// run
director->runWithScene(scene);

则游戏主场景
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("panda.plist");
//添加精灵
this->panda = Panda::createWithSpriteFrameName("panda.png");
this->panda->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));
this->addChild(this->panda, 10, GameSceneNodeTagFighter);

精灵可以正常显示,

但是如果AppDelegate.cpp里面是先创建HelloWorldScene,
再在HelloWorldScene中通过一个菜单回调创建GameScene时,
auto scene = HelloWorld::createScene();
director->runWithScene(scene);
void HelloWorld::menuCloseCallback(Ref* pSender)
{
Scene* tsc = TransitionFade::create(1.0f, GameLayer::createScene());
if (tsc)
Director::getInstance()->pushScene(tsc);
// Director::getInstance()->end();
}
游戏场景就无法显示精灵,什么都没有。
求各大神帮忙如何解决,我是新手来着;
我在想是不是引擎本身的优化设计问题,对于暂时用不到的精灵对象引擎会不会自动延迟创建,直到有事件响应关联到精灵对象时才会真正开始创建???

Panda.cpp代码如下:
#include "Panda.h"
USING_NS_CC;
Panda* Panda::createWithSpriteFrameName(const char* spriteFrameName)
{
Panda *panda = new Panda();
if (panda && panda->initWithSpriteFrameName(spriteFrameName)) {
panda->autorelease();
auto body = PhysicsBody::createBox(panda->getContentSize() - Size(3, 3));
body->setCategoryBitmask(0x01); //0001
body->setCollisionBitmask(0x02); //0010
body->setContactTestBitmask(0x01);

            panda->setPhysicsBody(body);
            return panda;
    }


    CC_SAFE_DELETE(panda);
    return NULL;

}

void Panda::setPosition(const cocos2d::Vec2& newPosition)
{
Size screenSize = Director::getInstance()->getVisibleSize();
float halfWidth = this->getContentSize().width / 2;
float halfHeight = this->getContentSize().height / 2;
float pos_x = newPosition.x;
float pos_y = newPosition.y;
if (pos_x < halfWidth) {
pos_x = halfWidth;
}
else if (pos_x >(screenSize.width - halfWidth)) {
pos_x = screenSize.width - halfWidth;
}
if (pos_y < halfHeight) {
pos_y = halfHeight;
}
else if (pos_y >(screenSize.height - halfHeight)) {
pos_y = screenSize.height - halfHeight;
}
Sprite::setPosition(Vec2(pos_x, pos_y));
Sprite::setAnchorPoint(Vec2(0.5f, 0.5f));
}

1个回答

caozhy
caozhy   Ds   Rxr 2016.03.07 06:02
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【cocos2d-x游戏开发】场景,层,精灵的区别
场景是cocos2d中的一个重要概念,可以理解为一个舞台,
cocos2d-x学习笔记【一】创建自己的场景类
本帖首发于自己新建的论坛网站:计算机专业学习网,www.hua2buxie.cn。有很多不懂,写的也不好,望大家见谅!欢迎大家去我的网站发帖留言或者发教程。 背景: 前段时间才开始学习cocos2d-x,搭建环境那些就不说了,朋友们在网上找下,我用的环境是cocox2d-x 3.x的。 创建自己的场景 新建场景,首先就得包括2个文件,其中一个.cpp还有一个.h头文件。我将名字命名为CMy
大学生贷款
该系统分为三个基本的角色,分别是学生、校方负责人、银行负责人,对应的功能你们自己可以看看,我自己的毕设课题,希望对你有用。
cocos2d-x 菜鸟学习笔记四(游戏场景与场景切换)
首先是一些常识的介绍,这里有篇文章:http://article.ityran.com/archives/3283 简单的说来,一个游戏中包含的主要元素就是导演,场景,层,精灵,其实就是和拍戏一样,导演负责按“剧本”控制场景、层和精灵(演员),这“剧本”当然是我们自己设计的,比如:有什么角色演员,什么样的场景下演员可以或者应该做什么动作……而导演负责执行和控制这些元素将“剧本”以动态可视化的表现
cocos2d-x 改变精灵图片的2种方法。
cocos2d-x 改变精灵图片的2种方法。   1。 // 首先载入贴图集 CCSpriteBatchNode *spriteBatch=CCSpriteBatchNode::batchNodeWithFile("snake.png"); this->addChild(spriteBatch); CCSpriteFrameCache::sharedSpriteFrame
Cocos2d-x 精灵碰撞检测(方法一)
声明函数碰撞检测函数,两个精灵和重写update bool isCollision( CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2 ); CCSprite *sp2; CCSprite *sp1; virtual void update(float delta); //重写触摸事件 virtual void regi
在Cocos2d-X中玩转精灵
创建一个Cocos2d-X
Cocos2d-x 之显示精灵 Sprite
SpriteSprite是cocos2d-x中用来显示图片的主要对象,它的创建有四种方式
Cocos2d-x 精灵碰撞检测(方法二)
将"Cocos2d-x 精灵碰撞检测(方法一)" update函数修改一下。 使用精灵boundingBox函数获取直接精灵边界框, 不用自己计算精灵矩形大小了,还比较精确,然后调用intersectsRect计算2个精灵矩形是否存在集。 代码: void HelloWorld::update(float delta) { //返回精灵边界框 CCRect cr1 = sp1->b
cocos2d-x精灵更换图片
更换纹理