cocos2dx lua 加密-Lua 精灵B加在精灵A上,精灵A加在层上,点击事件怎么写才可以判断是否点击到精灵B?求大神!!

lua 怎么获取精灵纹理路径_百度知道
lua 怎么获取精灵纹理路径
我有更好的答案
test_game&,&d:&#92.txt&;/ 相对路径dm.SetPath &c:\/ 绝对路径dm.CopyFile &c,1&#47/,&456.txt&quot:\123.txt&quot.CopyFile &123.txt&456
采纳率:84%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。相关文章推荐
------------------- Sprite及ImageView类型替换新的图片资源 ----------------------
--Sprite类型
local img = cc.Sp...
废话不多说,直接上代码
给游戏节点设置背景图片,当没有对应游戏的背景图片就设置默认的背景图片,这需要判断图片是否存在,我这里用到了缓存,直接贴代码local _gameImageFile = string.format("l...
---1.从图片文件创建
--适合于要显示的这张图片的全部区域或部分区域
function TestTest:CreateSprite1()
local png = "lobby/lobby....
需求描述:
给sprite增加touch监听
local CardSprite
= class("CardSprite",function()
return disp...
勤奋努力,持之以恒!
开发环境:
Mac OSX 10.9.3
Cocos Code IDE :V1.0.0.RC0
Cocos2dx-v3.2
游戏场景中的文字包括了静态文字和动态文字。静态文字如下图所示游戏场景中①号文字“COCOS2DX”,动态文字如图4-1所示游戏场景中的②号文字“Hello World”。静态文字一般是由美工使用Pho...
创建精灵的五种方法
精灵是cocos2d-x游戏开发中不可或缺的元素,创建方法不尽相同,本文将介绍五种较为实用的方法,让开发者可以简便迅速的完成精灵的“塑造”。
方法一:直...
1.createauto sprite = Sprite::create("HelloWorld.png");
Sprite* Sprite::create(const std::string& fi...
cocos2dx版本为2.1.4
游戏中一般有玩家和怪物,他们都有相同的动作状态,如:idle、walk、attack、defense等,我们需要抽象出玩家和怪物的代码实...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【Cocos2dx开发】精灵
【Cocos2dx开发】精灵
写在前面——
如果转载请注明出处,谢谢大家支持
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
——Forward
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&我的微博——
QQ技术交流群——forTheDream()
在上一篇博客中,Forward对场景以及各种场景切换特效进行了一个入门级的学习分享,但是只有一个场景是不能完成游戏开发的。用画家画画来做比喻,有了场景就好像画家拿到了一页画纸,而要完成一幅壮丽的图画,还需要在这页画纸上通过合理的分配,填充上不同的元素。这里所说的元素,类比到游戏开发中,就是场景中的精灵。
今天我们就来学习一下Cocos2dx中的精灵这一概念。按照习惯,我们首先来看看CCSprite这个类相关的类图。
如图1中所示,CCSprite继承自CCTextureProtocol和CCNodeRGBA类,而CCNodeRGBA有继承自CCNode和CCRGBAProtocol类。将上面的关系翻译成自然语言,我们就很好理解CCSprite这个类了——所谓CCSprite精灵,就是用来描述纹理和颜色信息的节点。为了我们能够更深入的了解CCSprite精灵类,还需要进一步深入的学习。
查看CCSprite类源码,可以看到,里面提供了很多API,常用的比如创建、设置纹理信息、设缩放、旋转、坐标位置、锚点信息、隐藏与显示的设置、子节点的添加与移除等等,具体的Forward在这里不再赘述,相信大家都能看懂。
接下来我们通过程序来进行进一步的学习。这里使用Cocos2dx例子中的资源“grossini”。
&&&&&&&&&&&&&&&&
好的,我们先在已经创建好的Cocos2dxDemo工程中添加一个精灵上去。
&&&&&&&&&&&&&&&
&&&&那么这个精灵在加载的过程中,我们都做了哪些工作呢?
&&&&首先,我们加载动画的代码清单如下:
CCSprite* pSprite = CCSprite::create("grossini.png");
pSprite-&setPosition(ccp(240,160));
this-&addChild(pSprite);
&&&&进入精灵类的create接口,代码清单如下:
CCSprite* CCSprite::create(const char
*pszFileName)
CCSprite *pobSprite = new
CCSprite();
if (pobSprite &&
pobSprite-&initWithFile(pszFileName))
pobSprite-&autorelease();
return pobS
CC_SAFE_DELETE(pobSprite);
return NULL;
可以看出在CCSprite的create接口中,我们首先创建了一个精灵类对象,然后通过initWithFile接口来对这个精灵做初始化,就Forward前面说的一样,所谓精灵,就是用来描述纹理和颜色信息的节点,创建CCSprite对象的过程我们就得到了这个节点,初始化就相当于给这个节点填充上对应的纹理和其它必需的信息的过程。继续跟进~~
bool CCSprite::initWithFile(const char
*pszFilename)
CCAssert(pszFilename != NULL, "Invalid
filename for sprite");
CCTexture2D *pTexture =
CCTextureCache::sharedTextureCache()-&addImage(pszFilename);
if (pTexture)
CCRect rect = CCRectZ
rect.size = pTexture-&getContentSize();
return initWithTexture(pTexture,
// don't release
// when load texture failed, it's better
to get a "transparent" sprite then a crashed
this-&release();
return false;
这里我们可以看出,通过CCTextureCache的addImage,我们会得到一张纹理信息,并且最终用来加载到CCSprite上的就是张纹理。
继续进入到addImage接口中,可能这个接口的实现略微显得有点长,但并不影响我们的代码阅读与理解。这段代码主要实现了在一张Hash表中去查找对应的纹理信息是否已经加载,如果找到就将对应纹理返回
CCFileUtils::sharedFileUtils()-&fullPathForFilename(pathKey.c_str());
if (pathKey.size() ==
return NULL;
(CCTexture2D*)m_pTextures-&objectForKey(pathKey.c_str());
否则的话就要先创建一个Image然后通过这个Image来完成一张新的纹理的创建,并将这张新创建的纹理加入到Hash表中。
&&&&&&&&&&&&&
&pImage = new CCImage();
&&&&&&&&&&&&&&&
CC_BREAK_IF(NULL == pImage);
&&&&&&&&&&&&&&&
bool bRet =
pImage-&initWithImageFile(fullpath.c_str(),
eImageFormat);
&&&&&&&&&&&&&&&
CC_BREAK_IF(!bRet);
&&&&&&&&&&&&&&&
texture = new
CCTexture2D();
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
if( texture
&&&&&&&&&&&&&&&&&&&
texture-&initWithImage(pImage) )
&&&&&&&&&&&&&&&
#if CC_ENABLE_CACHE_TEXTURE_DATA
&&&&&&&&&&&&&&&&&&&
// cache the texture file
&&&&&&&&&&&&&&&&&&&
VolatileTexture::addImageTexture(texture, fullpath.c_str(),
eImageFormat);
&&&&&&&&&&&&&&&&&&&
m_pTextures-&setObject(texture, pathKey.c_str());
&&&&&&&&&&&&&&&&&&&
texture-&release();
&&&&&&&&&&&&&&&
接着,我们进入到CCImage类的initWithImageFile接口中。
bool CCImage::initWithImageFile(const char *
strPath, EImageFormat eImgFmt)
bool bRet = false;
#ifdef EMSCRIPTEN
// Emscripten includes a
re-implementation of SDL that uses HTML5
// operations underneath. Consequently,
loading images via IMG_Load (an SDL
// API) will be a lot faster than
running libpng et al as compiled with
// Emscripten.
SDL_Surface *iSurf = IMG_Load(strPath);
int size = 4 * (iSurf-&w *
iSurf-&h);
bRet = _initWithRawData((void*)iSurf-&pixels, size, iSurf-&w,
iSurf-&h, 8, true);
unsigned int *tmp = (unsigned int
int nrPixels = iSurf-&w *
for(int i = 0; i & nrP
unsigned char *p = m_pData + i * 4;
tmp[i] = CC_RGB_PREMULTIPLY_ALPHA( p[0], p[1], p[2], p[3]
SDL_FreeSurface(iSurf);
unsigned long nSize = 0;
std::string fullPath =
CCFileUtils::sharedFileUtils()-&fullPathForFilename(strPath);
unsigned char* pBuffer =
CCFileUtils::sharedFileUtils()-&getFileData(fullPath.c_str(),
if (pBuffer != NULL &&
nSize & 0)
bRet = initWithImageData(pBuffer, nSize, eImgFmt);
CC_SAFE_DELETE_ARRAY(pBuffer);
EMSCRIPTEN
在#else到#endif一段,我们应该很清楚地看到,在每次调用initWithImageFile接口来初始化Image对象的时候都会去通过“rb”方式读取文件。至此,我们可以说对一个精灵的创建到纹理加载全过程已经有了比较深入的学习了。
批处理图片的学习
Forward对上面的Demo程序作了一些修改——
mIndex = 1;
mElapseTime = 0.0f;
pSprite = NULL;
pSprite = CCSprite::create("grossini.png");
pSprite-&setPosition(ccp(240,160));
this-&addChild(pSprite);
this-&schedule(schedule_selector(HelloWorld::Tick));
首先我们在场景上添加了一个精灵对象,然后通过schedule接口注册了一个回调,具体的回调代码清单如下。
void HelloWorld::Tick(float dt)
mElapseTime +=
if (mElapseTime &=
mElapseTime = 0.0f;
int tIndex = mIndex % 14 +
char strImageName[64] =
sprintf(strImageName,"grossini_dance_d.png",tIndex);
pSprite-&initWithFile(strImageName);
翻译为自然语言就是,每隔0.3秒,我们对之前创建的grossini_dance对象做一次纹理修改,编译运行——grossini_dance果然动起来了。
但当我们断点调试的时候,会发现在每次使用的纹理图片在第一次使用的时候都会执行到这里。
bool bRet =
pImage-&initWithImageFile(fullpath.c_str(),
eImageFormat);
CC_BREAK_IF(!bRet);
上面我们提到“调用initWithImageFile接口来初始化Image对象的时候都会去通过“rb”方式读取文件”而文件操作一般都是比较耗时的,在小的Demo程序中可能看不到这一点对效率造成的影响,但是当我们在做的是一个真正的游戏项目时,这里的时间消耗就不能忽略甚至与不能容忍了。
这就引出了我们接下来要说的另外一问题。当我们在第一次使用图2中“grossini_dance_01.png”到“grossini_dance_14.png”这一套序列图片的纹理信息的时候,我们需要对一张图片进行一次文件读取。
解决这个问题的思路是,我们通过将一张张碎图拼到一张大图上去,所有纹理在第一次加载图片的时候就已经读进内存,以后直接使用,通过降低文件读取次数来提高效率。这里Forward使用TexturePacker工具(不了TP打包工具的同学可以去网上查找一下相关资料,网上资源很丰富哦~^_^),将十四张碎图拼接成一张大图并导出。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
如图5所示,我们在导出后,得到了一张拼接好的大图和一个plist文件。打开这个plist文件我们会发现,其实它就是用来描述每一张碎图在这张大图的上的位置,像素宽高等等信息的。
&&&&下面我们就用这套资源来重新完成上面的那个简易动画。代码清单如下。
mIndex = 1;
mElapseTime = 0.0f;
pSprite = NULL;
&CCSpriteFrameCache::sharedSpriteFrameCache()-&addSpriteFramesWithFile("grossini.plist");
pSprite = CCSprite::create("grossini.png");
pSprite-&setPosition(ccp(240,160));
this-&addChild(pSprite);
this-&schedule(schedule_selector(HelloWorld::Tick));
&&&&与之前的不同之处在于,这里使用CCSpriteFrameCache加载了我们导出的plist文件,其实这里就是将plist文件描述的“grossiniDemo.png”大图加载到内存并通过plist文件描述对其划分为一个个小的CCSpriteFrame。
void HelloWorld::Tick(float dt)
mElapseTime +=
if (mElapseTime &=
mElapseTime = 0.0f;
int tIndex = mIndex % 14 +
char strImageName[64] =
sprintf(strImageName,"grossini_dance_d.png",tIndex);
pSprite-&initWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()-&spriteFrameByName(strImageName));
&&&&然后在使用的时候,我们直接通过每个碎图名来获取对应纹理信息即可。
&&&&OK!继续断点调试——我们会发现,Image的initWithImageFile接口只调用到了一次,而这一次其实就是“grossini.png”大图加载的时候调用的。
&&&&好的,今天的学习就先到这里吧@_@
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。相关文章推荐
1. ImageView 的方式:封装的Widget组件ImageVIew实现了类似按钮的监听事件,所以处理起来很方便直接ImageView*
_pPokerImageV
_pPokerI...
创建一个Cocos2d-X
1.首先定义监听事件
var touchListener_Sprite_touxiang_pic = cc.EventListener.create({//自己
原文同步发布于我的wiki,查看原文或更新请移步:
点击打开链接
Cocos里面的每个Node都有一个和它对应的矩形区域,通过api getBoundingBox()...
要使精灵能够接收到触摸事件,无非要做三件事。
注册触摸事件;
接收触摸事件;
处理触摸事件。
下面就从这三点出发,来了解一下精灵如何响应触摸事件。
1.注册触摸事件
这个Demo的效果就是在电脑鼠标或在手机上用手指点击屏幕的时候,对应的精灵会移动到点击的位置.
一、首先我们在初始化的时候添加好要移动的精灵和开启触屏响应.开启触屏响应只要调用一个函数既可:
实现点击屏幕添加一个小球的效果:HelloWorldScene.h文件:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__#i...
红孩儿Cocos2d-x学习园地教学资料由 [红孩儿游戏编程教学组] 组织编写.版权所有,盗文必究!
如何让一个精灵跟随触点移动
传奇资源归属盛大游戏;仅自己学习使用;如果有侵权本人做及时删改
本人cocos菜鸟,如有代码不入法眼,请多包涵;直接上代码;
#include "LoginDoor.h"
using nam...
如何移动一个cocos2d-x精灵
介绍了如何添加一个cocos2d-x精灵后,为游戏场景添加了一个精灵。但一个英雄或许太过孤单,我们应该加入一些敌人,让他来打败。本文我们将讲述如何移动...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)关于点击精灵如何判断点击到哪个对象_百度知道
关于点击精灵如何判断点击到哪个对象
我有更好的答案
就截立刻购买这四个字就行,将图片命名成“立刻购买.bmp”然后添加到附件里面& 0 And intY &,0.9,intX;/ol&2.复制下面代码到脚本运行测试即可DoFindPic 0,0,,&立刻购买.bmp&Attachment:&#92,intYIf intX &gt把立刻购买这张图截图,但是不要截全图
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 sublime cocos2dx lua 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信