如何创建简单的游戏动画



注意:我已经搜索了现有的答案,但无法从这个角度真正找到一些东西。

我从事开发工作多年,但我没有任何游戏/图像开发经验。

和许多人一样,我认为为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 */
};

正如你所看到的:你的游戏元素会在整个游戏过程中持续存在,并且会被输入到游戏状态的应用程序所修改。动画可以通过循环一组数字来完成,这些数字表示要从一组可能的图像中显示当前图像的帧号。

这些都很肤浅,但我希望它能让你对一款典型游戏的整体结构有所了解。

最新更新