【cococos 2 dx 3.2】一人も死なない2人物層

3114 ワード

分析:
  • 人物オブジェクトはSpriteクラス
  • と見なされる
  • Spriteクラスにはtexture,action,physicsプロパティ
  • があります.
  • 人物が走り続けるアニメーションはactionで
  • を実現できます.
  • 人物は境界を落下することはなく、物理境界
  • を設定すべきである.
    解析Jsonピクチャクラス(plter提供)
    3.2以上の場合は、Vec 2をPoint、ValueMapNullをValueMapに変更する必要があります
    FlashTool.h
    #ifndef __NoOneDies__FlashTool__
    #define __NoOneDies__FlashTool__
    
    #include <iostream>
    #include <cocos2d.h>
    
    USING_NS_CC;
    
    class FlashTool {
        
    public:
        static Animate * readJsonSpriteSheet(std::string jsonFile,float delayPerUnit);
    };
    
    #endif /* defined(__NoOneDies__FlashTool__) */
    

    FlashTool.cpp
    #include "FlashTool.h"
    #include "json/document.h"
    
    
    Animate * FlashTool::readJsonSpriteSheet(std::string jsonFile,float delayPerUnit){
        
        rapidjson::Document doc;
        std::string fileContent = FileUtils::getInstance()->getStringFromFile(jsonFile);
        fileContent.erase(0,fileContent.find_first_of('{'));
        
        doc.Parse<0>(fileContent.c_str());
        
        std::string imgFileName = doc["meta"]["image"].GetString();
        
        auto &frames = doc["frames"];
        auto sfc = SpriteFrameCache::getInstance();
        
        Vector<AnimationFrame*> animFrames;
        for (auto m=frames.MemberonBegin(); m!=frames.MemberonEnd(); m++) {
            auto frameName = m->name.GetString();
            auto & frameProperties = m->value["frame"];
            auto & spriteSourceSize = m->value["spriteSourceSize"];
            
            auto sf = sfc->getSpriteFrameByName(frameName);
            if (!sf) {
    			sf = SpriteFrame::create(imgFileName, Rect(frameProperties["x"].GetInt(), frameProperties["y"].GetInt(), frameProperties["w"].GetInt(), frameProperties["h"].GetInt()), m->value["rotated"].GetBool(), Point(spriteSourceSize["x"].GetInt(), spriteSourceSize["y"].GetInt()), Size(spriteSourceSize["w"].GetInt(), spriteSourceSize["h"].GetInt()));
                sfc->addSpriteFrame(sf, frameName);
            }
    		ValueMap ValueMapNull;
            animFrames.pushBack(AnimationFrame::create(sf, delayPerUnit, ValueMapNull));
        }
        
        Animation * animation = Animation::create(animFrames,delayPerUnit);
        return Animate::create(animation);
    }

    Hero.h
    #include "cocos2d.h"
    #include "FlashTool.h"
    
    USING_NS_CC;
    
    class Hero : public Sprite
    {
    public:
    	//  create  ,    init   Hero 
    	virtual bool init();
    	CREATE_FUNC(Hero);
    };

    Hero.cpp
    #include"Hero.h"
    
    USING_NS_CC;
    
    bool Hero::init()
    {
    	//          
    	Sprite::init();
    
    	//             
    	Size size = Size(44,52);
    	setContentSize(size);
    
    	//         
    	setPhysicsBody(PhysicsBody::createBox(size));
    
    	//       
    	runAction(RepeatForever::create(FlashTool::readJsonSpriteSheet("hero.json",0.2f)));
    
    	//      ,         
    	getPhysicsBody()->setContactTestBitmask(1);
    	//        
    	getPhysicsBody()->setRotationEnable(false);
    
    	return true;
    }