我认为一个有效的选择是实现TAnimation并覆盖ProcessAnimation.通过TAnimator运行时会自动安排TAnimation.

TGameLoop = class(TAnimation)

protected

procedure ProcessAnimation; override;

end;

[...]

procedure TGameLoop.ProcessAnimation;

begin

//call updates

end;

并像这样开始:

procedure TForm1.FormCreate(Sender: TObject);

begin

FLoop := TGameLoop.Create(Self);

FLoop.Loop := True;

FLoop.Name := 'GameLoop';

FLoop.Parent := Self;

TAnimator.StartAnimation(Self, 'GameLoop');

end;

默认情况下,动画的FPS设置为60.我现在无法弄清楚的一件事是如何通过仅使用TAnimation的属性来计算自上次调用以来的Deltatime.这个对于处理可变帧时间至关重要.但是,你自己使用System.Diagnostics.TStopwatch自己做.在ProcessAnimation开始时停止观察并获得Ticks,在完成ProcessAnimation后开始一个新的.

编辑:

Deltatime的基本示例(自上次呼叫以来的经过时间,以秒为单位).鉴于您在Form1上放置了一个ViewPort3D,添加了名为Cube1的TCube,TGameLoop与Form1(我知道,丑陋但Demopurpose)在同一单元中声明,TGameLoop具有类型为TStopWatch的Field FWatch.

procedure TGameLoop.ProcessAnimation;

var

LDelta: Single;

begin

FWatch.Stop;

LDelta := FWatch.ElapsedTicks / FWatch.Frequency;

Form1.Cube1.RotationAngle.Y := Form1.Cube1.RotationAngle.Y + 50*LDelta;

FWatch := TStopwatch.StartNew();

end;

EDIT2:一个更好的例子,可以在整个游戏生命周期中更好地分配舍入/测量错误.我们从第一帧开始测量,而不是仅在测量之间进行测量. TGameLoop有一个新的Field FLastElapsedTicks(Double)

procedure TGameLoop.FirstFrame;

begin

FWatch := TStopWatch.StartNew();

end;

procedure TGameLoop.ProcessAnimation;

var

LDelta: Single;

LTickDelta, LElapsed: Double;

begin

LElapsed := FWatch.ElapsedTicks;

LTickDelta := LElapsed - FLastElapsedTicks;

FLastElapsedTicks := LElapsed;

LDelta := LTickDelta / FWatch.Frequency;

Form1.Cube1.RotationAngle.Y := Form1.Cube1.RotationAngle.Y + 50*LDelta;

end;

android 游戏循环 帧速,适用于Android的Firemonkey游戏循环相关推荐

  1. android 张口逐帧动画,《Android 动画》逐帧动画

    关于 Android 的动画学习可以分为以下几个大类: 逐帧动画 补间动画(也说 View 动画) 属性动画 转场动画 这里注意,我只是从学习的角度分为了这四类:从面试的角度,只需要说前面三类,转场动 ...

  2. android+建模工具,什么是适用于Android Studio的3D模型环境的最佳工具

    首先,你已经链接的页面没有引用文字.它代替了this文本. 现在,关于文本本身:你正在脱离情境和/或误解它.这是一个完整的引文: The Android framework provides plen ...

  3. android程序键盘锁_适用于Android的最佳键盘应用程序

    android程序键盘锁 The interactions you have with your phone's keyboard are easily some of the most intima ...

  4. android ios 实时视频,Twitter推出适用于Android和iOS设备的实时视频

    Twitter是最近的主要社交网络服务之一,该服务允许用户直接在其移动应用程序中广播实时视频. 从今天开始,在手机上获得最新更新的Twitter用户将能够从其Periscope支持的Twitter应用 ...

  5. android 音频转码慢,适用于Android的最佳音频和视频转码抑制软件

    Tone是迄今为止最全面的音频/视频编辑应用程序. 声音最流行的功能是MP3播放器和MP4剪切. 但这不是剪切MP3歌曲或视频的简单工具. •音频/视频拆分器: 语音的这一特殊功能使您可以将任何音频或 ...

  6. Android中的帧布局

    文章目录 1 Android中的帧布局 1 Android中的帧布局 首先看下效果: 下面看下xml: <?xml version="1.0" encoding=" ...

  7. [5 种有效方法] 适用于 Android 的通用解锁图案/密码

    在当今世界,保护您的密码对于您的文件和数据的安全至关重要,尤其是在第三方应用程序盛行的情况下.为这些应用程序注册帐户不是问题,就像记住它们一样.但是,如果您不知何故忘记了手机密码,您仍然可以在不丢失宝 ...

  8. android 开源_适用于Android的12个开源游戏

    android 开源 智能手机使用户可以触手可及的丰富游戏,但是许多专有游戏中都充斥着广告,应用内购买以及其他功能,这些功能创造了不那么出色的游戏体验. 虽然开源世界并不是以其游戏质量而著称,但F-D ...

  9. android 音乐游戏,手速党的胜利 -- 音乐游戏专题 #iOS #Android

    音乐游戏是小美最爱的一种游戏类型,可以边玩游戏边听动听的旋律,当手指碰触屏幕,音符正好卡在节点上,这种感觉真是妙不可言!本期音乐游戏专题,小美给大家带来几款动词打次的游戏,绝对让你在玩的时候不知不觉跟 ...

最新文章

  1. 验证码实现(随机背景色及字体颜色,带扰乱线条)
  2. Camstasia studio渲染(生成)视频
  3. 存clob为空的值_给Oracle数据库中CLOB字段插入空值
  4. Leetcode周赛5193. 删除字符使字符串变好
  5. 谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!
  6. 乐高无限的服务器怎么建,乐高无限悬空房子怎么建造 建造方法介绍
  7. 设计模式--责任链模式--Java实现
  8. 分享两个网址,一个是使用mssql自带的跟踪工具和分析工具
  9. UITableView自动计算图片的高度 SDWebImage
  10. linux ifcfg-33 没有eth0解决方法
  11. Photoshop 入门教程「9」如何增加画布的空间?
  12. macbook使用共享屏幕实现VNC远程控制
  13. 5G的前传和回传是什么
  14. win10系统镜像下载及在VMware虚拟机上创建win10虚拟机
  15. 查看电脑重启日志_win10中查看开关机时间及查看admin的RID的方法
  16. 小学五年级年级计算机教学计划,小学五年级信息技术教学计划(精选3篇)
  17. jdk groovy版本_Groovy JDK(GDK):日期和日历
  18. 贰零贰壹·陆·伍·|比赛|·|创客|:第二十届自治区青少年机器人竞赛心得总结
  19. python简单体育竞技模拟_2019-05-12 Python之模拟体育竞赛
  20. 求生之路2服务器ip直连,正版求生之路2好友直连显示该会话已不可用,无法联机...

热门文章

  1. 内网渗透总结二:第二步管理员密码的明文和hash获取
  2. 产品经理负责制的诱惑与窘迫
  3. 12306网站 =≈=泄露用户信息解读之撞库
  4. 阿里云盾AliYunDun服务IO超高
  5. androidx86编译踩坑
  6. 【黑金视频连载】NIOS II视频教程(01)--软件安装
  7. Win10系统杀毒软件defender无法自动启用的解决方法
  8. 最牛叉的街机游戏合集 模拟器
  9. 最好用的三款电脑端epub阅读器
  10. 使用python爬取电子书_怎样用python3爬取电子书网站所有下载链接