Articles of 计时

使用系统时间计算正确处理应用程序暂停的延迟时间?

在我的Android应用程序中,我有要求引入小(用于减慢animation)和更大的延迟(例如为了延迟字符的外观)。 我尝试了两种不同的方式,那就是: long grabTime; int delayInMillis; public void doStuff(){ //Initialise timeGrab variable if (grabTime==0) grabTime = System.currentTimeMillis(); //Has the desired number of Milliseconds passed? if (System.currentTimeMillis()>timeGrab+delayInMillis) //If so, then do something here //And re-grab the time ready for the next time grabTime = System.currentTimeMillis(); } 如果我有一批精灵(每个精灵会有不同的延迟),我发现这样做更容易 long grabTime; int spritesDelay = new int[numberOfSprites]; int forLoopCounter; […]

C ++定时器函数的作用就好像时间限制如果小于1秒即刻达到

我想用C ++和OpenGL / GLUT做一个Snake克隆,但是我在编程定时input时遇到了麻烦。 我做了一个计时器课,如下所示,用于允许input和移动的短时间间隔。 它的函数checkTime()被调用来启动定时器。 然后在下面的调用中,它检查是否已经达到时间限制(由intvariables限制表示 )。 为了testing它,我设置了一个简单的循环控制台程序,显示键盘input。 当正常工作时,它会显示定时器发现达到时间限制的点(它返回“true”)时显示的是什么键。 给定1秒的限制,它将每秒只显示当前input。 如果给定的值小于1,就像0.333一样,它的作用就好像已经到达了时间限制,只要按下一个键就会立即显示input。 我怎样才能得到它只显示input每0.333秒? 另外 – 我知道我在这里做事的方法可能不是最好的,因为我使用的工具。 但是,我很好奇为什么这不能正常工作。 #include <iostream> #include "timer.h" // Include all files necessary for OpenGL/GLUT here… using namespace std; Timer timer; void update(int value) { if (timer.checkTime()) { if (GetAsyncKeyState(VK_LEFT)) cout << "You pressed LEFT!" << endl; else if (GetAsyncKeyState(VK_RIGHT)) cout << […]

如何使用Box2D和C ++制作asynchronous步时序(游戏循环)

我正在使用Box2D和WebSocket ++在C ++中进行游戏。 世界需要每1/60 second更新一次。 同时WebSocket服务器处理玩家。 我应该怎么做间隔? 我知道在C ++中没有setInterval函数,但我可以这样做: •使asynchronous函数 – https://stackoverflow.com/questions/33234403/using-setinterval-in-c/33234557 •使asynchronous线程 – https://codereview.stackexchange.com/questions/40915/simple-multithread-timer 或者也许有一个库? 注意:这不是我如何编写主游戏循环的重复? 因为在这里我需要asynchronous游戏循环。 在链接主题中有同步游戏循环。 为什么我不会使用while (同步循环): while (loop)之后的命令永远不会被执行,如果loop设置为true 。

使用轮询或线程实现延迟?

我正在用Python做一个类似于风险的实时游戏。 玩家可以将军队从一个地区移到另一个地区。 我希望军队的运动时间与两个地区之间的距离成正比,所以每当军队从一个地区移动到另一个地区(直到军队到来),我都需要保留一个新的计时器。 我想到了2种方法来做到这一点: 一种方法是获得移动部队列表,并在主服务器循环的每个迭代中通过该列表进行for循环,以检查每个单元的时间是否到达。 另一种方法是为每个移动队伍创建一个新的线程,并让线程的run()方法不断检查单元的时间是否已经到了。 哪种方式更好?

创建一个TickRate类

我需要在我的引擎中执行tickrate来处理定时事件,比如推出实体更新,我不知道从哪里开始。 我可以访问一个计时器,这个计时器可以让我获得自设备初始化以来的毫秒数。 当我尝试对正确的方法进行头脑风暴时,采取一个主要的事情,我停下来的是,在客户端,我应该允许帧率运行尽可能快,但是,如果我想tickrate运行在60,而客户端FPS小于60,如果主循环由于fps变慢而不能运行至less60次,那么60个嘀嗒怎么执行呢? 任何人都可以解释如何正确执行tickrate? 感谢您的时间。

定时举行LWJGL键盘事件

我正在使用LWJGL开发3D游戏。 我的键盘处理程序遇到问题。 我的目标是实现一个持有空间的function,然后释放它,以在一段时间内触发主角的速度和高度的增加(持有时间越长,弹跳越强大)。 重点是,我想增加Keyboard.isRepeatEvent()的加速度,但是在这种情况下,2帧之间的间隔几乎为0,所以我不能增加加速度。 看来这个事件是在1帧的计算,所以现在我想不出一个新的方法。 这我的代码: Keyboard.enableRepeatEvents(true); while(Keyboard.next()) { if(Keyboard.getEventKey() == Keyboard.KEY_SPACE) if(Keyboard.getEventKeyState()) { if(Keyboard.isRepeatEvent()) { while(test <= 200) { test += getDelta() / 1000; System.out.println("test Value —- " + test); } } // Key held down else { } // Key pressed } else System.out.println("test ——————- " + test); // Key released } getDelta()获取2帧之间的间隔。

如何在应用程序被终止并恢复时正确工作的精灵animation创建延迟?

请在这里看到我原来的问题: 使用系统时间来计算正确处理应用暂停的延迟时间? 总之,我试图在精灵采取特定行动(比如说跳跃)之前引入一个延迟(比如5秒左右) – 但是当用户暂停游戏或系统杀死应用程序时,这需要保留并重新启动。 我尝试在我之前的问题的答案中执行建议(为了节省应用程序暂停的时间,然后将其与当前时间进行比较,以查看应用程序停用了多长时间,然后添加到I检查反对,但这是它自己的问题,我仍然不确定最好的方法)。 当系统重新启动应用程序后,垃圾回收资源,时间(现在正确调整,包括应用程序坐在后台)。 我重置并比较恢复捆绑的时间。 然而,它需要4或5秒来重新加载所有东西(这是一个OpenGL应用程序,所以资源加载到Bundle恢复后的onSurfaceCreated中),所以在游戏开始时,重要的秒数已经过去了,让我们说当恢复的时候,在精灵出现之前还有4秒的时间,它仍然会立刻出现)。 如前所述,当应用程序进入后台时,我将存储时间,然后将其与捆绑软件恢复以获取“应用程序未激活”时间的时间进行比较 – 但是,如果用户(或系统)将应用程序发送到后台,但应用程序保持活动,然后重新启动? 该捆绑然后永远不会恢复,所以我不能抢还原时间做比较。 那么如何最好地处理sprite延迟,当应用程序在后台运行时不会中断? 基本上我似乎需要一种方法来有一个计时器,可以停止时,应用程序暂停或不活跃。 (我在原始问题中所描述的倒数方法似乎是最接近的事情,即保持100的值,并在每次发生游戏时减less它,这将是更容易和更整齐,但是,它会也意味着如果游戏运行速度低于每秒60次,则延迟时间会更长),但是在某种程度上,我可以使用“真实”的时间,而不是每秒locking的东西,游戏没有运行? 基于系统时间的延迟代码(这是在我的游戏逻辑更新) //Timer is initially set to 0, so grab time to start timer if (timer == 0) timer = System.currentTimeMillis(); //Delay completed? (5 Seconds) if (System.currentTimeMillis()>Timer+5000){ //Reset for next delay levelTimer = System.currentTimeMillis(); //Carry out required action here (example, […]

玩家动作和组合系统

在通过组合系统的状态机时,您通常在哪里执行玩家动作? 举个例子,当玩家按下X + Y时,玩家必须做一个像动作一样的勾拳(就像街头霸王一样),玩家跳跃和击中。 另一个例子可能是魔鬼可能哭泣系列,你可以按下+剑形button,敌人被抛出,玩家自动跳跃,让玩家在空中击中目标。 当创建一个组合,你有两件事情要照顾。 一个是组合完成后会播放的媒体(声音,animation等),另一个则是播放组合时播放器的移动。 你如何处理玩家的动作? 我有两个可能的select: 1)在animation中包含玩家动作(翻译,旋转等) 2)将玩家的动作委托给组合节点。 第一个select可能是最简单的,但似乎有点限制。 例如,如果您想让播放器在播放当前组合节点媒体时(例如跳跃)执行一些其他动作可能会非常棘手(跳转+命中)。 第二个选项需要有许多不同的节点(我们可以在这里使用某种代表来最小化节点数(IOC))来覆盖组合中每个部分的所有运动需求。 你怎么看。 我的想法太多了吗? 干杯。

如何制作游戏打勾方法?

我在其他一些简单的2D游戏中看到,使用“打勾”方法来同步游戏逻辑和graphics渲染。 我使用这个的主要原因是由于我的碰撞检测故障,因为玩家实体将完全通过固体物体,除非我几乎逐像素点击控制碰撞矩形。 我认为一个打勾的方法会减缓游戏的快速更新,足以捡起这些轻微的碰撞检测。 我如何创建这样的方法? 我已经尝试了下面的代码,但是这会导致整个游戏冻结: 更新方法: @Override public void update(float deltaTime) { List<TouchEvent> touchEvents = game.getInput().getTouchEvents(); long lastTime = 0; long currentTime = 0; if (state == GameState.Ready) { updateReady(touchEvents); } while (state == GameState.Running) { lastTime = currentTime; currentTime = System.currentTimeMillis(); deltaTime = currentTime – lastTime; player.update(touchEvents, deltaTime); repaint(deltaTime); } if (state == GameState.Paused) […]

定时拼图元素的方法

我正在制作一个侧面滚动的游戏,其中有一些定时的谜题元素。 作为一个简单的例子:我有一些移动平台已经设置为模式转换。 理想情况下,我想确保当玩家首先接近他们时,他们处于一个理想的状态 – 玩家可以看到完全的转变,而更有经验的玩家(即:快跑者)可以立即完成这个谜题,而无需等待当前转换完成。 简而言之,这里的问题是,因为这些平台在关卡开始时就开始转换,所以不可能正确地计算玩家什么时候可能会偶然发现。 我已经做了一些Googlesearch,但还没有成功解决像这样的问题。 显而易见的解决scheme是,只有在玩家(或更可能:相机)首次遇到对象时才开始更新对象。 但是当你考虑更复杂的情况时,这变得困难。 处理这个问题最简单的方法似乎是让一个看不见的触发体积告诉玩家在第一次与玩家碰撞时已经“抵达”的任何难题。 但是这意味着我不得不从逻辑上将拼图元素分组,这可能会很匆忙地变得相当混乱。 举个例子,在屏幕右侧出现一个难题。 它可能需要玩家几秒钟才能到达它。 如果所涉及的要素保持静止,那看起来会很奇怪。 但是当玩家到达的时候,事情可能会“不同步”。 我想在这里发表,希望其他人知道或实施了一个体面的解决这个问题?