【问题标题】:Error draw Sprite in cocos2dx v3.6在 cocos2dx v3.6 中绘制 Sprite 出错
【发布时间】:2015-07-24 17:11:49
【问题描述】:

我是 cocos2dx 的新手。关注此tutorial。 我用 cocos2dx v3.6 创建了简单的测试。

Bullet.h:

using namespace cocos2d;
class Bullet : public Sprite{
public:
    Bullet();
    ~Bullet();
    static  Bullet* createBullet();
   void  setBullet( Vec2 pos, Vec2 vel , int Lev , float rotate);


private:
     void moveFinish();
    Vec2 velocity;

//    static SpriteFrameCache * fr = SpriteFrameCache::getInstance();
};

子弹.ccp

#include "Bullet.h"
Bullet::Bullet(){}
Bullet::~Bullet(){}


void Bullet::setBullet( Vec2 pos, Vec2 vel , int Lev , float rotate){

    SpriteFrameCache * frc = SpriteFrameCache::getInstance();
    frc->addSpriteFramesWithFile("bullet.plist","bullet.png");
    SpriteFrame * sf = frc->getSpriteFrameByName("bullet8.png");

    setSpriteFrame(sf);
    setPosition(pos);
    setRotation(rotate);
    velocity = vel;

//    schedule(update, 0.2);
//    
//    FiniteTimeAction * actionMove = MoveTo::create(10.0f, Vec2(1000, 1000));
//    FiniteTimeAction * actionDone = CallFuncN::create(callfunc_selector(Bullet::moveFinish));
//    
//    runAction(Sequence::create(actionMove, actionDone, NULL));
}
void Bullet::moveFinish(){

}

Bullet* Bullet::createBullet(){
    Bullet* sp = new Bullet();
    if (sp->create()) {

        sp->autorelease();

        return sp;
    }

    CC_SAFE_DELETE(sp);

    return NULL;
}

主要场景:

....
  Bullet * bl = Bullet::createBullet();
    bl->setBullet(gun->getPosition(), Vec2(5, 5), 2, gun->getRotation());
    addChild(bl);
....

运行时显示错误:

Assert failed: Invalid GLProgramState Assertion failed: (shader), 函数初始化,文件 /Users/tuan/zzijkline/cocos2d/cocos/renderer/CCQuadCommand.cpp, line 50.

我该如何解决?

【问题讨论】:

    标签: c++ c++11 cocos2d-x-3.0 opengl-3


    【解决方案1】:

    您的 createBullet() 似乎是错误的。您应该从中实例化 Sprite,并且应该从 Bullet 类外部加载 SpriteFrameCache。

    setBullet() 应该只处理位置、旋转和速度。

    Bullet* Bullet::create() {
    
        Bullet* sp = new Bullet();
    
        if (sp->initWithSpriteFrameName("bullet8.png")) {
    
            sp->autorelease();
    
            return sp;
        }
    
        CC_SAFE_DELETE(sp);
    
        return NULL;
    }
    
    void Bullet::setBullet( Vec2 pos, Vec2 vel , int Lev , float rotate) {
    
        setSpriteFrame(sf);
        setPosition(pos);
        setRotation(rotate);
        velocity = vel;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2014-02-22
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多