Animation 如何创建简单的游戏动画

Animation 如何创建简单的游戏动画,animation,Animation,注意:我已经搜索了现有的答案,但从这个角度看,我真的找不到什么。如果发现重复,请发表评论 我从事开发工作已经很多年了,但是我没有游戏/图形开发的经验 像许多其他人一样,我认为尝试为Android编写一个小游戏会很有趣。然而,我无法真正描绘创建最简单动画所需的步骤 例如,假设我想画一辆在风景或地图上行驶的小车。我真的不知道从哪里开始 我想我需要画出汽车行驶时的每一个画面,即车轮打滑、抽搐等。这基本上是吗用油漆画10幅图像,然后循环它们?下一个问题是——如何循环它们?我猜有某种动画对象/系统,我加载

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

我从事开发工作已经很多年了,但是我没有游戏/图形开发的经验

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

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

我想我需要画出汽车行驶时的每一个画面,即车轮打滑、抽搐等。这基本上是吗用油漆画10幅图像,然后循环它们?下一个问题是——如何循环它们?我猜有某种动画对象/系统,我加载了一些东西然后运行?这可能因平台和sdk而异,但我也怀疑这些原则通常是相同的,就像大多数小部件/gui系统的原则一样

然后我想汽车在地图上移动时需要设置动画。这个动画和另一个动画平行运行

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

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


谢谢。

在GUI/Widget应用程序中,通常会有一个事件循环,当用户单击按钮或移动滑块或其他任何东西时,该循环会回调到代码中

在一个典型的游戏中,你会有一个游戏循环,它会反复轮询输入,根据输入驱动世界状态向前移动一步,然后将世界状态绘制到显示屏上。例如(C++中因为它是我最喜欢的语言):

我希望这能给你一个想法,但不要认为这对于实际的游戏循环来说是足够好的。特别是计时代码有点破绽

如果您想让车辆在地形上移动,则可以实现如下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 */
};
正如您所看到的:您的游戏元素在游戏的整个过程中持续存在,并通过应用对游戏状态的输入进行修改。动画可以通过循环一组数字来完成,这些数字指示从一组可能的图像中显示的当前图像的帧数


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

你应该检查:)事实上,我应该检查一下我的大脑,不要先尝试那里。。
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 */
};