AndEngine Example(7):EntityModifierExample

温升试验详解 温升试验是电子设备可靠性验证的重要手段,用于评估器件在正常工作或极限条件下的热稳定性。试验通过测量器件表面或关键点温度与环境温度的差值(ΔT),判断是否存在过热风险。主要依据行业标准,采用热电偶、热像仪等设备测量稳态温度。热阻分析可建立温升与功耗的关系,指导器件选型、PCB热设计和散热结构优化。典型应用包括电源模块和LED电路测试。温升试验通过系统性热分析,能有效提升产品在高负载、高温环境下的可靠性和安全性,对现代小型化、高密度电子设备尤为重要。 阅读详情

目标:

1. 了解修饰符Modifier

2. 学习透明度变化(AlphaModifier)

3. 学习缩放变化(ScaleModifier)

4. 学习延时(DelayModifier)

5. 学习旋转(RotationModifier)

6. 学习顺序使用修饰符(SequenceEntityModifier)

7. 学习并行使用修饰符(ParallelEntityModifier)

8. 理解如何从一张图上获取多个纹理createTiledFromAsset

------------------------------------------------------------------------

注意,你需要更换图片资源,才能得到相应的效果。


package org.andengine.examples;

import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.IEntity;
import org.andengine.entity.modifier.AlphaModifier;
import org.andengine.entity.modifier.DelayModifier;
import org.andengine.entity.modifier.IEntityModifier.IEntityModifierListener;
import org.andengine.entity.modifier.LoopEntityModifier;
import org.andengine.entity.modifier.LoopEntityModifier.ILoopEntityModifierListener;
import org.andengine.entity.modifier.ParallelEntityModifier;
import org.andengine.entity.modifier.RotationByModifier;
import org.andengine.entity.modifier.RotationModifier;
import org.andengine.entity.modifier.ScaleModifier;
import org.andengine.entity.modifier.SequenceEntityModifier;
import org.andengine.entity.primitive.Rectangle;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.sprite.AnimatedSprite;
import org.andengine.entity.util.FPSLogger;
import org.andengine.opengl.texture.TextureOptions;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.region.TiledTextureRegion;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.modifier.IModifier;
import org.andengine.util.modifier.LoopModifier;

import android.opengl.GLES20;
import android.widget.Toast;

/**
 * (c) 2010 Nicolas Gramlich
 * (c) 2011 Zynga
 *
 * @author Nicolas Gramlich
 * @since 11:54:51 - 03.04.2010
 */
public class EntityModifierExample extends SimpleBaseGameActivity {
	// ===========================================================
	// Constants
	// ===========================================================

	private static final int CAMERA_WIDTH = 720;
	private static final int CAMERA_HEIGHT = 480;

	// ===========================================================
	// Fields
	// ===========================================================

	private BitmapTextureAtlas mBitmapTextureAtlas;
	private TiledTextureRegion mFaceTextureRegion;

	// ===========================================================
	// Constructors
	// ===========================================================

	// ===========================================================
	// Getter & Setter
	// ===========================================================

	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================

	@Override
	public EngineOptions onCreateEngineOptions() {
		final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

		return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
	}

	@Override
	public void onCreateResources() {
		BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");

		this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 64, 32, TextureOptions.BILINEAR);
		this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas, this, "face_box_tiled.png", 0, 0, 2, 1);
		this.mBitmapTextureAtlas.load();
	}

	@Override
	public Scene onCreateScene() {
		this.mEngine.registerUpdateHandler(new FPSLogger());

		final Scene scene = new Scene();
		scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));

		final float centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
		final float centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;

		final Rectangle rect = new Rectangle(centerX + 100, centerY, 32, 32, this.getVertexBufferObjectManager());
		rect.setColor(1, 0, 0);

		final AnimatedSprite face = new AnimatedSprite(centerX - 100, centerY, this.mFaceTextureRegion, this.getVertexBufferObjectManager());
		face.animate(100);
		face.setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);

		final LoopEntityModifier entityModifier =
			new LoopEntityModifier(
					new IEntityModifierListener() {
						@Override
						public void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) {
							EntityModifierExample.this.runOnUiThread(new Runnable() {
								@Override
								public void run() {
									Toast.makeText(EntityModifierExample.this, "Sequence started.", Toast.LENGTH_SHORT).show();
								}
							});
						}

						@Override
						public void onModifierFinished(final IModifier<IEntity> pEntityModifier, final IEntity pEntity) {
							EntityModifierExample.this.runOnUiThread(new Runnable() {
								@Override
								public void run() {
									Toast.makeText(EntityModifierExample.this, "Sequence finished.", Toast.LENGTH_SHORT).show();
								}
							});
						}
					},
					2,
					new ILoopEntityModifierListener() {
						@Override
						public void onLoopStarted(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) {
							EntityModifierExample.this.runOnUiThread(new Runnable() {
								@Override
								public void run() {
									Toast.makeText(EntityModifierExample.this, "Loop: '" + (pLoop + 1) + "' of '" + pLoopCount + "' started.", Toast.LENGTH_SHORT).show();
								}
							});
						}

						@Override
						public void onLoopFinished(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) {
							EntityModifierExample.this.runOnUiThread(new Runnable() {
								@Override
								public void run() {
									Toast.makeText(EntityModifierExample.this, "Loop: '" + (pLoop + 1) + "' of '" + pLoopCount + "' finished.", Toast.LENGTH_SHORT).show();
								}
							});
						}
					},
					new SequenceEntityModifier(
//							new RotationModifier(1, 0, 90),
							new AlphaModifier(2, 1, 0),
							new AlphaModifier(1, 0, 1),
							new ScaleModifier(2, 1, 0.5f),
							new DelayModifier(0.5f),
							new ParallelEntityModifier(
									new ScaleModifier(3, 0.5f, 5),
									new RotationByModifier(3, 90)
							),
							new ParallelEntityModifier(
									new ScaleModifier(3, 5, 1),
									new RotationModifier(3, 180, 0)
							)
					)
			);

		face.registerEntityModifier(entityModifier);
		rect.registerEntityModifier(entityModifier.deepCopy());

		scene.attachChild(face);
		scene.attachChild(rect);

		return scene;
	}

	// ===========================================================
	// Methods
	// ===========================================================

	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}


------------------------------------------------------------------------------------------

关于修饰符本身的例子过于复杂:

所以我们分为几步来理解它。

(一)单一的修饰符

修改:

face.registerEntityModifier(entityModifier);
rect.registerEntityModifier(entityModifier.deepCopy());
为

face.registerEntityModifier(new AlphaModifier(10, 1, 0));
rect.registerEntityModifier(new AlphaModifier(10, 0, 1));
然后运行,

发现矩形从无到有,而图片从有到无。这说明了这两个修饰符用于控制了透明度的变化。



(二)顺序执行修饰符

还原,然后修改

face.registerEntityModifier(entityModifier);

为

SequenceEntityModifier entityModifier1 = new SequenceEntityModifier(
		new ScaleModifier(2, 1, 0.5f),
		new DelayModifier(1.5f),
		new ScaleModifier(2,  0.5f, 2),
		new DelayModifier(1.5f),
		new ScaleModifier(2, 2, 0.5f)
);
face.registerEntityModifier(entityModifier1);
观察图片的变化,可以发现它是按照我们指定的顺序来进行缩放(ScaleModifier)的,并做了适量的停滞(DelayModifier)

使用顺序描述符,可以使得按照我们的需求来进行修饰符的排列。


(三) 并行修饰符

使用并行修饰符,可以使得过个动作同时进行,例如旋转的同时进行缩放,且透明度发生变化

修改上文中的entityModifier1为:

ParallelEntityModifier entityModifier1 = new ParallelEntityModifier(
		new ScaleModifier(5, 1, 4),
		new RotationModifier(5, 0, 180),
		new AlphaModifier(5, 1, 0)
);

观察图片的变化,发现多种效果得以同时作用,这便是并行修饰符(ParallelEntityModifier)的作用。


(四) 循坏修饰符

还原成最初的模样

使用LoopEntityModifier(IEntityModifierListener,int,ILoopEntityModifierListener,IEntityModifier)构造函数

可通过将第一个或者第三个参数设为null,发现其中的区别

para1:可监听整个修饰符修饰对象的开始和结束

para2:重复的次数

para3:每一轮开始和结束的回调

para4:实际的描述符


MIPI D-PHY IP 使用说明(一) 目录 前言 一、IP 特点 二、IP 可用性 三、IP 总览 四、IP 声明 五、IP 结构 六、IP 分流桥 模式 七、端口描述 1、PPI 接口信号 1、常规 PPI控制信号 2、发送模式 时钟通道 高速 PPI 信号 3、发送模式 时钟通道 逃逸模式PPI 信号 4、发送模式 数据通道 高速 PPI 信号 5、发送模式 数据通道 控制接口PPI 信号 6、发送模式 ... 阅读详情

相关推荐

即插即用!5分钟为你的SNN模型添加频谱注意力(DCT-SA模块实战)

本文介绍了如何为脉冲神经网络(SNN)快速集成即插即用的DCT-SA频谱注意力模块。该模块利用离散余弦变换(DCT)在频率域自适应加权特征,能有效提升模型对纹理、边缘的感知能力,并在CIFAR10-DVS等数据集上实现分类精度提升与脉冲发放率下降。文章以SpikingJelly框架和ResNet19为例,提供了详细的代码实现、集成步骤及参数调优实战指南。

kotlin6android的博客 609

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

1.位置:Modifier_example-->Modifier2.类名:Modifier(1).使用modifier可以做出一些精灵的特效,旋转,倾斜,透明,放大,缩小等等。常用的modifier如下,<1>.AlphaModifier透明度修改器<2>.ColorModifier颜色修改器<3>.Cubic...

weixin_33972649的博客 141

从零构建:ESP32S3无线DAP-Link调试器的硬件与软件协同设计

本文详细介绍了基于ESP32S3的无线DAP-Link调试器的硬件与软件协同设计,涵盖关键元器件选型、无线通信协议优化、双核任务处理及低功耗调试方案。通过ESP-NOW协议实现低延迟无线调试,结合USB协议栈与双核协同,为嵌入式开发提供高效灵活的调试解决方案。

gitlab7runner的博客 858

Android游戏框架AndEngine使用入门

Android游戏框架AndEngine使用入门

【Java究竟怎么玩?】 7万+

LangChain4j + Milvus 从0-1实现会话管理与RAG检索的AIChat超详细教程

本教程将介绍如何使用LangChain4j和Milvus向量数据库构建一个具备流式输出、会话管理、会话隔离和基于文档RAG检索能力的AI机器人。我们将使用阿里百炼模型作为LLM后端,并通过Docker部署Milvus向量数据库。创建Assistant接口,定义聊天服务:LangChain4j 中文文档 | LangChain4j 中文文档wiringMode :这个属性一般两种,一种是自动装配,我们这里选择手动配置。

2301_80014343的博客 1434

告别手动改Hex!用Vector HexView命令行5分钟搞定固件数据“乾坤大挪移”

本文详细介绍了如何利用Vector HexView命令行工具快速实现嵌入式固件数据的自动化迁移,告别手动修改Hex文件的繁琐流程。通过实战案例和脚本示例,展示了如何5分钟内完成数据地址范围的重新映射,提升嵌入式开发效率,特别适用于烧录文件的内存布局调整。

weixin_30635053的博客 711

AndEngine之DEMO学习(七)EntityModifierExample

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

xumingrencai 160

汇川伺服驱动器参数优化实战指南

本文详细介绍了汇川伺服驱动器参数优化的实战技巧,涵盖控制模式选择、电子齿轮比调整、刚性匹配与振动抑制等关键内容。通过实际案例和实用技巧,帮助工程师快速掌握伺服驱动器参数调校方法,提升设备运行精度和稳定性。特别针对高精度定位和高速响应场景提供了专业指导。

weixin_29070721的博客 734

Android实战——AndFix的使用与源码分析

前言热修复是今年比较流行的话题,想要进阶高级工程师是必备的知识,其实他也要有一定的Android实力才能读懂源码,涉及到类加载机制,dex加载等等,不过想要进阶高级的你,是不可不学的一门技术哦AndFix介绍AndFix是阿里开源的一个Android热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug,目前支持2.3-7.0,具体介绍可以查看github项目其实现步骤 集成AndFix 生

点击置顶文章查看博客目录(全站式导航) 1526

QEMU源码全解析 —— virtio(3)

QEMU源码全解析 —— virtio(3)

phmatthaus的专栏 1847

YOLOv8架构革命:通过EfficientViT融合实现精度-速度的帕累托突破

目标检测领域长期存在精度与速度的权衡难题。视觉Transformer(ViT)的引入解决了长距离依赖问题,但其巨大的计算复杂度制约了实时应用。最新研究表明,将轻量级ViT与YOLO架构融合,可在几乎不损失推理速度的前提下,将mAP提升3-8个百分点。这种架构改进方案已在工业检测、自动驾驶、安防监控等多个领域得到验证,在保持实时性的同时显著提升了复杂场景下的检测可靠性。通过模块化设计,可以灵活适配不同规模的YOLOv8模型,为实际应用提供精度-速度的帕累托最优解。

FJN110的博客 148

热更新 AndFixDemo

demo:https://github.com/AlanCheen/AndFixDemo 解释:http://blog.youkuaiyun.com/yaya_soft/article/details/50460102

qq_16097005的博客 239

让闲置 MacBook 当 OpenClaw 主机:合盖运行 + 后台常驻

摘要 本文详细介绍如何将闲置MacBook改造为OpenClaw服务器,实现合盖后持续运行。首先推荐Ubuntu 22.04 LTS作为操作系统,提供详细的安装步骤和分区建议。重点介绍三种禁用合盖休眠的方法:修改systemd-logind配置、使用pm-utils工具以及调整GRUB设置。随后指导如何安装Docker并部署OpenClaw服务,包括创建docker-compose.yml文件和配置环境变量。最后说明如何设置系统服务实现OpenClaw开机自启。通过以上配置,可使MacBook在合盖状态下7

一键难忘的博客 4655

AndFix的使用分析

前言 最近发现热修复比较火,很多文章也做了介绍。所以自己也简单的学习下。因为自己在实际项目中用到。所以为了防止忘记,写成博客做成笔记,同时也帮助一些没有接触过的小伙伴能快速使用与入门。废话少说。进入主题。 热修复的概念 上面是热修复。简单解释就是在线更新。比如我们已发布的应用突然产生了严重的BUG,按照旧方法,只能能下一次版本修复后重新发布。然后用户重新去下载。这样其实给用户的

gg199402的博客 403

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

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

Android 热更新AndFix的分析

1.AndFix 只能修复方法级别的bug 使用流程:添加依赖→封装工具类→生成差异包(.patch文件)→loadpatch方法更新 源码: 初始化源码:PatchManager→init(比较版本号,删除旧版本) 加载源码:addpatch→initPatchs()→addpatch()→loadpatch()→fix()→fixclass()→replaceMethod()→ad...

长歌的博客 343

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

AndEngine之DEMO学习(八)EntityModifierIrregularExample

这个例子真是已经没有什么好说的了,无非是继承于EntityModifier的一个实现而且,他的名字也说的很清楚,不规则的运动改变器。我们记住一些参数就完全能解决问题,比如X向、Y向的拉升,我就直接上代码加注释完事了,很轻松的例子: package org.andengine.examples; import org.andengine.engine.camera.Camera; imp...

xumingrencai 158

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

热修复系列——AndFix使用教程基础篇

一、前言      最近研究阿里的开源热修复框架AndFix,本文参考AndFix官方教程,给出我所使用详细小白demo教程,包括在构建测试demo过程中所遇到对问题也列出来。阿里github链接:https://github.com/alibaba/AndFix      限制:      1、支持的Android版本为2.3-7.0(即:Android API 9 ~ Android API ...

九天 5155

Android开发遇到的细节问题(一)

1 为什么按钮XML绑定的点击事件出错,或者无效? 例如: <Button xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_heigh

computer165的专栏 6057

Smail语法基本知识(一)

Smali 背景:  Smali,是指安卓系统里的 Java 虚拟机(Dalvik)所使用的一种.dex 格式文件的汇编器。  Baksmali 则是反汇编器。  其语法是一种宽松式的 Jasmin/dedexer语法,而且它实现了.dex 格式所有功能(注解,调试信息,线路信息等)。  Smali,Baksmali 分别是冰岛语中编译器,反编译器的叫法。 Smali 语法简

computer165的专栏 3274

微信SDK分享出现的各种问题

很多开发者在开发微信的时候 点击分享无反应 可能的问题: (1)没有使用对应的开发APP_ID 在开发的DEMO中,你需要使用微信的keystore来进行签名,这个签名,项目名,和APP_ID实际已经在微信开发平台注册了,不过微信提供给开发者使用。 所以,如果你要开发相应的程序,你需要在开放平台上进行注册。 (2)Demo 安卓4.2以上存在问题 仔细观察demo, 有的地方传入的图

computer165的专栏 1688

AndEngine Example(9):EaseFunctionExample

目标: 1. 了解什么是EaseFunction 2. 了解几种类型的EaseFunction ----------------------------------------------------------------- package org.andengine.examples; import org.andengine.engine.camera.Came

computer165的专栏 1463

Smail语法基本知识(二)

这篇文章介绍了一些常见的指令语法, 想要知道更全的指令语法,请见:http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html 移动 move vx,vy                      将vy的内容移动到vx中。 两个寄存器必须是最前面256个寄存器中之一。 move-object vx,vy          移动对

computer165的专栏 1327

Smail语法基本知识(三)

------------------------------------------------分割线------------------------------------------------------------------------------------- 虽然关于指令集现在还没有讲,但是可以先看一个例子,加深一下理解。 HelloWorldAppActivity.smail

computer165的专栏 1312

AndEngine Example(5):SpriteBatchExample

目标: 1. 了解SpriteBatch 2. 理解DynamicSpriteBatch 3. 两者(SpriteBatch , DynamicSpriteBatch)的区别 4. 绘制多个图形 package org.andengine.examples; import org.andengine.engine.camera.Camera; import org.an

computer165的专栏 1231

AndEngine Example(2):RectangleExample

目标: 1.场景截屏对象 ScreenCapture , 2.场景截屏回调接口IScreenCaptureCallback  3.场景截屏回调方法 onScreenCaptured / onScreenCaptureFailed 4.场景点击事件  package org.andengine.examples; import org.andengine.engine.camer

computer165的专栏 1195

AndEngine Example(8):PathModifierExample

目标: 1. 了解场景背景图片的设置RepeatingSpriteBackground 2.  掌握如何使用PathModifier控制精灵的移动 3. 了解如何使用路径Path得到PathModifier 4. Sprite的animate函数,用于选择当前帧的动画 ------------------------------------------------- p

computer165的专栏 1146
上一篇: AndEngine Example(6):MovingBallExample
下一篇: AndEngine Example(8):PathModifierExample
computer165
博客等级 码龄16年 7粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值