【v2.x OGE-example 第一节】 绘制实体

从零自制安卓自律APP:一套可落地的熬夜管控完整方案 移动应用开发中,针对用户行为进行时间管控已成为工具类APP的重要方向。其核心原理通过UsageStatsManager与前台服务实现应用使用监测与后台保活,搭配SYSTEM_ALERT_WINDOW权限构建系统级拦截界面。这类技术不仅可应用于数字健康管理,还能帮助用户解决深夜刷手机导致的作息失控问题。文章从需求分析、功能设计到技术选型、开发排期,系统拆解一款安卓自律APP的立项过程,重点分享睡前锁、临时解锁、使用统计与睡眠账单等模块的落地思路,并针对权限合规、防卸载策略、闹钟冲突等常见坑点给出工程实践建议。 阅读详情


前言:

    OGE即 OGEngine,是由橙子游戏开发的基于Java支持跨平台的开源游戏引,从12年4月项目成立至今已经有2年多的发展历程。在此期间基于OGEngine开发的项目已经有很多成功投放市场。从正式开源开始,好多开发者开始加入OGEngine的行列,同时在官网、论坛、Q群、看到有好多的问题,大部分是一些新手的问题,经常会被重复的提问。有些是之前用过AndEngine的,对OGEngine的使用会有些出入,开发时不是很顺手。为此今天开始写一个OGE-Example;大家在学习OGEengine时可参考这些例子,应该会更容易上手些。

 

正文:

     首先,先讲解一下这个OGE-example的思路框架,这些案例都会放到一个项目里,用list显示,会分两级菜单,从最简单开始,后续会随着引擎的发展在加入一些例子,也都会放在这个项目里边,方便大家学习和使用。

一、导入OGE-example注意事项:

1.先学习想要运行平台下的环境搭建android搭建:http://dev.ogengine.com/forum.php?mod=viewthread&tid=629&extra=page%3D1,或ios搭建:http://dev.ogengine.com/forum.php?mod=viewthread&tid=631&extra=page%3D1;

2.OGE-example项目现支持两个平台运行(android和ios),这些案例会用到一些图片和字

体,需要把这些资源加载到对应的启动器里边(android和ios启动器);

放在Android启动器下:

放在IOS启动器下:

 

OGE-example 项目结构:

 

第一章

第一节:实体的绘制

1. 位置:Drawing_example --> DrawingSprite
2. 类名:DrawingSprite

 

(1)绘制线条:

 线条Line:Line(float pX1, float pY1, float pX2, float pY2, float pLineWidth, VertexBufferObjectManager pVertexBufferObjectManager)

pX1,pY1线条起点位置

pX2,pY1线条终点位置

pLineWidth:线条宽度

setColor(float pRed, float pGreen, float pBlue)线条颜色 

pRed红色

pGreen绿色

pBlue蓝色

颜色值最小是0最大是1,平时输入具体的颜色值可以这样输入 setColor(204/255,4/255,201/255)

VertexBufferObjectManager顶点缓存对象管理

 

/**

 * 画出100条直线,位置、颜色随机

 */

private void drawingLine() {

final long RANDOM_SEED = 1234567890;//随机数种子

final Random random = new Random(RANDOM_SEED);

for (int i = 0; i < 100; i++) {

final float x1 = random.nextFloat() * 300;//线x起点 随机0-300

final float x2 = random.nextFloat() * 300;//线x终点 随机0-300

final float y1 = random.nextFloat() * 480;//线y起点 随机0-480

final float y2 = random.nextFloat() * 480;//线y终点 随机0-480

final float lineWidth = random.nextFloat() * 5;//线的宽度 随机0-5

 

final Line line = new Line(x1, y1, x2, y2, lineWidth,

getVertexBufferObjectManager());//画线

 

line.setColor(random.nextFloat(), random.nextFloat(),

random.nextFloat());//设置颜色值 范围0-1

 

this.attachChild(line);//加入本场景 实体只有加入场景后才会被绘制和更新状态

}

}
(2).绘制矩形

矩形:Rectangle(float pX, float pY, float pWidth, float pHeight, VertexBufferObjectManager pVertexBufferObjectManager)

   pX, pY 矩形位置

  pWidth,pHeight 矩形宽高

VertexBufferObjectManager 顶点缓存对象管理

 

/**

 * 画出4个矩形

 */

private void drawingRectangle() {

// 红色矩形

Rectangle rectangle0 = new Rectangle(300, 120, 100, 100,

getVertexBufferObjectManager());//绘制矩形,位置x300,位置y120,宽100,高100

rectangle0.setColor(1, 0, 0);//设置为红色 红Red:1 即255/255

this.attachChild(rectangle0);//加入本场景 实体只有加入场景后才会被绘制和更新状态

// 绿色矩形

Rectangle rectangle1 = new Rectangle(400, 120, 100, 100,

getVertexBufferObjectManager());//绘制矩形,位置x400,位置y120,宽100,高100

rectangle1.setColor(0, 1, 0);//设置为绿色 绿Green:1

this.attachChild(rectangle1);//加入本场景 实体只有加入场景后才会被绘制和更新状态

// 蓝色矩形

Rectangle rectangle2 = new Rectangle(300, 220, 100, 100,

getVertexBufferObjectManager());//绘制矩形,位置x300,位置y220,宽100,高100

rectangle2.setColor(0, 0, 1);//设置为蓝色 蓝Blue:1

this.attachChild(rectangle2);//加入本场景 实体只有加入场景后才会被绘制和更新状态

// 黄色矩形

Rectangle rectangle3 = new Rectangle(400, 220, 100, 100,

getVertexBufferObjectManager());//绘制矩形,位置x400,位置y220,宽100,高100

rectangle3.setColor(1, 1, 0);//设置为红色 红Red:1,绿色 绿Green:1 相加后为黄色

this.attachChild(rectangle3);//加入本场景 实体只有加入场景后才会被绘制和更新状态

}

(3).画图片精灵

图片精灵AnimatedSprite(float pX, float pY, String pTextureRegionName, VertexBufferObjectManager pVertexBufferObjectManager)

pX,  pY,精灵位置

pTextureRegionName 图片名称

/**

 * 画图片精灵

 */

private void drawingPic() {

// 画一个精灵

AnimatedSprite pea = new AnimatedSprite(600, 30, Regions.PEA,

getVertexBufferObjectManager());//绘制一个图片精灵 位置x 600 ,位置y 30, 图片名称引用Regions.PEA

this.attachChild(pea);//加入本场景 实体只有加入场景后才会被绘制和更新状态

 

}

 

(4).画动画精灵

动画画精灵AnimatedSprite(float pX, float pY, String pTextureRegionName, VertexBufferObjectManager pVertexBufferObjectManager)

pX,  pY,精灵位置

pTextureRegionName 图片名称

animate(long pFrameDurationEach)动画精灵的帧速

 

/**

 * 画飞机精灵

 */

private void drawingPlane() {

// 画一个动画精灵 

AnimatedSprite plane = new AnimatedSprite(610, 140, Regions.PLANE,

getVertexBufferObjectManager());//绘制动画精灵, 位置x 610 ,位置y 140, 图片名称引用Regions.PLANE

this.attachChild(plane);//加入本场景 实体只有加入场景后才会被绘制和更新状态

// 播放帧速 , 每帧的持续时间 , 以毫秒为单位计算

plane.animate(180);

plane.setIgnoreTouch(false);//设置阻止触摸为false

}

(6). 删除精灵

Entity:attachChild(IEntity pEntity);attachChild加入一个实体

detachChild(IEntity pEntity);detachChild删除一个实体

 

/**

 * 精灵删除

 */

private void removingSprite() {

ButtonSprite btnSprite = new ButtonSprite(610, 200, Regions.BACK_BTN,

getVertexBufferObjectManager());//绘制一个按钮精灵 位置x 610 ,位置y 200, 图片名称引用Regions.BACK_BTN

this.attachChild(btnSprite);//加入本场景 实体只有加入场景后才会被绘制和更新状态

btnSprite.setOnClickListener(new OnClickListener() {//注册按键监听

@Override

public void onClick(ButtonSprite pButtonSprite,//响应点击

float pTouchAreaLocalX, float pTouchAreaLocalY) {

System.out.println("detach btnSprite");

DrawingSprite.this.detachChild(pButtonSprite);//删除实体 实体删除后不在绘制和更新状态

}

});

 

}

 

}

 

OGE_Example项目源码

 

 

 

 

PageAdmin企业级CMS网站管理系统4.0.08 .NET平台高效建站解决方案 请输入引用内容... 阅读详情

相关推荐

别再硬啃C代码了!用Simulink的Matlab Function模块手把手教你搭建CRC8校验模型(附完整M脚本)

本文详细介绍了如何利用Simulink的Matlab Function模块轻松实现CRC8校验模型,替代传统的C代码编写。通过可视化建模和即时验证,开发者可以高效完成算法设计,并自动生成嵌入式代码。文章包含完整的M脚本示例和工程实践技巧,特别适合嵌入式系统开发人员提升工作效率。

weixin_42520661的博客 183

OpenStack-queens版搭建

OpenStack-queens版搭建 版权声明: 本文为博主学习整理原创文章,如有不正之处请多多指教。 未经博主允许不得转载。 https://mp.csdn.net/postedit/82836081 参考:http://blog.51cto.com/liuleis/2094190   1、改主机名称(两个节点) 10.32.24.244  控制节点 10.32.24.251 ...

qq_42595261的博客 2337

引入 CloudWeGo 后飞书管理后台平台化改造的演进史

飞书管理后台是飞书套件专为企业管理员提供的信息管理平台,它通过引入 Kitex 泛化调用对飞书管理后台进行平台化改造,成为了企业统一数字化管理平台。本文将从三个方面为大家讲解 Kitex 泛化调用在飞书管理后台平台化改造过程中的落地实践。...

weixin_44186218的博客 1762

全方位安全守护:探索谷歌Chronicle旗下VirusTotal的免费在线检测服务

通过这些多家安全厂商的合作,VirusTotal提供了强大的多引擎扫描能力,能够更全面和准确地检测和分析潜在的安全威胁,帮助用户防范各类网络攻击。这个工具利用Google Cloud的Sec-PaLM大语言模型(LLM)进行代码分析,生成自然语言的代码片段摘要,从而帮助安全专家和分析师更深入地理解代码的目的和操作。独立分析:Code Insight独立于传统的防病毒引擎,通过仅分析文件内容,而不依赖其他元数据(如防病毒结果),提供更精确的分析。这个密钥将用于你的 API 请求中,以验证你的身份。

qq_40025179的博客 2671

无人机精准降落辅助系统核心技术解析

接近地面时(<10米)切换至基于图像的视觉伺服(IBVS),依据图像特征点偏移(如靶标图案、LED标记)微调姿态,消除位置累积误差。通过SRUKF(平方根无迹卡尔曼滤波) 算法融合三类数据,输出6自由度位姿估计(精度达厘米级),抑制单一传感器噪声。权值根据信噪比动态调整。模型预测控制(MPC):针对斜坡降落,构建包含平台倾角、风扰的动力学方程,滚动求解最优油门序列。动态照明适配:针对夜间或低光照场景,系统向降落平台发送亮度调节指令,如增强红外信标强度或调整可见光LED阵列,确保特征识别鲁棒性。

YUNZHUO666的博客 1696

GB28181协议实战:5分钟搞定海康摄像头SIP注册失败问题(附Wireshark抓包分析)

本文详细解析了海康摄像头在GB28181协议下SIP注册失败的7个关键原因及解决方案,包括网络可达性、鉴权参数、NAT穿越等核心问题。通过Wireshark抓包分析,提供快速定位方法,帮助工程师高效解决SIP注册失败问题,提升实时图像联调效率。

weixin_29212867的博客 553

PostgreSQL服务器管理:服务器设置和操作

本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权。 1. PostgreSQL用户账户 和对外部世界可访问的任何服务器守护进程一样,我们也建议在一个独立的用户账户下运行PostgreSQL。这个用户账户应该只拥有被该服务器管理的数据,并且应该不能被其他守护进程共享(例如,使用用户nobody是一个坏主意)。我们不建议把可执行文件...

weixin_33857230的博客 728

Shader Graph实战:5分钟搞定Flow Map水体流动效果(含UV偏移避坑指南)

本文详细解析了如何使用Unity的Shader Graph工具快速实现Flow Map水体流动效果,涵盖基础原理、核心节点搭建、高级技巧及性能优化。特别针对UV偏移问题提供避坑指南,帮助开发者轻松打造专业级动态水面效果,适合游戏场景增强视觉表现。

weixin_29250403的博客 245

React Native

React Native详细知识和使用

林靖焙的博客 1657

2、Elixir与Erlang:构建高可用系统的利器

本文介绍了Elixir与Erlang在构建高可用系统方面的优势,深入探讨了Erlang的并发机制、容错能力以及分布式特性,并结合实际应用场景展示了其在服务器端开发中的强大能力。此外,还提供了学习资源和交流平台,帮助开发者快速上手并深入实践。

grape的博客 125

看完这篇你就能讲解LLC软开关:一文秒懂 ZVS 和 ZCS 到底啥意思!

想要 MOS 管ZVS 好实现➜ 把工作频率保持在 fr1 或更高。想让整流二极管也ZCS 实现➜ 频率就别高过 fr1。设计磁性元件时,一定要计算好 Lr、Lm、Cr 的值,这直接决定你 fr、fr1 是多少!LLC 的软开关技术不是“魔法”,是电感电容+频率控制的精妙组合;fr1 就像黄金分割点,整流和开关都能“刚刚好”;不是所有软开关都能同时实现,要看你在频率曲线的哪一段!

weixin_43199439的博客 1533

【v2.x OGE-example 第二节】 实体参数

【v2.x OGE-example 第二节】 实体参数     1. 位置:Drawing_example --> SpriteParameters 2. 类名:SpriteParameters   (1)旋转精灵:      sprite.setRotation(float pRotation) 设置旋转角度 sprite.setRotationCenter(float 

OrangeGame的专栏 924

Android实战——白天黑夜模式设置

白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。

小旭的专栏 5229

​【v2.x OGE-example 第二节】 实体参数

【v2.xOGE-example第二节】实体参数1.位置:Drawing_example-->SpriteParameters2.类名:SpriteParameters(1)旋转精灵:sprite.setRotation(floatpRotation)设置旋转角度sprite.setRotationCenter(floatpRot...

weixin_33730836的博客 134

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【v2.x OGE-example 第三节 播放精灵动画】

1. 位置:Drawing_example --> SpriteAnimated 2. 类名:SpriteAnimated   3.利用AnimatedSprite动画精灵类可以实现多种多种动作。例如: (1).播放精灵动画,指定播放速度; (2).播放特定帧,指定特定每一帧的帧速,可以实现慢放,快进,跳帧,倒放等; (3).可以循环播放,也可以只播放一次,也可以指定播放次数;

OrangeGame的专栏 1037

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【v2.x OGE-example 第二章(第一节) 精灵的移动】

1. 位置:Modifier_example --> MovingBall 2. 类名:MovingBall     (1).精灵的移动我们可以在每次刷新的时候更新精灵的X, Y位置来达到移动的效果,下面我们用PhysicsHandler 事件来移动一个笑脸精灵,通过更改PhysicsHandler 事件的X, Y速率使精灵动起来。   /**   * 定义一个Ball精灵   *

OrangeGame的专栏 779

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

OrangeGame的专栏 1169
上一篇: 【v2.x OGE教程 19】 引擎状态控制
下一篇: 【v2.x OGE-example 第二节】 实体参数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值