cocos2dx 复制精灵怎么得到精灵的旋转角度

【cocos2d-x 手游研发----精灵的八面玲珑】 - 入梦凡尘 - 博客园
  继续上一篇文章继续聊吧,这章内容会比较多,也会附上代码,很多朋友加了群,大家在群里面探讨了很多东西,这让大家都觉得受益匪浅,这便是极好的,废话不多了,精灵是游戏的重要组成部分,那ARPG里面的精灵必然是要做得很细的,因为精灵要能动,能跑,能打,甚至要能做各种交互动作等等。
& & & 大家可以看一下下面的题,是精灵制作的流程思路:
  上图的人物素材来自于网络流传的梦幻西游,地图还有其他素材是以前公司同事制作的,如果游戏正式上线,会换一套完整的自制的素材。图中大家可以看到一个人物有很多部件组合而成,高端一点的游戏甚至部件多达几十上百种,甚至做出骨骼动画。不过以我现在的做法是按照帧动画方式实现各个人物的动作,人物的body部分细节处理会很多,还有大家看到图中的字体(字体渲染描边,我做的是最简单的了,两个LABEL合成在一起,效果能达到就行),由于人物要有方向,而且我们一次性就做8方向的人物动画,那就需要8个方向的连帧图片:
  首先,要组装起来我们首先要建一个实体角色类,这个类里面不放别的,就统一放角色的部件属性:
MainRoledata.h类
#ifndef _MAIN_ROLE_DATA_
#define _MAIN_ROLE_DATA_
#include "cocos2d.h"
#include "../Commen_ActionToDo.h"
#include "../Commen_Direction.h"
USING_NS_CC;
class MainRoledata
//人物的TAG
//人物姓名
//人物初始坐标
//人物默认像素图
CCString* spiritU
//人物站立像素图路径
CCString* spiritUrl_
//人物跑动像素图路径
CCString* spiritUrl_
//人物攻击像素图路径
CCString* spiritUrl_
//人物施法像素图路径/增加人物BUF
CCString* spiritUrl_
//人物站立最大帧
int maxcut_
//人物跑动最大帧
int maxcut_
//人物战斗最大帧
int maxcut_
//人物施法最大帧
int maxcut_
//人物当前动作
Commen_ActionToD
//人物当前朝向
//动画时间
枚举几个方向,和动作的类:
enum Commen_Direction
rigth_up=4,
rigth_down=5,
left_down=6,
enum Commen_ActionToDo
OK,然后配置精灵数据,建了一个GetNPCData.cpp,GetNPCData.h,主要就是拿来初始化数据,大致的思路是要将上面的Model填充数据,相信大家
能够用很多种方式去实现,填充数据(读取XML配置文件,直接写在代码中配置);
接下来我们正式组装完整的八面玲珑的精灵,建立SpiritsPlayer.cpp,SpiritsPlayer.h;
&文件内容如下:
#ifndef _SPIRIT_PLAYER_
#define _SPIRIT_PLAYER_
#include "cocos2d.h"
#include "../Commen_ActionToDo.h"
#include "../Commen_Direction.h"
#include "../GameData/MainRoledata.h"
#include "../Commen/PublicShowUI.h"
#include "../Effects/EffectsCommen.h"
USING_NS_CC;
class SpiritsPlayer : cocos2d::CCSprite
CCSprite* sp_
PublicShowUI* p_ui_
CCArray *stringA
CCAnimate*
CCAnimate* playdonghua2;
Commen_Direction move_
bool endflag2;
bool thiszhujiao_
void Spirits_talkabout_hid();
SpiritsPlayer(MainRoledata roledata,int zOrder,bool zhujiaoflag);
~SpiritsPlayer(void);
CCAnimation* getNowAnt(MainRoledata roledata);
CCAnimate* updateNowAnt(MainRoledata roledata);
void updateNpcPoint(CCPoint newpoint);
void moveTomap_dir(CCPoint newpoint);
void moveTomap_move(int uestime,CCPoint newpoint,bool npcflag);
//人物移动完成的回调
void moveoverCallBack(void);
//普通NPC移动完成的回调
void moveoverCallBackforNpc(void);
//根据点击坐标获得人物的朝向
Commen_Direction getNowPointDir(CCPoint newpoint);
// 触摸点是否在精灵上
bool isTouchInside(CCPoint thisPos);
//移动方式
void movemethod(int uestime,CCPoint newpoint);
//角色基本数据
CCFiniteTimeAction *
CCActionInterval* act_moveto_
CCActionInterval* act_moveto_
CCActionInterval* act_moveto_
CCActionInterval* act_moveto_
CCActionInterval* act_moveto_eff_
CCFiniteTimeAction *
CCRect rect();
#endif//_SPIRIT_PLAYER_  
#include "../ImagePaths.h"
#include "../GameData/GetNPCData.h"
#include "../Commen/FontChina.h"
SpiritsPlayer::SpiritsPlayer(MainRoledata roledata,int zOrder,bool zhujiaoflag)
//先初始化部分数据
thisroledata =
act_moveto_zi =NULL;
act_moveto_npc =NULL;
act_moveto_yinzi =NULL;
actall=NULL;
thiszhujiao_flag =
p_ui_name = new PublicShowUI();
npc = SpiritsPlayer::create(roledata.spiritUrl-&getCString());
if(npc==NULL)
CCLog("图层路径有误,请检查路径");
//设置NPC初始位置坐标(该坐标取决于当前画层)
npc-&setPosition(roledata.nowpoint);
//NPC动画设置
playdonghua = SpiritsPlayer::updateNowAnt(roledata);
npc-&runAction(playdonghua);
/**开始添加角色各部件**/
//添加角色名称
CCLabelTTF* label = CCLabelTTF::create(roledata.spiritname-&getCString(), "微软雅黑",12);
label-&setColor(ccWHITE);
label-&setDirty(true);
label-&setPosition(ccp(npc-&getContentSize().width/2,npc-&getContentSize().height+6));
CCLabelTTF* labelback = CCLabelTTF::create(roledata.spiritname-&getCString(), "微软雅黑",12);
labelback-&setColor(ccBLACK);
labelback-&setDirty(true);
labelback-&setPosition(ccp(npc-&getContentSize().width/2+1,npc-&getContentSize().height+6-1));
//添加NPC人物脚下阴影
yinzi = CCSprite::create(p_yinzi);
if(yinzi==NULL)
CCLog("图层路径有误,请检查路径");
if(zhujiaoflag==true)
yinzi-&setPosition(ccp(npc-&getContentSize().width/2,12));
yinzi-&setPosition(ccp(npc-&getContentSize().width/2,1));
npc-&addChild(yinzi,-1,110);
npc-&addChild(label,2,111);
npc-&addChild(labelback,1,112);
cocos2d::CCRect SpiritsPlayer::rect()
//获取精灵区域大小
return CCRectMake(npc-&getPositionX()- npc-&getContentSize().width
* npc-&getAnchorPoint().x,npc-&getPositionY()-npc-&getContentSize().height* npc-&getAnchorPoint().y,npc-&getContentSize().width, npc-&getContentSize().height);
bool SpiritsPlayer::isTouchInside(CCPoint thisPos)
CCPoint localPos = thisP
CCRect rc = rect();
bool isTouched = rc.containsPoint(localPos);
if (isTouched == true) {
CCLog(FontChina::G2U("触发点击"));
CCLog(FontChina::G2U("未点击"));
return isT
void SpiritsPlayer::Spirits_talkabout_hid()
CCLog(FontChina::G2U("************调用了*****************"));
CCAnimate* SpiritsPlayer::updateNowAnt(MainRoledata roledata)
CCAnimation* donghua = SpiritsPlayer::getNowAnt(roledata);
if(roledata.actiontime&0)
donghua-&setDelayPerUnit(roledata.actiontime/roledata.maxcut_zhan);
donghua-&setDelayPerUnit(2.0f/15.0f);//执行默认时间
donghua-&setRestoreOriginalFrame(true);
donghua-&setLoops(-1);
CCAnimate* playdonghua = CCAnimate::create(donghua);
/*************
* 主角位移移动
*************/
void SpiritsPlayer::moveTomap_move(int uestime, CCPoint newpoint,bool npcflag)
if(npcflag==true)
actbackfun = CCCallFunc::create(this, callfunc_selector(SpiritsPlayer::moveoverCallBackforNpc));
actbackfun = CCCallFunc::create(this, callfunc_selector(SpiritsPlayer::moveoverCallBack));
movemethod(uestime,newpoint);
void SpiritsPlayer::movemethod(int uestime,CCPoint newpoint)
npc-&stopAction(actall);
act_moveto_npc = CCMoveTo::create(uestime,ccp(newpoint.x,newpoint.y+20));
actall = CCSequence::create(act_moveto_npc,actbackfun,NULL);
npc-&runAction(actall);
/*************
* 改变移动方向
*************/
void SpiritsPlayer::moveTomap_dir(CCPoint newpoint)
GetNPCData npcdata = GetNPCData();
npcdata.GetNPCchapter1();
move_dir=SpiritsPlayer::getNowPointDir(newpoint);
npcdata.role_player.dir=move_
npcdata.role_player.acttodo =
npcdata.role_player.actiontime=0.5;
npc-&stopAction(playdonghua);
playdonghua = SpiritsPlayer::updateNowAnt(npcdata.role_player);
npc-&runAction(playdonghua);
/*************
* 根据点击坐标获得人物的朝向
*************/
Commen_Direction SpiritsPlayer::getNowPointDir(CCPoint newpoint)
Commen_Direction thisdir = rigth_ //默认为右下
//计算移动数据
float center_x,center_y,npc_x,npc_y;
int move_x,move_y;
//更新NPC方向,状态
CCPoint origin = CCDirector::sharedDirector()-&getVisibleOrigin();
CCSize size = CCDirector::sharedDirector()-&getWinSize();
center_x = size.width/2;
center_y = size.height/2;
npc_x = npc-&getPositionX();
npc_y = npc-&getPositionY();
(int)(npc_x -newpoint.x );
(int)(npc_y -newpoint.y - 20);
if(move_x&=10&&move_y&=-10)
thisdir = left_
else if(move_x&=10&&move_y&=10)
thisdir = left_
else if(move_x&=-10&&move_y&=-10)
thisdir = rigth_
else if(move_x&=-10&&move_y&=10)
thisdir =rigth_
else if(move_x&-10&&move_x&10&&move_y&0)
else if(move_x&-10&&move_x&10&&move_y&0)
else if(move_x&0&&move_y&-10&&move_y&10)
else if(move_x&0&&move_y&-10&&move_y&10)
/*************
* 移动完成后的回调
*************/
void SpiritsPlayer::moveoverCallBack()
//移动完成之后恢复站立状态
GetNPCData npcdata = GetNPCData();
npcdata.GetNPCchapter1();
npcdata.role_player.dir=move_
npcdata.role_player.acttodo =
npcdata.role_player.actiontime=1.1f;
npc-&stopAction(playdonghua);
playdonghua = SpiritsPlayer::updateNowAnt(npcdata.role_player);
npc-&runAction(playdonghua);
/*************
* 普通NPC移动完成后的回调
*************/
void SpiritsPlayer::moveoverCallBackforNpc()
/*************
* 点击瞬移至此
*************/
void SpiritsPlayer::updateNpcPoint(CCPoint newpoint)
p_ui_name-&updataGameText(ccp(newpoint.x,newpoint.y+npc-&getContentSize().height/2+10));
npc-&setPosition(newpoint);
yinzi-&setPosition(ccp(newpoint.x,newpoint.y-npc-&getContentSize().height/2+5));
/*********************
* 八方向人物动作合成器
*********************/
CCAnimation* SpiritsPlayer::getNowAnt(MainRoledata roledata)
CCAnimation* thisdonghua = CCAnimation::create();
switch (roledata.dir)
switch (roledata.acttodo)
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s06%03d.png",roledata.spiritUrl_pao-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case stand:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s06%03d.png",roledata.spiritUrl_zhan-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case attack:
case death:
case funny:
case down:
switch (roledata.acttodo)
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s04%03d.png",roledata.spiritUrl_pao-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case stand:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s04%03d.png",roledata.spiritUrl_zhan-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case attack:
case death:
case funny:
case lefts:
switch (roledata.acttodo)
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s05%03d.png",roledata.spiritUrl_pao-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case stand:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s05%03d.png",roledata.spiritUrl_zhan-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case attack:
case death:
case funny:
case rigth:
switch (roledata.acttodo)
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s07%03d.png",roledata.spiritUrl_pao-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case stand:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s07%03d.png",roledata.spiritUrl_zhan-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case attack:
case death:
case funny:
case rigth_up:
switch (roledata.acttodo)
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s03%03d.png",roledata.spiritUrl_pao-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case stand:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s03%03d.png",roledata.spiritUrl_zhan-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case attack:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s03%03d.png",roledata.spiritUrl_attack-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case magicup:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s03%03d.png",roledata.spiritUrl_magic-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case death:
case funny:
case rigth_down:
switch (roledata.acttodo)
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[1000] = {0};
sprintf(donghuaurl,"%s00%03d.png",roledata.spiritUrl_pao-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case stand:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s00%03d.png",roledata.spiritUrl_zhan-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case attack:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s00%03d.png",roledata.spiritUrl_attack-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case magicup:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s00%03d.png",roledata.spiritUrl_magic-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case death:
case funny:
case left_down:
switch (roledata.acttodo)
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s01%03d.png",roledata.spiritUrl_pao-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case stand:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s01%03d.png",roledata.spiritUrl_zhan-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case attack:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s01%03d.png",roledata.spiritUrl_attack-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case magicup:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s01%03d.png",roledata.spiritUrl_magic-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case death:
case funny:
case left_up:
switch (roledata.acttodo)
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s02%03d.png",roledata.spiritUrl_pao-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case stand:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s02%03d.png",roledata.spiritUrl_zhan-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case attack:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s02%03d.png",roledata.spiritUrl_attack-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case magicup:
for(int i = 0; i&=roledata.maxcut_ i++)
char donghuaurl[100] = {0};
sprintf(donghuaurl,"%s02%03d.png",roledata.spiritUrl_magic-&getCString(),i);
thisdonghua-&addSpriteFrameWithFileName(donghuaurl);
case death:
case funny:
SpiritsPlayer::~SpiritsPlayer(void)
sprintf(donghuaurl,"%s06%03d.png",roledata.spiritUrl_pao-&getCString(),i);
总体思路就是,我们通过了帧连接的拼接来构成动画,通过我们之前写好的model数据来定义我们任务的朝向等问题
比如00000代表右,01000就代表右上,这个也得根据自己素材的模型来写不同的处理逻辑,万变不离其中;
如果我们的图片是在一张大图的集合中,我们可以同过CCRect来处理获取帧图片方式!
CCAnimation* getNowAnt(MainRoledata roledata); CCAnimate* updateNowAnt(MainRoledata roledata);
通过这两个方法集合,我们就能获取到八面玲珑的朝向,甚至我们连,后续的动画机制也加入了,比如,跑动,打斗,做各种动作等!
Commen_Direction SpiritsPlayer::getNowPointDir(CCPoint newpoint); //获取朝向
void SpiritsPlayer::moveTomap_dir(CCPoint newpoint) //改变朝向方法
以上两个方法,我们是专门处理,之后精灵移动,移动完之后还得恢复到站立状态,移动过程中改变人物朝向问题!所以要考虑的很清楚
很清晰,思路清楚了,才能方便以后的拓展。
OK了,有了以上的精灵类,将其实例化到一个简单的图片地图上,他就会动了;
添加的时候我们直接addchild方法!!
SpiritsPlayer*&role_main = new SpiritsPlayer(basedatas-&role_player,1,false);
nowmap-&addChild(role_main-&npc, 999);
nowmap 暂且可以用一张图片CCSprite代替!!!
下一篇博客我会非常详细的将地图制作方法写出来给大家一起分享,由于其实我之前都是C#,JAVA做的很多,很多地方和细节还需要重构
还需要大家多指点一下,这也是我学习的好机会;
游戏demo及素材下载地址(demo里面包含了所有的素材资料);
/share/link?shareid=&uk=&third=15
ps:广告我建了一个QQ群:和大家一起分享cocos2dx开发经验【】主题 : cocos2dx中游戏如何调整为45度视角
级别: 新手上路
可可豆: 30 CB
威望: 30 点
在线时间: 38(时)
发自: Web Page
来源于&&分类
cocos2dx中游戏如何调整为45度视角&&&
在二维背景中,有3D的精灵,想调成45度视角,不知道怎么弄?  在哪位仁兄知道不    求指教!
级别: 骑士
可可豆: 315 CB
威望: 306 点
在线时间: 39(时)
发自: Web Page
同求此问题
金元宝-免费神器!
级别: 骑士
可可豆: 1670 CB
威望: 3612 点
在线时间: 592(时)
发自: Web Page
我知道,我知道。。。问我嘛,问我嘛。。。
自己动手,丰衣足食。
级别: 新手上路
可可豆: 30 CB
威望: 30 点
在线时间: 38(时)
发自: Web Page
回 2楼(konglongdan) 的帖子
膜拜呀&&&&&&&& 怎么做的呀
级别: 骑士
可可豆: 1670 CB
威望: 3612 点
在线时间: 592(时)
发自: Web Page
回 3楼(Alinch) 的帖子
其实解决方法挺多的。因为你既有2d&&又有3d,这里我说一个最简单的方法吧。你把你的3d object 沿x轴 旋转45度不就行了吗?
自己动手,丰衣足食。
级别: 新手上路
可可豆: 30 CB
威望: 30 点
在线时间: 38(时)
发自: Web Page
回 4楼(konglongdan) 的帖子
哦哦&&&&&&&&&&&&还有这个3D的精灵需要做一些rotate跟move的动作&&&&&&怎么把这些动作也体现在&& 绕x轴旋转45度的平面上&&?
级别: 新手上路
可可豆: 6 CB
威望: 6 点
在线时间: 78(时)
发自: Web Page
回 5楼(Alinch) 的帖子
关于这个问题请你看@konglongdan的头像
级别: 骑士
可可豆: 1670 CB
威望: 3612 点
在线时间: 592(时)
发自: Web Page
回 5楼(Alinch) 的帖子
嗯。 这个就确实是一个问题了。怎么在做一些动作的情况下,不影响那些动作,而且还可以45度角。小弟不才,又想到了一个简单方法。那就是每个object 不是有个矩阵吗。&&如果你那个矩阵初始就是一个45度旋转过的。那么接下来在这个矩阵下做的动作&&都会是以45度为前提的变换了。祝lz 好远。。。
自己动手,丰衣足食。
级别: 新手上路
可可豆: 30 CB
威望: 30 点
在线时间: 38(时)
发自: Web Page
回 7楼(konglongdan) 的帖子
soga&&&&&&那是哪一个矩阵?
级别: 侠客
UID: 219202
可可豆: 414 CB
威望: 361 点
在线时间: 352(时)
发自: Web Page
斜45度仰望天空,在把手机摆在天空的位置就实现了
本帖最近评分记录: 共1条评分记录
笑死我了。。。
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ COCOS2D中对精灵的操作、对图片的各种操作
类型:文件处理大小:7.4M语言:中文 评分:6.6
于精灵的各种操作,总结一下以便以后复习查找。内容简要:1、初始化 2、创建无图的精灵 3、设置精灵贴图大小 &4、添加入层中5、对精灵进行缩放 &6、对精灵款或高进行缩放 &7、旋转精灵8、设置精灵透明度 &9、精灵的镜像反转 &10、设置精灵的颜色11、得到图的宽高 & 12、按照像素设定图片大小 &13、在原有的基础上加xy的坐标14、设置图片锚点 & &15、从新排列z轴顺序 & 16、更换精灵贴图17、设置可视区域 18、贴图无锯齿//初始化CCSprite* sprite =[CCSprite spriteWithFile:@&Icon.png&];&//创建无图的精灵CCSprite*sprite2 =[CCSprite node];//设置精灵贴图大小sprite2.textureRect=CGRectMake(0, 0, 20, 20);//设置其为宽20,高20.//添加入层中[self addChild:sprite&z:2]; //将精灵加入层中设置其z轴为2//对精灵进行缩放sprite.scale=2;//放大2倍//对精灵款或高进行缩放sprite.scaleX = 2;//宽放大2倍&sprite.scaleY = 2;//高放大2倍//旋转精灵sprite.rotation=90;//旋转90度//设置精灵透明度sprite.opacity=255;//设置透明度为完全不透明(范围0~255)//定义精灵位置sprite.position=ccp(100,100);//设置精灵中心点坐标是x=100,y=100//精灵的镜像反转[sprite setFlipX:YES];//X轴镜像反转[sprite setFlipY:YES];//Y轴镜像反转//设置精灵的颜色[sprite setColor:ccc3(255, 0, 0)];//设置颜色为红色//得到图的宽高float &contentSize&&=&sprite&.contentSize.width //得到图片的宽高//按照像素设定图片大小sprite.scaleX=(20)/contentS //按照像素定制图片宽高//在原有的基础上加xy的坐标sprite.position = ccpAdd(sprite.position,ccp(20,20));//在原有坐标的基础上加减坐标//设置图片锚点[sprite&setAnchorPoint:ccp(0.5,0.5)&];//设置图片的锚点//从新排列z轴顺序[self reorderChild:sprite z:1];//从新排列z轴顺序//更换精灵贴图CCTexture2D * =[[CCTextureCache sharedTextureCache] addImage: @&test.png&];//新建贴图[sprite&setTexture:test];&//更换精灵贴图,加载帧缓存,这个test.plist保存了fram这张图[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@&test.plist&];CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@&fram.png&];[sprite2 setDisplayFrame:frame];//设置可视区域CCSprite * sprite3 =[CCSprite spriteWithFile:@&icon.png& rect:CGRectMake(0, 0, 20,20)];//创建时设置[sprite3 setTextureRect:CGRectMake(10, 10, 30, 30)];//创建后设置//贴图无锯齿[sprite3&.texture setAliasTexParameters];
06-0410-1905-1101-2201-2201-2201-2201-2101-1701-13
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载

我要回帖

更多关于 cocos2dx设置精灵大小 的文章

 

随机推荐