`

实例:使用纹理对象创建Sprite对象

阅读更多

精灵类是Sprite,它的类图如下图所示:

 

Sprite类直接继承了Node类,具有Node基本特征。此外,我们还可以看到Sprite类的派生类有:PhysicsSprite和Skin。PhysicsSprite是物理引擎精灵类,Skin是皮肤精灵类用于骨骼动画。

使用纹理Texture2D对象创建Sprite对象是使用createWithTexture函数实现的。我们会通过一个实例介绍纹理对象创建Sprite对象使用,这个实例如下面第一张图所示,其中地面上的草是放在背景中的,场景中的两棵树是从“树”纹理图片中截取出来的,最后一张图所示的是树的纹理坐标,注意它的坐标原点在左上角。

                                                  创建Sprite对象实例

场景背景图片

 “树”纹理图片

 

 

树”纹理图片

 

HelloWorldScene.cpp实现的init函数代码如下:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. bool HelloWorld::init()  
  2. {  
  3.    if ( !Layer::init() )  
  4.    {  
  5.        return false;  
  6.    }  
  7.      
  8.    Size visibleSize = Director::getInstance()->getVisibleSize();  
  9.    Point origin = Director::getInstance()->getVisibleOrigin();  
  10.    
  11.         autobackground = Sprite::create("background.png");                                                              ①  
  12.         background->setAnchorPoint(Point::ZERO);                                                                   ②  
  13.    this->addChild(background,0);  
  14.      
  15.    auto tree1 = Sprite::create("tree1.png",Rect(604, 38, 302,295));                                       ③  
  16.    tree1->setPosition(Point(200,230));                                                                                      
  17.    this->addChild(tree1,0);  
  18.      
  19.    Texture2D* cache = TextureCache::getInstance()->addImage("tree1.png");                   ④  
  20.    auto tree2 = Sprite::create();                                                                                                 ⑤  
  21.    tree2->setTexture(cache);                                                                                                     ⑥  
  22.    tree2->setTextureRect(Rect(73, 72,182,270));                                                                     ⑦  
  23.    tree2->setPosition(Point(500,200));                                                                                      
  24.    this->addChild(tree2,0);  
  25.    
  26.    return true;  
  27. }  

 

 

在上面代码第①行Sprite::create("background.png")通过background.png图片创建精灵,第②行代码是设置背景的锚点。

第③行代码Sprite::create("tree1.png",Rect(604, 38, 302, 295))通过tree1.png图片和矩形裁剪区域创建精灵,矩形裁剪区域为(604, 38, 302,295)。

Rect类可以创建矩形裁剪区,Rect构造函数如下:

Rect (float x, float y, float width,float height)

其中x,y是UI坐标,坐标原点在左上角,width是裁剪矩形的宽度,height是裁剪矩形的高度。

第④行代码通过纹理缓存TextureCache创建纹理Texture2D对象,TextureCache::getInstance()是采用单例设计模式,通过getInstance()函数可以获得TextureCache实例,TextureCache 的addImage("tree1.png")函数可以创建纹理Texture2D对象,其中的tree1.png是纹理图片名。

第⑤行代码创建一个空的Sprite对象,所以还要通过的后面的很多函数设置它的属性,其中第⑥行代码tree2->setTexture(cache)是设置纹理。第⑦行代码tree2->setTextureRect(Rect(73, 72,182,270))是设置纹理的裁剪区域。

 

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》

本书交流讨论网站:http://www.cocoagame.net

更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386


《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:

京东:http://item.jd.com/11584534.html

亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当:http://product.dangdang.com/23606265.html

互动出版网:http://product.china-pub.com/3770734

 

《Cocos2d-x实战 C++卷》源码及样章下载地址:

源码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台

分享到:
评论

相关推荐

    实例7---android 版Sprite代码

    在Android中,我们可以使用Android的视图系统(View System)和绘图API(如Canvas)来创建和显示Sprite。这个实例可能涉及以下关键知识点: 1. **自定义View**: 实现Sprite动画通常需要我们继承自`View`类并重写`...

    WebGL/ThreeJS Sprite、SpriteMaterial通过精灵模型和Canvas画布Demo

    5. 创建Sprite对象,传入SpriteMaterial实例作为其材质。 6. 将Sprite添加到场景中,并根据需要调整其位置和大小。 7. 使用Canvas画布进行额外的图形绘制,例如动态生成纹理或添加交互元素。 8. 在渲染循环中,更新...

    babylon-atlas-sprite:启用了纹理图集的Babylon.js精灵

    2. 使用Babylon.js的`BABYLON.Texture`类来创建一个纹理实例,传入图集图片和元数据JSON。 3. 创建`BABYLON.SpriteManager`对象,指定纹理、精灵的大小、数量以及其他参数。 4. 创建`BABYLON.Sprite`实例,关联到...

    HGE学习教程DOC

    - **创建Sprite对象**:使用`new hgeSprite(tex, x, y, width, height)`创建Sprite对象。 - **渲染Sprite**:调用`sprite->Render(x, y)`进行渲染。 - **特性**:可以通过设置Sprite的尺寸、纹理以及颜色等属性来...

    SpriteKit物理系统Demo

    这个“SpriteKit物理系统Demo”是开发者为了展示如何在SpriteKit环境中实现物理模拟而创建的一个实例。让我们深入探讨SpriteKit的物理系统以及它如何工作。 在SpriteKit中,物理世界是由`SKPhysicsWorld`对象管理的...

    AndEngine 经典实例

    实例会解释如何创建和使用纹理集。 5. **音乐与音效**:AndEngine支持音频播放,你可以看到如何加载和播放背景音乐以及音效。 6. **相机操作**:学习如何控制游戏视角,包括平移、缩放和旋转相机。 7. **用户界面...

    ios7 spritekit 游戏demo

    总结来说,"ios7 spritekit 游戏demo"是一个全面展示如何使用SpriteKit开发打击类游戏的实例。它涵盖了从场景构建、物理模拟、动画效果到用户交互和性能优化等多个方面,对于想要学习iOS游戏开发的开发者来说,是一...

    应用源码之andengine中直接加载多张小图片合成一张大图片生成动画精灵.zip

    从TextureAtlas中,我们可以使用TextureRegion获取单个精灵帧,然后用它来创建精灵实例。精灵实例可以添加到Scene中进行渲染。 7. **动画的创建与播放**: 创建Animation对象后,将其赋值给精灵的animation属性,...

    LevelHelper2-SpriteKit:LevelHelper2-SpriteKit

    4. **运行游戏**:在游戏中,LevelHelper2-SpriteKit会自动处理关卡加载、对象实例化以及触发器执行,使得游戏流程顺畅进行。 5. **扩展性**:LevelHelper2-SpriteKit还支持自定义对象和行为,开发者可以根据需求...

    flex中使用away3d引擎播放的帧动画示例

    在“flex中使用away3d引擎播放的帧动画示例”中,开发者可能已经创建了一个`Sprite3D`实例,并通过加载一系列的纹理帧来实现动画效果。这些纹理帧通常存储在单独的图像文件中,然后在运行时按顺序应用到3D模型的表面...

    cocos2d-x学习笔记(16)--spritesheet(精灵表单).rar

    3. **创建`CCSpriteBatchNode`**:使用`CCSpriteBatchNode`初始化,传入加载的纹理对象。`CCSpriteBatchNode`将成为所有精灵的父节点。 4. **创建精灵并添加到批次**:现在可以创建`CCSprite`,并指定精灵帧的名称...

    基于CocoStudio 1.4 的ImageViewer源代码

    这通常涉及到`cocos2d::Director::getInstance()->getTextureCache()->addImage()`函数,用于加载纹理,并通过`new cocos2d::Sprite`创建Sprite实例。 2. ImageViewer的布局和大小:在CocoStudio中设计的Image...

    swift-ARKit和SpriteKit实现的简单AR游戏

    4. **响应用户输入**:使用 SpriteKit 的触摸和手势事件,允许玩家与屏幕上的虚拟对象交互。例如,通过点击或滑动来移动、旋转或销毁游戏元素。 5. **实时更新和渲染**:ARKit会不断更新锚点的位置,因此需要定期...

    SpriteKitboard:适用于 iOS 8 的 SpriteKit 自定义键盘扩展

    1. **自定义键盘样式**:使用 SpriteKit 的图形和动画功能,可以自由设计键盘的外观和风格,比如更改键帽形状、颜色、纹理,或者添加动态背景和过渡动画。 2. **实现动态效果**:利用 SpriteKit 的物理引擎,键盘...

    C++和Ogre角色近战实例

    1. **C++面向对象编程**:理解类的定义、对象的创建以及如何使用继承和多态来设计游戏组件。 2. **Ogre 3D引擎的使用**:掌握资源管理(如模型、纹理、动画),场景管理,以及渲染技术。 3. **游戏逻辑实现**:了解...

    unity序列帧动画demo

    在Unity中,可以使用“Sprite Packer”工具将多个单个图像打包成一个精灵表。这有助于减少内存占用和提高渲染效率。在“Assets”窗口中选中所有帧图像,右键选择“Create” -> “Sprite Sheet”,然后在弹出的窗口...

    Android andengine中直接加载多张小图片合成一张大图片生成动画精灵源码.zip

    7. **内存优化**:使用纹理图集可以有效地管理内存,因为只需要加载一张大图片,而不是多个小图片。此外,AndEngine还提供了纹理缓存机制,以避免频繁加载和释放纹理。 8. **性能优化**:通过合理地设置纹理尺寸,...

    Sprite Kit编程指南(中文版)

    整个Sprite Kit编程指南会详细介绍以上提到的每个方面,内容通常包括理论讲解、实例演示和API参考。指南会从基础的入门知识开始,逐步过渡到高级主题,如自定义着色器和性能优化。对于熟悉苹果开发环境的开发者来说...

    sprite kit 编程指南

    它集成了强大的物理引擎、粒子系统、纹理图集管理以及动画支持等功能,旨在帮助开发者高效地创建高质量的2D游戏。下面,我们将深入探讨Sprite Kit的一些核心概念和功能,帮助你更好地理解和应用这一框架。 #### 1. ...

Global site tag (gtag.js) - Google Analytics