如何创建简单的游戏动画

时间:2011-08-29 11:14:24

标签: animation

注意:我已经搜索了现有的答案,但从这个角度来看并不能真正找到答案。如果您发现重复,请发表评论。

我在开发方面工作多年,但我没有(zip!)游戏/图形开发经验。

和其他许多人一样,我认为尝试为Android编写一款小游戏会很有趣。但是,我无法真正描绘创建最简单的动画所需的步骤。

例如,假设我想绘制一辆在景观或地图上移动的小型车辆。我真的不知道从哪里开始。

我想我需要绘制汽车在驾驶时看起来如何的每一帧,即旋转车轮,一些抽搐等等。这基本上是吗? - 在油漆中绘制10张图像然后循环它们?下一个Q会是 - 如何循环它们?我猜有些动画对象/系统,我加载了什么,然后运行?这可能因平台和sdk而异,但我也怀疑原则通常是相同的,就像大多数widget / gui系统的原理一样。

然后我想这辆车需要动画才能在地图上移动。这个动画与另一个动画并行运行?

..等等。这实际上是简单游戏动画的基本原理问题。在所有游戏中都有一些常见的工作流程,即为iPhone编写游戏的人仍然知道如何为Android做同样的大部分工作。

或许陈述显而易见的,我不是在研究3D动画或任何需要高级物理,高级数学,矩阵,网格物等的东西。我只对你在塔防中看到的那种图形感兴趣游戏(如“Robo Defense”),平台,“暗黑破坏神” - 游戏等。

感谢。

1 个答案:

答案 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 */
};

正如您所看到的:您的游戏元素会持续超过游戏的长度,并通过应用输入到游戏状态进行修改。动画可以通过循环显示一组数字来完成,这些数字表示当前图像的帧编号,以便从一组可能的图像中显示。

这一切都很浅薄,但我希望它能让你了解典型游戏的整体结构。