Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Анимация персонажа (платформер) (http://www.flasher.ru/forum/showthread.php?t=155909)

haer 12.05.2011 14:30

Анимация персонажа (платформер)
 
Привет. Пытаюсь сделать платформер использую AS2. Управление персонажем есть. Персонаж у меня в виде мувика перемещаться и прыгать он уже умеет. В дальнейшем хочу сделать ему анимацию. Но вот как ее переключать в той или иной ситуации не знаю, например (идет, бежит, стоит, погиб, прыгнул и т.д.) может кто делал.

вот код управления персонажем:
Код AS1/AS2:

onClipEvent (load) {
        var platforma:MovieClip = _root.platforma;
        var grav:Number = 0;
        var gravity:Number = 2;
        var speed:Number = 7;
        var maxJump:Number = -12;
        var touchingGround:Boolean = false;
}
onClipEvent (enterFrame) {
        _y += grav;
        grav += gravity;
        while (platforma.hitTest(_x, _y, true))
        {
                _y -= gravity;
                grav = 0;
        }
        if (platforma.hitTest(_x, _y + 5, true))
        {
                touchingplatforma = true;
        }
        else
        {
                touchingplatforma = false;
        }
        if (Key.isDown(Key.RIGHT))
        {
                _x += speed;
        }
        if (Key.isDown(Key.LEFT))
        {
                _x -= speed;
        }
        if (Key.isDown(Key.UP) && touchingplatforma)
        {
                grav = maxJump;
        }
        if (platforma.hitTest(_x + (_width / 2), _y - (_height / 2), true))
        {
                _x -= speed;
        }
        if (platforma.hitTest(_x - (_width / 2), _y - (_height / 2), true))
        {
                _x += speed;
        }
        if (platforma.hitTest(_x, _y - (height), true))
        {
                grav = 3;
        }
}

как при нажатии клавиш помимо перемещения мувика еще и менять ему анимацию? Спасибо.

an_games 12.05.2011 14:51

тут есть базовые принципы
http://xitri.com/2009/06/16/simple-p...me-engine.html

haer 12.05.2011 21:27

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

petyar 12.05.2011 21:48

Переключайте анимацию в зависимости от применяемого управления и игровой ситуации:
1) Если в прыжке - анимацию прыжка (переключение как в момент самого прыжка, так и при падении, на что должна быть соответствующая проверка)
2) Нажали идти вправо-влево (при этом !прыжок) - ставим анимацию бега

Если вас интересует, как именно ее менять - внутри клипа делается раскадровка с состояниями (анимация циклится там же), потом просто переключаются кадры.

Это вам так, простенький совет. Умные могут вам посоветовать нарезать в битмапдаты и много еще чего.

haer 12.05.2011 22:33

Да это я все понимаю и уже анимация у меня есть мне интересны механизмы AS2 как в определенной ситуации воспроизводить ту или иную анимацию.

Сначала попробовал сделать следующее:

Код AS1/AS2:

if (Key.isDown(Key.RIGHT))
        {
                _root.hero.gotoAndPlay(1);
                _x += speed
        }
;

тоесть при нажатии клавиши стрелка вправо воcпроизводить 1 кадр на котором находится мувик с анимацией идущего перса вправо. Но это не очень хороший способ хотя хоть как то заработало.

petyar 13.05.2011 00:11

В таком случае держите в памяти предыдущее состояние, чтобы не переключать лишний раз. Вроде такого:
Код AS1/AS2:

if (Key.isDown(65)) {
        player._x -= speed;
        if (prevAnim != 1) {
                player.gotoAndPlay("run");
                prevAnim = 1;
        }
}


sk65 13.05.2011 15:19

Код AS1/AS2:

if (Key.isDown(Key.SPACE) && !jump) {
                        jump = true;
                        speedY = jumpSpeed;
                }
jump = (speedY<5 && speedY>0) ? true : jump;
if (jump) {
                        hero.gotoAndStop(3);//прыжок
                } else {
                        if (oldX != hero._x) {
                                hero.gotoAndStop(2);//идет
 
                        } else {
                                hero.gotoAndStop(1);//стоит
 
                        }
                }
oldX = hero._x;

и добавь проверку, когда персонаж касается ногами об пол jump = false.

haer 16.05.2011 22:55

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

здесь swf кому интересно посмотреть что получилось.
http://file.qip.ru/video/w5aCRwwO/test.html

Код AS1/AS2:

onClipEvent (load) {
        speed = 20;
        isJumping = false;
        jumpSpeed = 2;
        startY = _y;
        scale = _xscale;
}
onClipEvent (enterFrame) {
        if (isJumping) {
                _y += jumpSpeed;
                jumpSpeed += 1;
                if (_y>=startY) {
                        _y = startY;
                        isJumping = false;
                        speed = 10;
                }
        } else {
                if (Key.isDown(Key.UP)) {
                        isJumping = true;
                        jumpSpeed = -20;
                        speed = 6;
                }
        }
        if (Key.isDown(Key.LEFT)) {
                play();
                _x -= speed;
                _xscale = -scale;
        } else {
 
                if (Key.isDown(Key.RIGHT)) {
                        play();
                        _x += speed;
                        _xscale = scale;
                } else {
                        stop();
                }
 
 
        }
}

прихожу к мысли, что проще взять готовый движок платформера с этого сайта http://xitri.com и ковыряться в нем :( , но программирование подтягивать надо...

dark256 16.05.2011 23:08

ооо... у вас сразу все плохо - код на клипах.
это и смотреть никому не интересно.
в примере - все по-другому.

haer 16.05.2011 23:19

не понял, что значит в примере


Часовой пояс GMT +4, время: 13:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.