我正在开发一个从图像加载关卡的平台游戏。它循环穿过图像的所有像素,并检查RGB值是否与某个对象匹配,例如黄色表示硬币,白色表示墙壁。
一旦玩家死亡,关卡将重新加载,但是当场景中还有一个炮塔时,游戏的帧速率会下降。
循环遍历所有像素的方法。
// Loads the requested level based on a image
public void loadLevel(BufferedImage Image)
{
clearLevel();
int imageWidth = Image.getWidth();
int imageHeight = Image.getHeight();
currentLevel = Image;
for(int Par1 = 0; Par1 < imageHeight; Par1++)
{
for(int Par2 = 0; Par2 < imageWidth; Par2++)
{
int currentPixel = Image.getRGB(Par1, Par2);
int redValue = (currentPixel >> 16) & 0xff;
int greenValue = (currentPixel >> 8) & 0xff;
int blueValue = (currentPixel) & 0xff;
if(redValue == 255 && greenValue == 255 && blueValue == 255)
{
addObject(new Block((Par1 * 32), (Par2 * 32), 0, 0, 0, Identifier.Block));
}
if(redValue == 255 && greenValue == 0 && blueValue == 0)
{
addObject(new Block((Par1 * 32), (Par2 * 32), 1, 0, 0, Identifier.Lava));
}
if(redValue == 255 && greenValue == 0 && blueValue == 255)
{
addObject(new Block((Par1 * 32), (Par2 * 32), 5, 0, 8, Identifier.Platform));
}
if(redValue == 0 && greenValue == 255 && blueValue == 255)
{
addObject(new Block((Par1 * 32), (Par2 * 32), 4, 1, 8, Identifier.Platform));
}
if(redValue == 255 && greenValue == 255 && blueValue == 0)
{
addObject(new Block((Par1 * 32), (Par2 * 32), 2, 0, 0, Identifier.Coin));
}
if(redValue == 0 && greenValue == 255 && blueValue == 0)
{
addObject(new Block((Par1 * 32), (Par2 * 32), 3, 0, 0, Identifier.Flag));
}
if(redValue == 0 && greenValue == 0 && blueValue == 255)
{
addObject(new Player((Par1 * 32), (Par2 * 32), this, Identifier.Player));
}
if(redValue == 255 && greenValue == 175 && blueValue == 0)
{
addObject(new Turret((Par1 * 32), (Par2 * 32), this, Identifier.Turret));
}
}
}
Main.currentState = Main.State.Game;
}
// Reload level
public void reloadLevel()
{
loadLevel(currentLevel);
}
游戏循环
//在线程启动时运行,同时启动游戏循环并创建单独的滴答和每秒帧数行
public void run()
{
try
{
preInitialisation();
initialisation();
LogHandler.log("Initialisation complete.");
}
catch(FileNotFoundException Error)
{
Error.printStackTrace();
}
catch(FontFormatException Error)
{
Error.printStackTrace();
}
catch(IOException Error)
{
Error.printStackTrace();
}
requestFocus();
long lastTime = System.nanoTime();
double amountOfTicks = 60.0;
double nanoSeconds = 1000000000 / amountOfTicks;
double deltaValue = 0;
long currentTime;
long loopTimer = System.currentTimeMillis();
while(isRunning)
{
currentTime = System.nanoTime();
deltaValue += (currentTime - lastTime) / nanoSeconds;
lastTime = currentTime;
while(deltaValue >= 1)
{
tick();
deltaValue--;
temporaryTicks++;
}
render();
temporaryFrames++;
if(System.currentTimeMillis() - loopTimer > 1000)
{
loopTimer += 1000;
absoluteFrames = temporaryFrames;
absoluteTicks = temporaryTicks;
temporaryTicks = 0;
temporaryFrames = 0;
}
}
}
结果是增加了LWJGL库,然后使能vsync。
Display.setVSyncEnabled(true);
我还将所有LinkedLists更改为ArrayLists,因为它的方式更快,何时使用LinkedList而不是ArrayList?
每个pyplay都有一个游戏循环,看起来像这样: 根据的api: 返回自调用pygame.init()以来的毫秒数。在pyplay被初始化之前,这将永远是0。 但是: 此方法应每帧调用一次。它会计算出有多少。自上次调用以来已过毫秒。 如果您传递可选的framerate参数,函数将延迟以使游戏运行速度低于给定的每秒滴答数。这可以用来帮助限制游戏的运行速度。通过呼叫时钟。每帧勾选(40)一次,程序的运
下载游戏 可透过以下方法下载(购买)游戏。可下载(购买)的游戏分为两种,一种是只可在PSP™上游玩的游戏,另一种则可在PSP™和PS3™两种主机上游玩。关于游戏的种类和对应的主机等信息,可在PlayStation®Store上确认。 PSP™的(PlayStation®Store) 有关下载(购买)游戏的详细方法,请参阅(PlayStation®Network) > (PlayStation®St
包含在程序启动时启动的线程。这个线程包含一个循环,每40毫秒更新一次游戏并重新绘制()board。 备选办法B: 板创建一个摆动计时器。这个计时器的动作监听器是板本身。actionPerformed()方法每40毫秒运行一次,并更新game+repaints Board()。 谢谢
我已经开发了一个2D侧滚动平台一段时间了。这是我的第一场正式比赛,快结束了。到目前为止,我还没有过多考虑过决议。 我的游戏是基于瓷砖的,大多数瓷砖和玩家精灵都是。尺寸为40x40像素的PNG文件。默认屏幕高度和宽度为1280x720。据我所知,现在的大多数游戏都有很多不同的分辨率选择和不同的纵横比。 我想给玩家几个分辨率的选择,比如800x600、1024x768和1280x720。这需要这样做,
游玩已下载的游戏 可游玩自(PlayStation®Store)下载(购买)的游戏。 开始游玩游戏 1. 选择 (游戏)的 (Memory Stick™) 或 (主机内存)。 2. 选择想启动之游戏的图示。 离开游戏 游玩游戏时按下PS按钮(HOME(归返)按钮)。请遵循画面指示,正确操作。 暂停游戏 保存游玩中的游戏进度,再暂时离开游戏。 游玩游戏时按下PS按钮。请遵循画面指示,正确操作。 要使
所以我为我的课做了一个抽动练习作业。我已经成功地创建了一个简单的Tic Tac Toe程序,但不知何故,检查绘制的方法有时并不正确。如果所有东西都填满了,但没有赢家,那就是平局。但如果除第0行第1列外,其他所有内容都已填满,则即使该框仍为空白,它仍将显示“Draw”。如果你不明白我的意思,就试着把所有的东西都填满,但不是赢,即使最后一个框没有填满,它也会说“平局”。我在代码中做错了什么????驱动