7.cocos精灵创建和绘制

本文介绍了一个基于Cocos2d-x的游戏图层精灵实现案例,详细展示了从创建场景到精灵动画的全过程。文章包括了如何加载背景、图片资源,创建不同类型的精灵,以及如何设置精灵的动作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 创建Layer层的类
    1.   T2LayerSprite.h
       1 #pragma once
       2 #include "cocos2d.h"
       3 USING_NS_CC;
       4 
       5 class T2LayerSprite:public CCLayer
       6 {
       7 public:
       8     static CCScene * scene();
       9     CREATE_FUNC(T2LayerSprite);
      10     bool init();
      11 };

       

红色代码处是一个宏定义:

 1 #define CREATE_FUNC(__TYPE__) \
 2 static __TYPE__* create() \
 3 { \
 4     __TYPE__ *pRet = new(std::nothrow) __TYPE__(); \
 5     if (pRet && pRet->init()) \
 6     { \
 7         pRet->autorelease(); \
 8         return pRet; \
 9     } \
10     else \
11     { \
12         delete pRet; \
13         pRet = nullptr; \
14         return nullptr; \
15     } \
16 }

等同于:

static T1LayerAnchorPoint*create();
 1 T1LayerAnchorPoint*T1LayerAnchorPoint::create()
 2 {
 3     T1LayerAnchorPoint *pRet = new T1LayerAnchorPoint();
 4     if (pRet && pRet->init())
 5     {
 6         pRet->autorelease();
 7     }
 8     else
 9     {
10         delete pRet;
11         pRet = NULL;
12     }
13     return pRet;
14 
15 }

调用顺序:scene->create->init->scene

    2.T2LayerSprite.cpp

 1 #include "T2LayerSprite.h"
 2 
 3 
 4 CCScene * T2LayerSprite::scene()
 5 {
 6     CCScene *scene = CCScene::create();
 7     T2LayerSprite *layer = T2LayerSprite::create();
 8     scene->addChild(layer);
 9     return scene;
10 }
11 
12 bool  T2LayerSprite::init()
13 {
14     CCLayer::init();
15 
16     //加载背景
17     //获取背景资源,并设置大小
18     CCSprite *bg = CCSprite::create("spirit/background.jpg",CCRectMake(0,0,680,330));
19     //获取屏幕大小
20     auto winSize = CCDirector::sharedDirector()->getWinSize();
21     //设置锚点
22     bg->setAnchorPoint(ccp(0, 0));
23     //设置位置
24     bg->setPosition(ccp(0,0));
25     //添加背景资源
26     addChild(bg);
27 
28     //加载图片
29     CCImage *image = new CCImage();
30     //图片初始化
31     image->initWithImageFile("spirit/plant.png");
32     //创建2D纹理
33     CCTexture2D *texture = new CCTexture2D();
34     //纹理自动释放
35     texture->autorelease();
36     //纹理用图片初始化
37     texture->initWithImage(image);
38     //用纹理创建精灵
39     CCSprite *plant = CCSprite::createWithTexture(texture);//纹理
40     //设置位置
41     plant->setPosition(ccp(100,winSize.height/2));
42     //添加图片
43     addChild(plant);
44 
45     //加载一张大图在缓存里
46     //创建纹理
47     CCTexture2D *texture2 = CCTextureCache::sharedTextureCache()->addImage("spirit/bullet.png");
48     //用纹理初始化精灵
49     CCSprite *bullet = CCSprite::createWithTexture(texture2);
50     //设置位置
51     bullet->setPosition(ccp(200, winSize.height / 2 + 20));
52     //添加
53     addChild(bullet);
54 
55     //加载一组帧
56     CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("spirit/zombie.plist");
57     //此方法是先获取帧再加载
58     //CCSpriteFrame *sf = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("z_1_attack_03.png");
59     //CCSprite* zombie = CCSprite::createWithSpriteFrame(sf);
60     //此方法是直接通过名字加载
61     CCSprite *zombie = CCSprite::createWithSpriteFrameName("z_1_attack_03.png");
62     //设置位置
63     zombie->setPosition(ccp(400, winSize.height / 2));
64     //添加
65     addChild(zombie);
66 
67     //创建动作
68     CCJumpBy *by = CCJumpBy::create(2, ccp(0, 0), 40, 3);
69     //zombie精灵设置跳跃动作
70     zombie->runAction(CCRepeatForever::create(by));
71 
72     //获取单个帧
73     CCSpriteFrame *frame = CCSpriteFrame::create("spirit/p_1_01.png", CCRectMake(0, 0, 80, 80));
74     //通过帧初始化精灵
75     CCSprite *sun = CCSprite::createWithSpriteFrame(frame);
76     //设置位置
77     sun->setPosition(400, winSize.height / 2 + 50); 
78     //添加
79     addChild(sun);
80     return true;
81 }

 运行截图:

 

转载于:https://www.cnblogs.com/xiaochi/p/8349895.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值