注意:我已经搜索了现有的答案,但从这个角度来看并不能真正找到答案。如果您发现重复,请发表评论。
我在开发方面工作多年,但我没有(zip!)游戏/图形开发经验。
和其他许多人一样,我认为尝试为Android编写一款小游戏会很有趣。但是,我无法真正描绘创建最简单的动画所需的步骤。
例如,假设我想绘制一辆在景观或地图上移动的小型车辆。我真的不知道从哪里开始。
我想我需要绘制汽车在驾驶时看起来如何的每一帧,即旋转车轮,一些抽搐等等。这基本上是吗? - 在油漆中绘制10张图像然后循环它们?下一个Q会是 - 如何循环它们?我猜有些动画对象/系统,我加载了什么,然后运行?这可能因平台和sdk而异,但我也怀疑原则通常是相同的,就像大多数widget / gui系统的原理一样。
然后我想这辆车需要动画才能在地图上移动。这个动画与另一个动画并行运行?
..等等。这实际上是简单游戏动画的基本原理问题。在所有游戏中都有一些常见的工作流程,即为iPhone编写游戏的人仍然知道如何为Android做同样的大部分工作。
或许陈述显而易见的,我不是在研究3D动画或任何需要高级物理,高级数学,矩阵,网格物等的东西。我只对你在塔防中看到的那种图形感兴趣游戏(如“Robo Defense”),平台,“暗黑破坏神” - 游戏等。
感谢。
答案 0 :(得分:2)
在GUI / Widget应用程序中,您通常会有一个事件循环,当用户单击按钮或移动滑块或其他任何内容时,它会回调到您的代码中。
在一个典型的游戏中,你将有一个游戏循环,它将重复轮询输入,在该输入的基础上驱动世界状态向前一步,然后将世界状态绘制到显示器上。例如(在C ++中,因为它是我最熟悉的语言):
//Holds everything in the game: the locations and velocities (and so on)
//of all the dynamic elements, the map, the terrain, everything.
WorldState worldState;
while (worldState.continueGame()) {
Input input(InputSystem.pollInput());
worldState.advanceByFrame(input);
OutputSystem.display(worldState);
sleep(1/stepTime);
}
我希望这会给你一个想法,但不要认为这对于实际的游戏循环来说已经足够了。特别是时间码相当破碎。
如果你想让车辆在地形上移动,那么你可以像这样实现WorldState:
struct WorldState {
void advanceByFrame(Input const& input) {
vehicle.moveOver(terrain);
}
Terrain terrain;
Vehicle vehicle;
};
struct Vehicle {
double xPosition;
double yPosition;
int frameNumber;
void moveOver(Terrain const& terrain) {
/** some logic based on terrain */
//just filler, but you can change xPosition and yPosition
//in whatever way you want.
xPosition += 32.;
//where numberOfFrames is determined somewhere else.
frameNumber = (frameNumber + 1) % numberOfFrames;
}
};
struct Terrain {
/** stuff, maybe an 2d-array or whatever */
};
正如您所看到的:您的游戏元素会持续超过游戏的长度,并通过应用输入到游戏状态进行修改。动画可以通过循环显示一组数字来完成,这些数字表示当前图像的帧编号,以便从一组可能的图像中显示。
这一切都很浅薄,但我希望它能让你了解典型游戏的整体结构。