为什么驱动精灵打不开一些游戏开发中把角色图片称之为“Sprite”(精灵)

3688人阅读
Quick-Cocos2d-x(15)
游戏嘛,没图片没画面能叫游戏吗,所以我们还是先看用quick的方式怎么创建精灵。
quick的api中对精灵的创建讲解得还是很详细,所以创建起来很简单。
display.newSprite(filename, x, y, params)
filename:精灵文件名
x:x位置坐标
y:y位置坐标
params:表参数(不常用)
我们创建的时候为了方便,可以添加x,y参数,这样就不用在后面再设置位置了。此外,对于精灵的文件名,我们在使用cocos2dx的时候,都知道有直接从文件读取,也有的是从缓存帧中读取的,所以为了区分,quick在文件名上使用了”#“来区分它们,带有”#“说明该名称是从缓存帧中读取。
实践一下,还是在上节创建的MyScene场景中修改代码。
所用到的图片有,
打包工具创建图片集合
普通图片文件
function MyScene:ctor()
--普通文件创建精灵
local sp1 = display.newSprite(&icon.png&, display.width/4, display.cy)
self:addChild(sp1)
--创建图片缓存
display.addSpriteFramesWithFile(&coco.plist&, &coco.png&)
--通过缓存图片名称创建
local sp2 = display.newSprite(&#icon.png&, display.width/2, display.cy)
self:addChild(sp2)
--创建一个CCSpriteFrame
local frame = display.newSpriteFrame(&icon.png&)
local sp3 = display.newSprite(frame, display.width/4*3, display.cy)
self:addChild(sp3)
显示效果,
可以看到这三种传入filename参数,可以创建出一样的精灵效果来。
上面代码中,display.width是屏幕的宽,相当于getWinSize().width,display.cy是屏幕高度的一半,相当于getWinSize().height/2
创建之后,对于给精灵进行缩放,旋转等一些基本属性设置,和原来的用法相同,这里就不多举例了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:224685次
积分:2948
积分:2948
排名:第9728名
原创:58篇
评论:111条
文章:14篇
阅读:51395
文章:13篇
阅读:74725
(1)(4)(1)(1)(5)(15)(1)(4)(2)(2)(9)(4)(8)(1)(1)Sprite Kit(10)
Swift(6)
上一节我们讲了如何用图片创建加入精灵,我们创建了2个精灵,都是用同一张图片
我们加入一段代码,把第二个加入的精灵颜色改变下,改成红色,这个方法我不说,以后讲动作时再讲。
override func didMoveToView(view: SKView) {
//用一张图片初始化一个精灵
let ship = SKSpriteNode(imageNamed: &Spaceship&)
//设置精灵坐标
ship.position = CGPoint(x: 500, y: 400)
//添加精灵到当前视图中
self.addChild(ship)
//用一个纹理(也是一张图片)初始化一个精灵
let texture = SKTexture(imageNamed: &Spaceship&)
let secondShip = SKSpriteNode(texture: texture)
secondShip.position = CGPoint(x: 500, y: 500)
self.addChild(secondShip)
//改变红色
secondShip.runAction(SKAction.colorizeWithColor(UIColor.redColor(), colorBlendFactor: 1, duration: 0.1))
模拟器截图
我们可以清楚看到,第二个飞船覆盖了第一个,为什么?因为第二个飞船是是在第一个飞船之后addChild当前视图里面的,第一个飞船渲染后,第二个飞船再渲染的,所以第二个能覆盖第一个。我们改变下addChild加入视图的顺序
self.addChild(secondShip)
self.addChild(ship)模拟器截图
这样,第一个精灵就覆盖了第二个精灵,但是每个精灵的顺序这样调节太累了,如何用简单的方式设置精灵的渲染次序,有的,就是精灵的zPosition属性
,值越大,越后渲染,太复杂了,这样想吧,值大的精灵就能覆盖值小的精灵
默认精灵zPosition为0.就要通过addChild手动调节加入次序,设置了zPosition,就不需要关心addChild次序了。
当前是第一个覆盖了第二个精灵。我们来改成第二个覆盖第一个,只要第二个zPosition值比第一个大就行。
在原代码底部加入2行
ship.zPosition = 0
secondShip.zPosition = 1模拟器
你看这样,第二个红色的精灵就覆盖了第一个了吧。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:19153次
排名:千里之外
原创:22篇
转载:16篇
(4)(5)(4)(5)(20)15、Cocos2dx 3.0游戏开发找小三之Sprite:每个精灵都是上辈子折翼的天使 - 推酷
15、Cocos2dx 3.0游戏开发找小三之Sprite:每个精灵都是上辈子折翼的天使
重开发者的劳动成果,转载的时候请务必注明出处
Sprite 可以说是游戏中最重要的组成元素;
它描述了游戏中的精灵,是 Node 的一个最重要也最灵活的子类。
Sprite 很重要,它代表了游戏中一个最小的可见单位,
同时Sprite 也很灵活,它装载了一个平面纹理,具有丰富的表现力,而且&
可以通过多种方式加载。
如果说 Scene 和 Layer 代表了宏观的游戏元素管理,那么 Sprite 则为微观世界提供了丰富灵活的细节表现。
纹理就是一张图片,这张图片被精灵显示出来。
纹理是3D游戏中绘制到物体表面上的图案;
Cocos2d-x使用了 3D 绘图库 OpenGL;
这样一来,
我们既可以利用图形加速器提高绘图效率,也可以在游戏中加入 3D 变换特效,实现更绚丽的效果。
为了在 3D 环境中绘制
平面图形,Cocos2d-x 只需在 3D 空间中垂直于视线的平面上绘制矩形,在矩形的表面使用纹理贴图即可。
创建小天使
游戏开发应用中,精灵是由一个纹理创建的;如果不对精灵做任何设置,精灵就是显示在屏幕上的一张图片。
通常精灵被置于层中,因此我们首选在层的初始化方法中创建精灵,设置属性,并添加到层中。
最常用的创建精灵的方式 是:使用一个图片文件通过使用 Sprite 的工厂方法 create 来创建精灵;
auto bg= Sprite::create(&bg.png&);
这个工厂方法包含一个std::string字符串参数,表示精灵所用纹理的文件名。
Sprite 会自动把图片作为纹理载入到游戏中,然后使用纹理初始化精灵。&
精灵不但可以显示一个完整的纹理,也可以仅显示纹理的一部分。
通过Sprite* Sprite::create(const std::string& filename, const Rect& rect)就可以达到目的;
下面的代码使用两个参数的 create 工厂方法创建了一个
这个精灵使用&bg.png&作为纹理,但是仅显示纹理左上角 100&100 像素大小的部分:
auto bg2= CCSprite::create(&bg.png&, Rect(0, 0, 100, 100));
第一个参数是所使用纹理的文件名,第二个参数是一个Rect 类型的结构体,表示纹理中显示出来的矩形部分。
Rect(x,y,width,height)用来方便地创建一个矩形。
需要注意的是,纹理的坐标系中原点(0,0)位于左上角,原点向右是 x 轴的正方向,原点向下是 y 轴的正方向。
坐标系统以后再详细描述;
给小天使穿衣服
创建了精灵后,我们还需要把精灵安排在合适的位置,否则引擎也不能决定精灵将如何呈现出来。
诸如精灵的位置、方向、
缩放比例等参数都是精灵的属性,我们在层中添加精灵之前,需要对它们进行恰当地设置。
下面的代码首先获取屏幕大小,
然后根据屏幕大小把精灵置于屏幕中央:
Size size = Director::getInstance()-&getWinSize();
Point pos = Point(size.width / 2, size.height / 2);
bg-&setPosition(pos);
我们可以看到,在这段代码中我们修改了精灵的 Position 属性。
Position 属性是一个 Point 类型的结构体,表示精灵在 层中的位置,它是精灵相对于层的坐标。
把精灵的位 置坐标设置为屏幕长宽的一半,就可以使精灵位于屏幕中央了。&
精灵具有十分丰富的属性,我们可以利用这些属性让精灵灵活地呈现出来。
但实际上,这些属性不仅仅是精灵才拥有的,
同时也属于Node。
Sprite 继承自 CCNode,因而也继承了它的全部属性。
天使来到了人间
社置完精灵的属性后,就该把精灵添加到层中了。
实际上 Sprite 与 Layer 都继承自 CCNode,向一个游戏元素中添加其
他游戏元素的 addChild 是 Node 包含的方法,因此我们完全可以如同向场景中添加层一样,把精灵添加到层中;
this-&addChild(bg);
其他常用成员
Sprite 还拥有以下常用的成员:
1、初始化方法
CCSprite 拥有许多种不同的初始化方法,可以方便地创建精灵。
使用这些方法,我们不仅可以通过图片文件来创建精灵,
还可以直接使用纹理或精灵框帧来创建精灵。
a、使用图片文件
static Sprite* create(const std::string& filename);
static Sprite* create(const std::string& filename, const Rect& rect);
其中&filename为图片的文件名,直接传入图片文件相对于&Resource&文件夹的路径即可;
rect 为可选参数,用于指定
精灵显示纹理的部分,它使用前面介绍的纹理坐标系。
b、使用 Texture2D
static Sprite* createWithTexture(Texture2D *texture);
static Sprite* createWithTexture(Texture2D *texture, const Rect& rect, bool rotated=false);
Texture2D 类型的&texture参数为纹理对象,可以使用 TextureCache 类的 addImage 方法把图片文件装载为纹理并返
回,而 rect 与使用图片文件创建精灵的 rect 参数相同。
c、使用 SpriteFrame 创建
static Sprite* createWithSpriteFrame(SpriteFrame *spriteFrame);
static Sprite* createWithSpriteFrameName(const std::string& spriteFrameName);
SpriteFrame 类型的&spriteFrame参数为纹理框帧。SpriteFrame 保存了一个 Texture2D 的引用与一个 Rect 来表
示纹理中的一部分。使用 SpriteFrame 初始化精灵时,也可使精灵显示部分纹理。
2、纹理相关的属性
Sprite 提供了以下与纹理相关的属性,用于获取或设置精灵内容。
Texture2D* _texture:获取或设置精灵所用的纹理。使用此方法设置纹理后,精灵将会显示一个完整的纹理。
Rect _rect:获取或设置纹理显示部分。此 Rect 采用纹理坐标,即左上角为原点。
SpriteBatchNode* _batchNode:获取或设置精灵所属的批节点。
3、纹理相关的方法
Sprite 提供了以下与纹理相关的方法。
virtual void setSpriteFrame(SpriteFrame* newFrame):设置显示中的纹理框帧,
其中&newFrame为新的纹理框帧,其代表
的纹理或纹理的显示部分都可以与旧的框帧不同。&
virtual SpriteFrame* getSpriteFrame() const:获取正在显示的纹理框帧。
virtual bool isFrameDisplayed(SpriteFrame *pFrame) const:返回一个值,表示pFrame是否是正在显示中的纹理框帧。
4、颜色相关的属性
Sprite 提供了以下与颜色相关的属性:
Color3B color:获取或设置叠加在精灵上的颜色。Color3B&由三个颜色分量(红色、绿色和蓝色分量)组成。默认为纯
白色,表示不改变精灵的颜色,如果设置为其他值,则会改变精灵的颜色。
GLubyte Opacity:获取或设置精灵的不透明度。GLubyte 为 OpenGL 的内置类型,表示一个无符号 8 位整数,取值范围从最
小值 0 到最大值 255。
bool isOpacityModifyRGB:获取或设置精灵所使用的纹理数据是否已经预乘 Alpha 通道。当包含 Alpha 通道的图片显示错误
时,可以尝试修改这个属性。
郝萌主友情提示:
守护精灵,守护属于你的天使、、、
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 蓝精灵角色 的文章

更多推荐

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

点击添加站长微信