【cocos2d-x】图片平铺和Scale9Sprite

今天介绍cocos2dx如何使用平铺和Scale9Sprite

平铺主要用到了openGL的知识,示例代码如下:

Texture2D *texture = Director::getInstance() -> getTextureCache() -> addImage("Santa.png");
Texture2D::TexParams tp = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
texture -> setTexParameters(tp);
auto sprite = Sprite::createWithTexture(texture, Rect(0 , 0, visibleSize.width, visibleSize.height));
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(sprite, 0);

原图片:

实现效果:

注意:

  1. TexParams是纹理参数,可以通过它实现纹理变换,前两个参数是纹理过滤规则,后两个参数是纹理环绕模式。

    常见的几种:

    * 过滤规则
        * GL_LINEAR:使用邻近像素点来插值补点
        * GL_NEAREST:最邻近点过滤
    * 环绕模式
        * GL_REPEAT:重复纹理
        * GL_CLAMP:边缘像素复制
    
  2. 注意纹理的长宽必须是2的n次方,否则会报错

Scale9Sprite有人叫9宫格,有人叫9妹,不过叫什么都无所谓,用法是一样的。

Scale9Sprite可以用来拉伸图片,但是不失真。实现原理就是把图片分成九块,四个角的区域都保持不变,上下左右四条边只做一个方向的拉伸,中间区域放大,示例如下:

原图片:

使用setScale放大:

使用Scale9Sprite:

分割图片:

用法:

cocos2d-x 3.x以后废弃了Extension::Scale9Sprite,现在统一使用ui::Scale9Sprite,使用它首先要引入头文件和名称空间

#include "cocos-ext.h"
USING_NS_CC_EXT;

示例代码:

//第一个Rect是指定Scale9Sprite的区域,第二个是指定中间用于拉伸的区域
ui::Scale9Sprite *scale9Sprite = ui::Scale9Sprite::create("sample.png", Rect(0, 0, 142, 80), Rect(10,10, 122, 60));
//目标大小
scale9Sprite -> setPreferredSize(visibleSize);
scale9Sprite -> setPosition(visibleSize * 0.5f);
this -> addChild(scale9Sprite);
欢迎访问我的博客:helkyle.tk
时间: 2024-10-14 20:56:10

【cocos2d-x】图片平铺和Scale9Sprite的相关文章

Android: 背景图片平铺要这么干

<?xml version="1.0" encoding="utf-8"?>  <bitmap xmlns:android="http://schemas.android.com/apk/res/android"    android:src="@drawable/bg_header"      android:tileMode="repeat" >  </bitmap>

Canvas 图片平铺设置

/** * 图片平铺 */ function initDemo7(){ var canvas = document.getElementById("demo7"); if (!canvas) return; var context = canvas.getContext("2d"); var type = [ "no-repeat", // 不平铺 "repeat-x", // 横向平铺 "repeat-y"

Android 背景图片平铺

在drawable目录下创建一个repeat_bg.xml: <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android"     android:src="@drawable/asdfg"     android:tileMode="repeat&q

css 背景图片平铺

css 背景图片平铺 background:url(../Images/VinnoImages/rightpanel.jpg);filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale')";-moz-background-size:100% 100%;background-size:100% 100%;

Duilib技巧:背景图片平铺

贴图的描述 方式有两种    // 1.aaa.jpg    // 2.file='aaa.jpg' res='' restype='0' dest='0,0,0,0' source='0,0,0,0' corner='0,0,0,0'     // mask='#FF0000' fade='255' hole='false' xtiled='false' ytiled='false' 第一种是最简单的,加载图片文件并将整张图片拉伸铺满整个控件 第二种既支持从文件中加载图片,也可以从资源中加载1

[ html drawImage createPattern ] canvas绘制图片 drawImage 属性图片平铺方式实例演示

<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta name='description' content='this is my page'> <meta name='keywords' content='keyword1,keyword2,keyword3'> <meta http-equiv="

Android中设定背景图片平铺。

注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 在做Android开发时,我们常常需要为程序设定一个背景,但由于现在的Android设备尺寸不一,如果随便设置一个图片为背景,那么很可能在不同的设备上会被拉伸,给用户的视觉体验会很差,那么如何解决这个问题呢,这里本菜鸟在此分享一下心得. 一.首先,需要在drawable-mdpi目录里定义一个xml文件,在此我命名为bitmap 编写如下代码,src中指定为你要平铺图片的名称: <?xml version="1.0&quo

[ATL/WTL]_[CBitmap复制图片-截取图片-平铺图片]

场景: 1.当你需要截取图片部分区域作为某个控件的背景. 2.需要平铺图片到一个大区域让他自动放大时. 3.或者需要合并图片时. 代码: CDC sdc; CDC ddc; sdc.CreateCompatibleDC(NULL); ddc.CreateCompatibleDC(NULL); CBitmap destBmp; destBmp.CreateCompatibleBitmap(CClientDC(NULL),width,height); sdc.SelectBitmap(m_Bitma

[ATL/WTL]_[0基础]_[CBitmap复制图片-截取图片-平铺图片]

场景: 1.当你须要截取图片部分区域作为某个控件的背景. 2.须要平铺图片到一个大区域让他自己主动放大时. 3.或者须要合并图片时. 代码: CDC sdc; CDC ddc; sdc.CreateCompatibleDC(NULL); ddc.CreateCompatibleDC(NULL); CBitmap destBmp; destBmp.CreateCompatibleBitmap(CClientDC(NULL),width,height); sdc.SelectBitmap(m_Bit