【v2.x OGE-example 第二章(第二节) 修改器的使用】

简单盘点游戏开发引擎 无论是2D游戏还是3D游戏,游戏引擎都充当着游戏骨架的角色,没有游戏引擎就无法做出一款真正的游戏,通过游戏引擎制作者可以把画面、剧情、关卡、操作等元素拼接在一起,成为一款完整的游戏,同时赋予制作者实现其设计理想的可能性。   游戏引擎的功能丰富程度、画面表现力与拓展性,对于游戏的最终品质有很大的影响,于是商业引擎便开始崭露头角,Unity3D、Cocos2d、UDK, libgdx、OGEngi 阅读详情


1. 位置:Modifier_example --> Modifier
2. 类名:Modifier

 

 

(1).使用modifier 可以做出一些精灵的特效,旋转,倾斜,透明,放大,缩小等等。常用的modifier如下,

<1>. AlphaModifier 透明度修改器

<2>. ColorModifier 颜色修改器

<3>. CubicBezierCurveMoveModifier 三次方贝塞尔曲线曲线修改器

<4>. DelayModifier 延迟修改器

<5>. FadeInModifier 淡入修改器

<6>. FadeOutModifier 淡出修改器

<7>. JumpModifier 跳跃修改器

<8>. MoveByModifier 移动修改器(当前位置开始)

<9>. MoveModifier 移动修改器(从某个点到另外一个点)

<10>. MoveXModifier 移动X修改器

<11>. MoveYModifier 移动Y修改器

<12>. PathModifier 路径修改器

<13>. QuadraticBezierCurveMoveModifier 二次贝塞尔曲线修改器

<14>. RotationAtModifier 旋转修改器(需传入旋转中心点)

<15>.RotationByModifier 旋转修改器(只需传入旋转到的目标角度)

<16>. RotationModifier旋转修改器(从某个角度到另外一个角度)

<17>. ScaleAtModifier缩放修改器(需传入缩放中心点)

<18>. ScaleModifier 缩放修改器(从缩放多少倍数到另外一个倍数)

<19>. SkewModifier 倾斜修改器

<20>. SkewXModifier 倾斜X修改器

<21>. SkewYModifier 倾斜Y修改器

 

<22>. LoopEntityModifier循环容器修改器(使某个动作修改器循环实行)

<23>. SequenceEntityModifier序列容器修改器(使某几个动作修改器依次实行)

<24>. ParallelEntityModifier并行实体容器修改器(使某几个动作修改器同时实行)

 

(2).以下是使用modifier的例子:

/**普通Modifier用法*/

private void setGeneralModifier() {

//画蓝色背景 填满屏幕

Rectangle rectangle = new Rectangle(0, 0, getWidth(), getHeight(), getVertexBufferObjectManager());

rectangle.setColor(0.09804f, 0.6274f, 0.8784f);

this.attachChild(rectangle);//加入场景

AnimatedSprite face_rect = new AnimatedSprite(gap*1, 150, Regions.FACE_RECTANGLE, getVertexBufferObjectManager());

this.attachChild(face_rect);

//2秒内 从0度转到360度

RotationModifier rotation_mod = new RotationModifier(2, 0, 360);

//注册一个Modifier(修改器)在face_rect中

face_rect.registerEntityModifier(rotation_mod);

}

 

/**安先后顺序执行Modifier用法*/

private void setSequenceEntityModifier(){

AnimatedSprite face_rect = new AnimatedSprite(gap*2, 150, Regions.FACE_RECTANGLE, getVertexBufferObjectManager());

this.attachChild(face_rect);

//2秒内 从0度转到360度

RotationModifier rotation_mod = new RotationModifier(2, 0, 360);

//1秒内 从1倍放大到2倍

ScaleModifier scale_mod = new ScaleModifier(1, 1, 2);

//定制两个Modifier按先后顺序执行

SequenceEntityModifier sequence_mod = new SequenceEntityModifier(rotation_mod, scale_mod);

//注册一个Modifier(修改器)在face_rect中

face_rect.registerEntityModifier(sequence_mod);

}

 

/**循环执行的Modifier*/

private void setLoopEntityModifier(){

AnimatedSprite face_rect = new AnimatedSprite(gap*3, 150, Regions.FACE_RECTANGLE, getVertexBufferObjectManager());

this.attachChild(face_rect);

//2秒内 从0度转到360度

RotationModifier rotation_mod = new RotationModifier(2, 0, 360);

//1秒内 从1倍放大到2倍

ScaleModifier scale_mod = new ScaleModifier(1, 1, 2);

//延时0.5s

DelayModifier delay_mod = new DelayModifier(0.5f);

//Modifier按先后顺序执行

SequenceEntityModifier sequence_mod = new SequenceEntityModifier(rotation_mod, delay_mod, scale_mod);

//Modifier 循环执行

LoopEntityModifier loop_mod = new LoopEntityModifier(sequence_mod);

//注册一个Modifier(修改器)在face_rect中

face_rect.registerEntityModifier(loop_mod);

}

/**Modifier 加入监听器*/

private void setModifierListener(){

AnimatedSprite face_rect = new AnimatedSprite(gap*4, 150, Regions.FACE_RECTANGLE, getVertexBufferObjectManager());

this.attachChild(face_rect);

//2秒内 从0度转到360度

RotationModifier rotation_mod = new RotationModifier(2, 0, 360);

//IEntityModifierListener Modifier监听器,监听开始、结束

LoopEntityModifier loop_mod = new LoopEntityModifier(rotation_mod, 5, new IEntityModifierListener() {

@Override

public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {

//pItem = which will be register

System.out.println("onModifierStarted");

pItem.setVisible(true);

}

@Override

public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {

//pItem = which will be register

System.out.println("onModifierFinished");

pItem.setVisible(false);

}

});

//注册一个Modifier(修改器)在face_rect中

face_rect.registerEntityModifier(loop_mod);

}

/**一个并行Modifier*/

private void setParallelEntityModifier(){

AnimatedSprite face_ball = new AnimatedSprite(gap*1, 300, Regions.FACE_BALL, getVertexBufferObjectManager());

//1秒内 从0度转到360度

RotationModifier rotation_mod = new RotationModifier(1, 0, 360);

//1秒内 从1倍放大到2倍

ScaleModifier scale_mod = new ScaleModifier(1, 1, 2);

//1秒内 透明度从1到0

AlphaModifier alpha_mod = new AlphaModifier(1, 1, 0);

       //并行 Modifier

ParallelEntityModifier parallel_mod = new ParallelEntityModifier(rotation_mod,scale_mod,alpha_mod);

       // 循环  Modifier

LoopEntityModifier loop_mod = new LoopEntityModifier(parallel_mod);

//注册 Modifier

face_ball.registerEntityModifier(loop_mod);

//加入场景

this.attachChild(face_ball);

}

private void irregular_EntityModifiers(){

final AnimatedSprite face1 = new AnimatedSprite(gap*2, 300, Regions.FACE_BALL, this.getVertexBufferObjectManager());

face1.setRotationCenter(0, 0);//设置左上角为旋转中心点

face1.setScaleCenter(0, 0);//设置左上角为放大中心点

face1.animate(100);

 

final AnimatedSprite face2 = new AnimatedSprite(gap*3, 300, Regions.FACE_RECTANGLE, this.getVertexBufferObjectManager());

face2.animate(100);

 

final SequenceEntityModifier entityModifier = new SequenceEntityModifier(

new IEntityModifierListener() {

@Override

public void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) {

System.out.println("Sequence started.");

}

 

@Override

public void onModifierFinished(final IModifier<IEntity> pEntityModifier, final IEntity pEntity) {

System.out.println("Sequence finished.");

}

},

//第一步:2秒  X从1.0缩小到0.75,Y从1.0放大到2.0

new ScaleModifier(2, 1.0f, 0.75f, 1.0f, 2.0f),

//第二步:2秒  X从0.75放大到2.0,Y从2.0缩小到1.25

new ScaleModifier(2, 0.75f, 2.0f, 2.0f, 1.25f),

//第三步:放大并旋转

new ParallelEntityModifier(

new ScaleModifier(3, 2.0f, 5.0f, 1.25f, 5.0f),//3秒  X从2.0放大到5.0,Y从1.25放大到5.0

new RotationByModifier(3, 180)//3秒 旋转到180度

),

//第四步:缩小并旋转

new ParallelEntityModifier(

new ScaleModifier(3, 5, 1),//3秒 从5缩小到1

new RotationModifier(3, 180, 0)//3秒 旋转从180到0

)

);

 

//注册 entityModifier 到face1 

face1.registerEntityModifier(entityModifier);

//拷贝出一个 entityModifier 注册到face2

face2.registerEntityModifier(entityModifier.deepCopy());

 

this.attachChild(face1);//加入场景

this.attachChild(face2);//加入场景

 

/* Create some not-modified sprites, that act as fixed references to the modified ones. */

/* 加入两个没有做任何动作的精灵作为参考 */

final AnimatedSprite face1Reference = new AnimatedSprite(face1.getX(), face1.getY(), face1.getTiledTextureRegion(), this.getVertexBufferObjectManager());

final AnimatedSprite face2Reference = new AnimatedSprite(face2.getX(), face2.getY(), face2.getTiledTextureRegion(), this.getVertexBufferObjectManager());

 

this.attachChild(face1Reference);

this.attachChild(face2Reference);

}

 

 

OGE_Example项目源码

 

【v2.x OGE教程 16】 Modifier使用相关 OGE引擎的修改器功能很强大,为我们提供了丰富的修改器的实现类,可以修改实体的属性,提供了移动、旋转、缩放、透明、自定义序列、同步、循环等功能,而且改变的效果可以当场生效,也可以在某一个时间段内生效并且可以提供一些缓动函数达到更加丰富的效果。   一、Modifier创建 使用实例: IEntity ball=new Sprite(0,0,ballRegion,this.g 阅读详情

相关推荐

【v2.x OGE教程 12】 关卡编辑器帮助文档

【v2.x OGE教程 12】 关卡编辑器帮助文档 一、简介 关卡编辑器用于游戏关卡界面元素的可视化编辑,包括元素的位置、尺寸以及其它自定义属性。通过解析生成的数据文件即可获取关卡信息,并能随时调整,以减少开发工作量,提高开发效率。 二、界面 主界面 图01_主界面           1) 画布 ① 简介 画布用于关卡元素的预览,并提供元素选择和坐标设置等功能

OrangeGame的专栏 2701

AndEngine之DEMO学习(七)EntityModifierExample

接着上篇的内容,这个上个例子说的是使用IUpdateHandler进行业务更新,这回的例子是一EntityModifier的方式对业务进行更新。Modifier我们可以分成两种不同类型,一种可以叫做延时类Modifier,主要处理在一定时间段内的实体变化;一直可以叫做容器类Modifier,主要用来组合多个延时类Modifier,并按次序执行他们。容器类Modifier只有实现了三个子类,分...

xumingrencai 160

【v2.x OGE教程 11】 动画编辑器帮助文档

【v2.x OGE教程 11】 动画编辑器帮助文档 版本 日期 作者 说明 1.0 2014-9-3 橙子游戏 文档创建       一、简介 动画编辑器用于游戏动画的可视化编辑,支持序列帧动画和关键帧动画。通过解析生成的数据文件即可获取动画信

OrangeGame的专栏 2425

基于Netty的代理工具Proxy

前言 个人扯淡博客:http://blog.ztgreat.cn Netty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持,对于目前而言,只要互联网存在,那么网络IO 也将存在,就目前的形式而言,硬件越来越好,带宽也越来越大,这个时候IO的瓶颈就凸显了出来,个人觉得,掌握一门IO框架是很重要的,不能仅仅的学会做点应用层,对于中下层还是需要熟悉的,这样才能健全整个...

小张的专栏 9305

AutoProxy修改版

AutoProxy修改版,解决火狐自带的AutoProxy不能添加规则的问题

RV1126上YOLOv8部署实战:从模型转换到板端推理的完整避坑指南

本文提供了在瑞芯微RV1126芯片上部署YOLOv8目标识别算法的完整实战指南。内容涵盖从模型转换、环境搭建到板端推理代码编写的全流程,重点解析了RKNN-Toolkit使用、量化配置、内存优化及后处理实现等关键环节的常见问题与解决方案,旨在帮助开发者高效避坑,实现边缘AI应用的稳定落地。

pz89012345的博客 568

动态代理(Dynamic Proxy)

[size=large]代码例子:[/size] [code="java"] package com.test; /** * 一个真实的接口 * @author yale * */ public interface ISubject { public void request(); } [/code] [code="java"] package com.tes...

只想靠两手,向理想挥手 155

WRF所需气象数据的下载方法

#数据下载是个大问题,巧妇难为无米之炊,没有数据就无法模拟啦,疫情期间国外服务器响应慢,打开网页慢都很正常啦~ WRF数据所需要的外部数据分为两种:静态地理数据,grib格式的气象数据(NAM、GFS、RUC、AGRMET等)。静态地理数据可以从WRF官网获得,比较简单,这里不做介绍。所以这篇日志重点介绍的是气象数据的获取。 提前说明,WRF官网不提供气象数据,但WRF官网提供各类气象数据的下载网址链接,所以我们下载一般还是从WRF官网开始。首先进入WRF官网,然后点击WRF ARW Uusres’ .

六出的博客 1万+

破解的一款抓包工具,debug proxy,教你怎么修改so

2019年03月17日10:33:17 更新一下 目前这个app在谷歌商店下不到了,并且原来能抓的数据,现在也抓不到了,比如我们公司开发的app,没有做防护,可能跟证书有关。 1.这个软件可以在google play里搜到,很不错,用来抓取手机里app的网络请求,可以模拟弱网络,抓取部分http等,是一个很好用的网络调试工具。下载地址:https://pan.baidu.com/s/1i5...

u010232308的博客 7562

Python实战:解析腾讯视频M3U8加密链接并下载高清影片

本文详细介绍了如何使用Python解析腾讯视频M3U8加密链接并下载高清影片。从环境准备、抓包分析到核心代码实现,逐步讲解如何获取M3U8主链接、解析TS分片列表以及下载合并视频片段。文章还提供了多线程下载、断点续传和加密视频处理等优化方案,帮助开发者高效完成视频下载任务。

weixin_30836759的博客 525

AI医疗影像诊断工具2025 完整教程

本教程所述工具均为辅助诊断设备,不可替代执业医师判断。部署使用需遵守当地医疗器械管理法规。推荐开源框架组合:代码太多打包上传网盘了 自行下载。2025年的AI医疗影像诊断工具将以。

m0_60084632的博客 2029

橙子引擎CEO尚韬:Home Internet开启,TV游戏迎来革命

2014智能电视游戏品牌峰会于12月26日在深圳科技园顺利举行。这次会议是智能电视游戏行业发展的行业盛会,对于智能电视游戏未来方向有着导向作用。本次会议橙子引擎联合了众多明星游戏开发商,携多款全新交互精品TV游戏现场演示,上演最强TV游戏产品路演秀!本次会议汇聚了大部分游戏渠道、游戏开发商、以及投资机构参与,精彩的游戏演示得到了在座的观众一致好评和期待。橙子引擎CEO尚韬,在峰会上做了主题为“Ho

OrangeGame的专栏 2168

InsightFace(RetinaFace + ArcFace)人脸识别实战:从模型部署到Web服务构建

本文详细介绍了如何利用InsightFace框架,结合其集成的RetinaFace人脸检测与ArcFace人脸识别预训练模型,从零开始构建一个高性能的Web人脸识别服务。内容涵盖环境搭建、模型部署、核心代码解析(包括五点仿射对齐关键步骤)、FAISS向量检索集成以及基于FastAPI的Web服务开发,并提供了实战优化与常见问题排查指南,帮助开发者快速实现工业级应用。

weixin_29054245的博客 225

OGEngine教程:字体工具使用

1.打开 BitmapFont tool,在红框中输入你要显示的字。 2.写完后保存字体文件 保存后可以得到一个.fnt  和  一个.png 文件 3.使用 TexturePacker 工具将bitmapFont.png转换pvr格式通过Add Sprites把 bitmapFont.png导入,填写好相关文件保存位置和名字。 注意下面红框部分的参数设置,跟下面的截图

OrangeGame的专栏 1945

Zipformer在RK3588上的性能实测:比Conformer快多少?内存省多少?

本文在RK3588平台上对Zipformer和Conformer语音识别模型进行了全面的性能实测。结果显示,Zipformer在模型部署中展现出显著优势:推理速度比Conformer快约56%,峰值内存占用降低约60%,同时在AISHELL-1等测试集上保持了相当的识别准确率。这为边缘ASR应用提供了更高效、更节省资源的解决方案。

metal的博客 482

福建公共资源交易平台 portal-sign与响应Data解密逆向实录

本文分析了福建公共资源交易电子公共服务平台的接口加密机制。通过抓包和代码分析,发现请求头中的portal-sign由MD5算法生成,包含固定秘钥和排序后的参数拼接。响应数据采用AES-256-CBC加密,需使用特定Key和IV解密。文章详细介绍了签名生成规则、参数处理流程及加密常量定位方法,为接口对接提供了技术参考。整个过程展示了如何通过逆向工程还原前端加密逻辑,最终实现脱离浏览器环境的纯协议调用。

自成背后的博客 1157

橙子引擎携多款精品TV游戏诚意呈献 2014智能电视游戏品牌峰会

橙子引擎携多款精品TV游戏诚意呈献 2014智能电视游戏品牌峰会   活动时间:2014.12.26  14:00—17:00 活动地点:深圳南山科技园科兴科学园会议中心8号厅 主办单位:橙子引擎 协办单位:网势网络、浩动游戏   活动介绍: 智能电视游戏行业前景光明,但是也存在一些问题:游戏内容不够吸引人,大型游戏画面感粗糙,玩家无法更好的体验游戏带给他们的乐趣。 智能电视

OrangeGame的专栏 1938

假新闻检测论文分享(25)L-DefenseExplainable Fake News Detection With Large Language Model

现有的假新闻检测工作主要集中在通过深度网络结合多种信息来学习假新闻的潜在特征,如可信度、立场、传播模式、额外知识、域外数据等。尽管他们在探测上取得了成功,但受限于他们的黑箱性质,他们无法提供任何对公众至关重要的理由。为解决这一问题,一些研究致力于可解释假新闻检测(EFND),旨在同时生成准确性预测和解释。许多工作通过注意力机制在相关报道中注意突出特别的单词、短语或句子来提供可解释性。然而,这些工作只发现了对最终预测有高贡献的区域,缺乏直观和可信的解释。

weixin_41964296的博客 730

橙子引擎CEO尚韬:蓝海破冰,重新定义TV游戏

橙子引擎CEO尚韬:蓝海破冰,重新定义TV游戏   2014智能电视游戏峰会于11月29日在深圳南山科技园召开。这次是智能电视游戏未来发展的行业盛会,是加速智能电视游戏发展的蓝海破冰之旅。本次会议业内巨头云集,精英汇聚,从引擎技术到电视游戏分发,共探讨电视游戏的发展。橙子引擎CEO尚韬,在峰会上做了主题为“蓝海破冰,橙子引擎重新定义TV游戏”的主题演讲。 黑暗中摸索前进的智能电视 据数

OrangeGame的专栏 1932

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

智能电视游戏品牌峰会顺利召开,多款精品TV游戏发布

12.26,在大家还沉浸在欢乐的圣诞氛围中时,智能电视游戏行业内颇具影响力的会议已经在深圳召开。由橙子引擎(OGEngine)主办的《2014智能电视游戏品牌峰会——精品TV游戏产品发布会》在深圳南山科技园顺利举办,本次会议汇聚了众多明星游戏CP和游戏渠道等业内巨头,更是得到了业内众多媒体的支持。        纵观整个智能电视游戏行业的发展趋势,我们不难发现其中的各种机遇,积极的发展趋势和

OrangeGame的专栏 1742

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【v2.x OGE教程 14】 控件使用

下面介绍精灵、动画精灵、按钮精灵、文本的常用使用方法   一、精灵相关   1.添加精灵 //创建精灵 Sprite bar_up = new Sprite(400, 0, RegionRes.getRegion(Res.BAR_UP),    getVertexBufferObjectManager()); //将精灵添加至BaseEntityGroup或其子类(如:Scene、L

OrangeGame的专栏 1618

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OGEngine教程: 图片资源加载及工具使用

下面给大家讲下关于图片资源从下载到使用的一个流程 说明 TexturePacker这个词从字面来说就是Texture(纹理) + Packer(打包)。将材质打包成大图,将小图通过算法合并成大图,减少了io的读取,同时占用了更少的内存空间。并且代码里也更容易管理这些材质。 下载 官网:http://www.codeandweb.com/texturepacker 使用 安装完毕,现在我

OrangeGame的专栏 1512

Android安卓游戏引擎大搜罗

1.AndEngine 简介: AndEngine基于libGDX框架开发,使用OpenGL ES进行图形绘制。同时继承了BOX2D物理引擎,因此能实现一些较为复杂的物理效果。在Rokon停止更新以后,AndEngine 成为Android 最为流行的2D游戏引擎 优点: (1)高效:在大运算量好事情况下,使用C/C++本地代码进行开发。比如物理引擎或者音频处理。 (2)AndEngin

OrangeGame的专栏 1432
上一篇: 【v2.x OGE-example 第二章(第一节) 精灵的移动】
下一篇: 2014智能电视游戏峰会顺利召开,开启行业破冰序幕
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值