注意:我已经搜索了现有的答案,但无法从这个角度真正找到一些东西。
我从事开发工作多年,但我没有任何游戏/图像开发经验。
和许多人一样,我认为为Android编写一款小游戏会很有趣。然而,我真的无法想象创建最简单的动画所需的步骤。例如,假设我想画一辆在风景或地图上移动的小型车辆。我不知道该从何说起。
我想我需要画出汽车行驶时的每一帧,即旋转的轮子,一些抽搐等。基本上就是这样了吗?-在油漆中绘制10个图像,然后循环它们?下一个问题是,如何循环它们?我猜有某种动画对象/系统,我加载一些东西然后运行?这可能因平台和sdk而异,但我也怀疑原则通常是相同的,就像大多数小部件/gui系统的原则一样。
那么我猜汽车需要在地图上移动的动画。这个动画和另一个动画是并行运行的吗?
. .等等。这实际上是一个关于简单游戏动画基础的问题。有些工作流程在所有游戏中都很常见,例如,为iphone编写游戏的人仍然知道如何为android编写游戏。
我并不是在研究3d动画或任何需要高级物理、高级数学、矩阵、网格等的东西。我只对塔防游戏(游戏邦注:如《Robo defense》)、平台游戏、《暗黑破坏神》等游戏中的图像感兴趣。谢谢。
在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 */
};
正如你所看到的:你的游戏元素会在整个游戏过程中持续存在,并且会被输入到游戏状态的应用程序所修改。动画可以通过循环一组数字来完成,这些数字表示要从一组可能的图像中显示当前图像的帧号。
这些都很肤浅,但我希望它能让你对一款典型游戏的整体结构有所了解。