Как создавать простые игровые анимации - PullRequest
1 голос
/ 29 августа 2011

Примечание: я искал существующие ответы, но не могу что-то найти с этой точки зрения.Пожалуйста, прокомментируйте, если найдете дубликат.

Я работаю в разработке много лет, но у меня нет (zip!) Опыта разработки игр / графики.

Мне нравитсяя думал, что было бы неплохо попробовать написать небольшую игру для Android.Однако я не могу изобразить шаги, необходимые для создания простейшей анимации.

Например, скажем, я хотел бы нарисовать небольшое транспортное средство, перемещающееся по ландшафту или карте.Я не знаю, с чего начать.

Полагаю, мне нужно было бы нарисовать каждый кадр того, как автомобиль выглядит во время движения, то есть вращающиеся колеса, некоторые подергивания и т. Д. Это в принципе так?- Рисование 10 изображений в краске и затем их зацикливание?Следующий вопрос будет - как их зациклить?Я предполагаю, что есть какой-то объект / система анимации, в которую я загружаю что-то, а затем запускаю?Вероятно, это зависит от платформы и SDK, но я также подозреваю, что принципы, как правило, одинаковы, как и принципы большинства систем виджетов / графического интерфейса.

Тогда я предполагаю, что автомобиль должен быть анимирован как движущийся по карте.,И эта анимация работает параллельно с другой анимацией?

... и т. Д. И т. Д. Это действительно вопрос основ простой анимации игры.Есть некоторый рабочий процесс, который является общим во всех играх, то есть тот, кто писал игры для iphone, все еще знает большую часть того, как сделать то же самое для Android.

Чтобы, возможно, заявить очевидное, я не смотрю в 3dанимация или что-то еще, требующее продвинутой физики, математики, матриц, вещей из сетки и т. д. Меня интересует только та графика, которую вы, например, видите в играх Tower Defense (например, «Robo Defense»), платформа, «diablo» -игрыи т. д.

Спасибо.

1 Ответ

2 голосов
/ 29 августа 2011

В приложении с графическим интерфейсом / виджетом у вас обычно будет цикл обработки событий, который вызывает ваш код, когда пользователь нажимает на кнопку или перемещает ползунок или что-то подобное.

В типичной игре у вас будетИгровой цикл, который будет многократно опрашивать ввод, выводит состояние мира вперед на один шаг на основе этого ввода и затем отображает состояние мира на дисплее.Например (в 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 */
};

Как видите, вашигровые элементы сохраняются на протяжении всей игры и модифицируются путем применения ввода в игровое состояние.Анимации могут быть сделаны путем зацикливания набора чисел, которые указывают номер кадра текущего изображения для отображения из набора возможных изображений.

Это все очень поверхностно, но я надеюсь, что это даст вам представление ообщая структура типичной игры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...