【问题标题】:How to create simple game animations如何制作简单的游戏动画
【发布时间】:2011-08-29 19:44:52
【问题描述】:

注意:我已经搜索了现有的答案,但无法从这个角度真正找到一些东西。如果您发现重复,请发表评论。

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

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

例如,假设我想画一辆在风景或地图上行驶的小型车辆。我真的不知道从哪里开始。

我想我需要绘制汽车行驶时的每一帧画面,即旋转的车轮、一些抽搐等。基本上是这样吗? - 用颜料画出 10 张图像然后循环播放?下一个 Q 将是 - 如何循环它们?我猜有某种动画对象/系统可以加载一些东西然后运行?这可能在平台和 sdk 之间有所不同,但我也怀疑这些原则通常是相同的,就像大多数小部件/gui 系统的原则一样。

然后我想汽车需要在地图上移动时进行动画处理。并且这个动画与其他动画并行运行?

.. 等等等等。这确实是一个简单游戏动画的基础问题。有一些工作流程在所有游戏中都很常见,即为 iphone 编写游戏的人仍然知道如何为 android 做同样的事情。

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

谢谢。

【问题讨论】:

标签: animation


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2021-12-29
    • 2014-09-10
    • 1970-01-01
    • 2016-10-07
    • 2013-01-12
    相关资源
    最近更新 更多