标签: game-loop

Windows游戏循环双核50%CPU

仅游戏循环使用50%的CPU使用率,我还没有完成任何渲染工作.我在这做什么?

        while(true)
        {
            if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
            {
                    if(msg.message == WM_QUIT || 
                           msg.message == WM_CLOSE || 
                           msg.message == WM_DESTROY)
                            break;

                    TranslateMessage(&msg);
                    DispatchMessage(&msg);                   
            }
            else
            {
                    //Run game code, break out of loop when the game is over

            }
        }
Run Code Online (Sandbox Code Playgroud)

winapi message-queue game-loop

4
推荐指数
2
解决办法
3667
查看次数

用于游戏循环的Java TimerTick事件

我尝试使用java.util.Timer中的Timer在Java中创建游戏循环.在计时器滴答声期间,我无法让我的游戏循环执行.以下是此问题的示例.我试图在游戏循环期间移动按钮,但它没有继续计时器滴答事件.

import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JButton;

public class Window extends JFrame {

    private static final long serialVersionUID = -2545695383117923190L;
    private static Timer timer;
    private static JButton button;

    public Window(int x, int y, int width, int height, String title) {

        this.setSize(width, height);
        this.setLocation(x, y);
        this.setTitle(title);
        this.setLayout(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

        timer = new Timer();
        timer.schedule(new TimerTick(), 35);

        button = new JButton("Button");
        button.setVisible(true);
        button.setLocation(50, 50);
        button.setSize(120, 35);
        this.add(button);
    }

    public void gameLoop() {

        // Button does not move on timer tick. …
Run Code Online (Sandbox Code Playgroud)

java swing timer game-loop

4
推荐指数
1
解决办法
1万
查看次数

游戏循环的功能替代

我刚刚开始使用Scala,我正在尝试一个小玩具程序 - 在这种情况下是一个基于文本的TicTacToe.我根据我对scala的了解编写了一个工作版本,但注意到它主要是必要的,我的课程是可变的.

我正在尝试实现一些功能习惯用法,并且设法至少使表示游戏状态的类不可变.但是,我留下了一个负责执行游戏循环的类,依赖于可变状态和命令循环,如下所示:

  var board: TicTacToeBoard = new TicTacToeBoard

  def start() {
    var gameState: GameState = new XMovesNext
    outputState(gameState)
    while (!gameState.isGameFinished) {
      val position: Int = getSelectionFromUser
      board = board.updated(position, gameState.nextTurn)
      gameState = getGameState(board)
      outputState(gameState)      
    }
  }
Run Code Online (Sandbox Code Playgroud)

在这个循环中编写我正在做什么的更具惯用性的方法是什么?

完整的源代码在这里https://github.com/whaley/TicTacToe-in-Scala/tree/master/src/main/scala/com/jasonwhaley/tictactoe

functional-programming scala game-loop

4
推荐指数
2
解决办法
1874
查看次数

Win32游戏循环不会使CPU飙升

Windows中有很多例子可以在相当高且稳定的帧速率下触发代码而不会占用CPU.

例如,WPF/Silverlight/WinRT应用程序可以执行此操作.浏览器和媒体播放器也是如此.他们究竟是如何做到的,以及我将从Win32应用程序中获得相同效果的API调用?

当然,时钟轮询不起作用,因为它会刺激CPU.也没有Sleep(),因为你最多只能获得大约50ms的粒度.

winapi game-loop

4
推荐指数
1
解决办法
754
查看次数

Cocos2D游戏循环澄清

注意:我不是母语为英语的人.请原谅任何语法错误.

我开发了一个简单的游戏,左边有一个射手,右边有敌人......非常简单.

该项目几乎完成,它完美运行,但现在我对游戏循环管理有一些疑问.

我安排从右边出现的敌人给调度程序一个间隔,这没关系,但我通过一个简单的ccMoveTo动作从右到左管理敌人的移动,我再说一遍:它完美无缺.问题是我读了一些关于"在每一帧中渲染精灵"的内容,将此操作委托给每帧运行一次的调度方法.

更好:我读到不使用动作移动精灵,但是逐帧重新渲染它们模拟以1/60频率(fps频率)调用的预定方法中的移动,并且我读到此实现可以防止不同硬件系统的稳定性差异..

我问的是:

  • 这是正确的方法吗?
  • 这是一个旧的"设计模式",与Cocos2D已经过时了?(这意味着使用ccMoveTo动作是完全完美的)
  • 或者两个实现在同一级别是否正确?

编辑:

- 同样的技术也应该用于动画吗?

loops cocos2d-iphone game-loop

4
推荐指数
1
解决办法
2618
查看次数

X和Y为浮点而不是整数

我决定最近开始研究一个小型2D游戏.我已经有一些引力工作了.我开始在java上变得更好但是我从来没有在这个项目之前使用过java AWT或任何与渲染有关的东西,基本上这是我的问题:

我得到了一个角色,每个蜱虫走1个像素,这太慢了.如果我将它提升到2个刻度,它太快了,而且角色几乎正在运行.我想要介于两者之间,但问题是X和Y存储为int,如果我将它们更改为float,我将不得不将它们转换为int类似(int)的东西,这将导致删除浮动数字.

我试过的是每2个刻度而不是1个刻度更新角色的X或者使游戏循环变慢但是看起来相当不稳定.如果有人有一个很好的解决方案,请留言.谢谢!

java swing canvas game-loop

4
推荐指数
1
解决办法
117
查看次数

在Python中编写游戏循环的正确方法是什么?

我正在尝试编写一个python游戏循环,希望考虑到FPS.调用循环的正确方法是什么?我考虑过的一些可能性如下.我试图不使用像pygame这样的库.

1.

while True:
    mainLoop()
Run Code Online (Sandbox Code Playgroud)

2.

def mainLoop():
    # run some game code
    time.sleep(Interval)
    mainLoop()
Run Code Online (Sandbox Code Playgroud)

3.

 def mainLoop():
    # run some game code
    threading.timer(Interval, mainLoop).start()
Run Code Online (Sandbox Code Playgroud)

4.使用sched.scheduler?

python game-engine game-loop

4
推荐指数
1
解决办法
1万
查看次数

C++游戏循环示例

有人可以为一个只有"游戏循环"的程序编写一个源代码,这个循环只会循环,直到你按下Esc,程序会显示一个基本的图像.下面是我现在拥有的源代码,但我必须使用SDL_Delay(2000);该程序保持活动2秒,在此期间程序被冻结.

#include "SDL.h"

int main(int argc, char* args[]) {

    SDL_Surface* hello = NULL;
    SDL_Surface* screen = NULL;

    SDL_Init(SDL_INIT_EVERYTHING);

    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);

    hello = SDL_LoadBMP("hello.bmp");

    SDL_BlitSurface(hello, NULL, screen, NULL);

    SDL_Flip(screen);

    SDL_Delay(2000);

    SDL_FreeSurface(hello);

    SDL_Quit();

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

我只想让程序打开,直到我按下Esc.我知道循环是如何工作的,我只是不知道我是在main()函数内部实现还是在函数内部实现.我试过了两次,两次都失败了.如果你能帮助我,那就太棒了:P

c++ sdl game-loop

3
推荐指数
1
解决办法
1万
查看次数

为什么SurfaceView的游戏循环无法运行体面的FPS?

我拼凑了一个简单的游戏循环,主要是使用看起来很普遍的技术,特别是在Java的杀手游戏编程书中,在本教程中我刚刚发现:这里 只是一个带有后台缓冲区的简单,定时的游戏循环.

问题是它不会以良好的FPS重绘屏幕.我能从摩托罗拉Xoom中获得的最好成绩是15FPS,目标是24.

如果我的后置缓冲区大小的一半,速度会大幅提升,所以我猜这个问题可能与利用Xoom上的屏幕有关(我的SurfaceView的大小是1280x727)...还有其他游戏看到了以相同的尺寸完美地运行.

我没有任何其他设备可以测试,所以我现在有点卡住了该做什么.

我做错了什么/失踪/无知?

android frame-rate surfaceview game-loop

3
推荐指数
1
解决办法
3112
查看次数

在Objective-C中的字符串比较与类比较

我正在编写一个Objective-C游戏,我正处于我应该开始在游戏循环中优化我的一些代码的阶段.
我使用了大量的类比较方法,

if([obj isMemberOfClass:[SomeClass class]])


我听说这种检查是相当昂贵的,因为我只选择有1个阵列填充了多个类,我需要某种类的检查.
我想也许在NSObject子类化NSObject中添加一个属性来包含一个字符串属性,在初始化过程中我将使该等特定子类的类名等于.然后干脆做一个

if([obj.klass isEqualTo:@"SomeClass"])

这会有益吗?
我试图尽可能多地保持游戏循环中的动态编码.

谢谢!

iphone objective-c objective-c++ cocos2d-iphone game-loop

3
推荐指数
1
解决办法
1557
查看次数