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

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

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

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

创建Sprite对象实例

场景背景图片

“树”纹理图片

树”纹理图片

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

[html] view plaincopy

  1. bool HelloWorld::init()

  2. {

  3. if ( !Layer::init() )

  4. {

  5. return false;

  6. }
  7. Size visibleSize = Director::getInstance()->getVisibleSize();

  8. Point origin = Director::getInstance()->getVisibleOrigin();
  9. autobackground = Sprite::create("background.png");                                                              ①

  10. background->setAnchorPoint(Point::ZERO);                                                                   ②

  11. this->addChild(background,0);
  12. auto tree1 = Sprite::create("tree1.png",Rect(604, 38, 302,295));                                       ③

  13. tree1->setPosition(Point(200,230));

  14. this->addChild(tree1,0);
  15. Texture2D* cache = TextureCache::getInstance()->addImage("tree1.png");                   ④

  16. auto tree2 = Sprite::create();                                                                                                 ⑤

  17. tree2->setTexture(cache);                                                                                                     ⑥

  18. tree2->setTextureRect(Rect(73, 72,182,270));                                                                     ⑦

  19. tree2->setPosition(Point(500,200));

  20. this->addChild(tree2,0);
  21. return true;

  22. }

在上面代码第①行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))是设置纹理的裁剪区域。

时间: 2024-10-22 04:24:41

实例:使用纹理对象创建Sprite对象的相关文章

实例:Cocos2d-js中使用纹理对象创建Sprite对象

本节我们会通过一个实例介绍纹理对象创建Sprite对象使用,这个实例如图5-2所示,其中地面上的草是放在背景(如下图所示)中的,场景中的两棵树是从后图所示的"树"纹理图片中截取出来的,图5-5所示是树的纹理坐标,注意它的坐标原点在左上角. 创建Sprite对象实例 场景背景图片 "树"纹理图片 "树"纹理图片 下面我们看看app.js 中HelloWorldLayer中初始化代码如下: var HelloWorldLayer = cc.Layer

Cocos2d-js中使用纹理对象创建Sprite对象

本节我们会通过一个实例介绍纹理对象创建Sprite对象使用,这个实例如图5-2所示,其中地面上的草是放在背景(如下图所示)中的,场景中的两棵树是从后图所示的“树”纹理图片中截取出来的,图5-5所示是树的纹理坐标,注意它的坐标原点在左上角. 创建Sprite对象实例 场景背景图片 “树”纹理图片 “树”纹理图片 下面我们看看app.js 中HelloWorldLayer中初始化代码如下: [html] view plaincopy var HelloWorldLayer = cc.Layer.ex

继承已有对象创建新对象

当创建一个新对象时,可以选择某个对象作为它的原型,上代码: Object.create = function(o){ var F = function(){}; F.prototype = o; return new F(); } var objectA = {}; var objectB = Object.create(objectA);

c#创建Graphics对象的三种方法

方法一.利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用. 例如: //窗体的Paint事件的响应方法 复制代码代码如下: private void form1_Paint(object sender, PaintEventArgs e) { Graphics g

创建ajax对象

Ajax:  Asynchronous Javascript And XML 异步加载js和xml 客户端请求的地址交给ajax对象,ajax对象去服务器获取数据,ajax对象获取数据后再交给客户端,这样浏览器界面没有跳转所以用户体验比较好 AJAX的核心就是js的XmlHttpRequest对象 //创建ajax对象 <script type="text/javascript">    var request = new XMLHttpRequest();    cons

IntelliJ IDEA平台下JNI编程(五)—本地C代码创建Java对象及引用

本文学习如何在C代码中创建Java对象和对象数组,前面我们学习了C代码中访问Java对象的属性和方法,其实在创建对象时本质上也就是调用构造函数,因此本文知识学习起来也很轻松.有了前面学习数组创建的方法后,C代码创建对象数组同样很容易,下面开始学习吧~ 1. C代码创建Java对象 创建Java对象本质就是调用构造函数,这与上一篇文章中提到的调用方法使用方法一致.下面直接贴代码: package com.huachao.java; /** * Created by HuaChao on 2017/

JavaScript中创建字典对象(dictionary)实例

这篇文章主要介绍了JavaScript中创建字典对象(dictionary)实例,本文直接给出了实现的源码,并给出了使用示例,需要的朋友可以参考下 对于JavaScript来说,其自身的Array对象仅仅是个数组,无法提供通过关键字来获取保存的数据,jQuery源码中提供了一种非常好的方式来解决这个问题,先看一下源码: 复制代码代码如下: function createCache() { var keys = []; function cache(key, value) {  // Use (k

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的prototype属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法. 如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的prototype属性上。

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的prototype属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法. 如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的prototype属性上.当然,在某些情况下,我们需要将某些方法定义在构造函数中,这种情况一般是因为我们需要访问构造函数内部的私有变量.

创建jedis对象

1.先在taotao-parent的pom.xml中复制 以下内容到rest的pom.xml中 <!-- Redis客户端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency> 2.创建jedi