Форум программистов, компьютерный форум, киберфорум
Наши страницы
ActionScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
tihomir
1 / 1 / 1
Регистрация: 25.02.2014
Сообщений: 39
#1

Ошибка во время движения персонажа

19.03.2014, 13:57. Просмотров 617. Ответов 10
Метки нет (Все метки)

Здравствуйте! Есть персонаж нарисованный в двух клипах(один стоит, второй идёт) объединил я их в один клип, сделал так чтобы персонаж ходил по сцене:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import flash.events.Event;
 
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var wolf:Wo2 = new Wo2();
addChild(wolf);
wolf.x = 360;
wolf.y = 680;
wolf.gotoAndPlay("st");
 
var speed:Number = 20;  
stage.addEventListener(KeyboardEvent.KEY_DOWN, go);
stage.addEventListener(KeyboardEvent.KEY_UP, st);
stage.addEventListener(Event.ENTER_FRAME, handlerEnterFrame);
 
function st(e:KeyboardEvent):void // функция отпущеных клавиш
{
    if (e.keyCode == Keyboard.LEFT ||e.keyCode == Keyboard.RIGHT)
    {
            wolf.gotoAndPlay("st");
            leftPressed = rightPressed = false;
    }
}   
 
function go(e:KeyboardEvent):void      
{
    if (e.keyCode==Keyboard.LEFT) //если нажата только(!) левая клавиша - шагаем влево
    {
        if(!leftPressed)
        {
            leftPressed = true;
            wolf.scaleX = -1;
            wolf.gotoAndPlay("go");
            }
    }
    if (e.keyCode==Keyboard.RIGHT)
    {
        if(!rightPressed)
        {
            rightPressed = true;
            wolf.scaleX = 1;
            wolf.gotoAndPlay("go");
        }
    }
}
 
function handlerEnterFrame(event:Event):void
{
    if (leftPressed) wolf.x -= speed;
    if (rightPressed) wolf.x += speed;
}
Но вот почему то при нажатии клавиш кадр(go) не запускается, тоесть персонаж движется но с анимацией когда он стоит. Прописал в кадре (go)
ActionScript 3
1
this.gotoAndPlay(2);
а в кадре(st)
ActionScript 3
1
stop();
если пишу наоборот: (st)
ActionScript 3
1
this.gotoAndPlay(2);
а в кадре(go)
ActionScript 3
1
stop();
то на сцене постоянно персонаж ходьбы. Что делать то?)

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 13:57
Ответы с готовыми решениями:

Настройка движения персонажа
Здравствуйте! У меня на монтажном столе в Macromedia Flash есть объекты...

Задать перемещение экрана в зависимости от движения персонажа
Доброго времени суток ! Решили тут с другом сделать флешку вместе:) Так как в...

Движение персонажа
Здравствуйте! У меня возникла такая проблема: Есть два мувиклипа на шкале...

Прыжок персонажа
Привет:) Как сделать плавный прыжок персонажу? Из имеющегося кода выходит,...

Ошибка во время обхода данных в ArrayCollection
доброе время суток. у меня ArrayCollection который содержит данные . эти...

10
Theoryofgames
253 / 237 / 50
Регистрация: 20.12.2011
Сообщений: 707
19.03.2014, 14:47 #2
А где у Вас leftPressed и rightPressed принимают значения true ?
Цитата Сообщение от tihomir Посмотреть сообщение
то на сцене постоянно персонаж ходьбы. Что делать то?)
Если бы Вы писали в кадрах, то такой путаницы бы не было, почему у Вас на сцене несколько кадров и на что они вообще влияют, какая структура вложенности у Wo2 - это сейчас тоже непонятно из Вашего рассказа.
this.gotoAndPlay(2) - не очень понятно, зачем для движения персонажа Вам необходимо менять кадр сцены
0
TanaTiX
19.03.2014, 14:52
  #3

Не по теме:

Цитата Сообщение от Theoryofgames Посмотреть сообщение
Если бы Вы писали в кадрах, то такой путаницы бы не было
Наверное все же "Если бы Вы не писали в кадрах"?

0
tihomir
1 / 1 / 1
Регистрация: 25.02.2014
Сообщений: 39
19.03.2014, 15:37  [ТС] #4
А где у Вас leftPressed и rightPressed принимают значения true ?
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (e.keyCode==Keyboard.LEFT) //если нажата только(!) левая клавиша - шагаем влево
    {
        if(!leftPressed)
        {
            leftPressed = true;
            wolf.scaleX = -1;
            wolf.gotoAndPlay("go");
            }
    }
    if (e.keyCode==Keyboard.RIGHT)
    {
        if(!rightPressed)
        {
            rightPressed = true;
            wolf.scaleX = 1;
            wolf.gotoAndPlay("go");
        }
    }
Wo2 это и есть клип

Добавлено через 39 минут
В клип Wo2 засунуты 2 клипа: 1когда волк стоит, 2 идёт, соответственно на 1(st) и 2(go) кадрах.

Почему хотел написать именно так, чтобы убрать "пробуксовку" когда персонаж начинает движение, тоесть нажимаем клавишу он сначала на месте шагает а спустя примерно секунду начинает перемещаться.
0
Theoryofgames
253 / 237 / 50
Регистрация: 20.12.2011
Сообщений: 707
19.03.2014, 16:02 #5
Цитата Сообщение от tihomir Посмотреть сообщение
тоесть нажимаем клавишу он сначала на месте шагает а спустя примерно секунду начинает перемещаться
Такого быть не должно - значит что-то не так было написано

wolf.gotoAndPlay("go") - после отработки данного оператор (если я правильно понимаю структуру вашего приложения) ваш мувиклип wolf начнет переходить с метки go на метки st, а вам нужно, чтобы начала проигрывать анимация ходьбы, значит нужно вместо wolf.gotoAndPlay("go") прописать wolf.gotoAndStop("go")
0
tihomir
1 / 1 / 1
Регистрация: 25.02.2014
Сообщений: 39
19.03.2014, 16:20  [ТС] #6
Сначала было написано вообще вот так:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import flash.events.Event;
 
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
 
var stopwolf1:Stopwolf = new Stopwolf();
addChild(stopwolf1);
stopwolf1.x = 320
stopwolf1.y = 680
var stopwolf2:Stopwolf = new Stopwolf();
addChild(stopwolf2);
stopwolf2.x = 320
stopwolf2.y = 680
stopwolf2.scaleX = -1; // стоящий волк отражен по горизонтали
stopwolf2.visible = false; // устанавливаем видимость клипов
var gowolf1:Gowolf = new Gowolf();
addChild(gowolf1);
gowolf1.x = 360
gowolf1.y = 680
gowolf1.visible = false; // устанавливаем видимость клипов
var gowolfleft1:Gowolf = new Gowolf();
addChild(gowolfleft1);
gowolfleft1.x = 360
gowolfleft1.y = 680
gowolfleft1.visible = false; // устанавливаем видимость клипов
gowolfleft1.scaleX = -1; // идущий волк вправо отражен по горизонтали
var speed = 20;
var wolf:Number = 365; // ширина персонажа
if (x > stage.stageWidth) x = -wolf; // при срабатывании персонаж перемещается в левую часть экрана
stage.addEventListener(KeyboardEvent.KEY_DOWN, go);
stage.addEventListener(KeyboardEvent.KEY_UP, st);
 function st(e:KeyboardEvent):void // функция отпущенных клавиш
 {
        if (e.keyCode == Keyboard.LEFT)
        {
        stopwolf2.visible = true;
        gowolf1.visible = false;
        gowolfleft1.visible = false;        
        }
         if (e.keyCode == Keyboard.RIGHT)
         {
        stopwolf1.visible = true;
        gowolf1.visible = false;
        gowolfleft1.visible = false;        
        }
 }
function go(e:KeyboardEvent):void {      
{
    if (e.keyCode==Keyboard.LEFT) //если нажата только(!) левая клавиша - шагаем влево
    {   if (gowolfleft1.x < 0-100) // вычитаем из общей ширины половину ширины персонажа для плавного перехода
        {gowolfleft1.x = 800+100} // переход из левого края в правый
        gowolfleft1.x -= speed;
        gowolf1.x = stopwolf1.x = stopwolf2.x = gowolfleft1.x; // смещаем все клипы вместе
        stopwolf2.visible = false; // устанавливаем видимость клипов
        stopwolf1.visible = false; 
        gowolf1.visible = false;
        gowolfleft1.visible = true;
        return;
    }
    if (e.keyCode==Keyboard.RIGHT)
    {
        if (gowolf1.x > 800+100)  // прибавляем к общей ширине половину ширины персонажа для плавного перехода
        {gowolf1.x = 0-100} // переход из правого края в левый
        gowolf1.x += speed;
        gowolfleft1.x = stopwolf2.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе
        stopwolf1.visible = false; // устанавливаем видимость клипов
        stopwolf2.visible = false;
        gowolf1.visible = true;
        gowolfleft1.visible = false;
        return;
    }
 
    }
}

вместо wolf.gotoAndPlay("go") прописать wolf.gotoAndStop("go")
не помогло), всё тоже самое
0
tihomir
1 / 1 / 1
Регистрация: 25.02.2014
Сообщений: 39
28.03.2014, 10:49  [ТС] #7
Как быть то?)
0
Theoryofgames
253 / 237 / 50
Регистрация: 20.12.2011
Сообщений: 707
28.03.2014, 14:58 #8
проект свой выложите
0
tihomir
1 / 1 / 1
Регистрация: 25.02.2014
Сообщений: 39
28.03.2014, 15:14  [ТС] #9
Вот как персонаж движется сейчас. Он постоянно проигрывает движение.
0
Вложения
Тип файла: rar Движение персонажа.rar (663.2 Кб, 1 просмотров)
Theoryofgames
253 / 237 / 50
Регистрация: 20.12.2011
Сообщений: 707
29.03.2014, 11:23 #10
Лучший ответ Сообщение было отмечено tihomir как решение

Решение

В самом волке нужно было из первого и второго кадра убрать код.
с самого начала вместо gotoAndPlay("st") - gotoAndStop("st").

И учитесь сразу писать в классах.
0
Вложения
Тип файла: rar Движение персонажа.rar (662.5 Кб, 3 просмотров)
tihomir
1 / 1 / 1
Регистрация: 25.02.2014
Сообщений: 39
29.03.2014, 12:48  [ТС] #11
Спасибо большое. помогло)
0
29.03.2014, 12:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 12:48

Индикатор здоровья персонажа
Как сделать индикатор здоровья персонажа?думаю,либо в процентном составе либо...

Отображение движения персонажа
Когда на экране показывается какое то действие персонажа, например двигается...

SDL и задержка движения персонажа при зажатии клавиши
Всем доброго времени суток. Изучаю библиотеку SDL и возникла такая проблема:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru