Форум 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=130215)

rockerror 21.09.2009 01:20

Еще про движение мувика
 
Уважаемые Дамы и Господа!
Еще один вопрос от новичка. Суть следующая:
На сцене лежит полупрозрачный мувик, который всем своим видом говорит нам, что он как бы дым. Назовем его smoke. Ширина сцены 1024, высота, соответственно 768. Задача: если курсор мыши переходит в левую часть экрана, то smoke должен сдвинуться вправо, если курсор уходит в правую часть экрана, соответственно, smoke уходит влево. то же про вверх и вниз...

Как придумал решить:

Код AS1/AS2:

var x1:Number = 250;
var x2:Number = 774;
var y1:Number = 150;
var y2:Number = 618;
var xc = _xmouse;
var yc = _ymouse;
if (xc<x1) {
        _root.smoke._x == -924;
};
if (xc>x2) {
        _root.smoke._x == -1124;
};

Ничего не происходит... И, кстати, хотелось бы сделать движение плавным... Где ошибка и как придать плавности? Подскажите плиз!!!

mooncar 21.09.2009 01:57

Главная ошибка в том, что у вас проверка условий не выполняется.
Вернее, выполняется один раз, при начальном исполнении кода.
А вам нужно ее выполнять непрерывно.
onEnterFrame или setInterval вам в помощь.
И приравнивание значения пишите через "=",
== - это сравнение.

Добавлено через 3 минуты
И почему у "x" такие дикие отрицательные значения? На _root это где-то далеко слева за областью сцены.
Возможно, вы имели ввиду:
Код AS1/AS2:

_root.smoke._x -= 924;


rockerror 21.09.2009 02:11

Благодарю!!! Хммм...
Теперь код выглядит:
Код AS1/AS2:

var x1:Number = 250;
var x2:Number = 774;
var y1:Number = 150;
var y2:Number = 618;
var xc = _xmouse;
var yc = _ymouse;
onEnterFrame = function(){
if (xc<x1) {
        _root.bg_2._x = -924;
};
if (xc>x2) {
        _root.bg_2._x = -1124;
};
};

Что касается "диких отрицательных значений" - все верно, просто smoke значительно больше размера сцены)))

Добавлено через 33 секунды
Все равно не работает(((

Добавлено через 2 минуты
Хммм... для меня бы могла стать решением проблемы возможность инвертировать движение мувика при использовании функции .startDrag()... Это возможно?

mooncar 21.09.2009 02:19

А при чем тут startDrag?
У вас опять беда - вы всего один раз проверяете значение мышкиных координат.
Попробуйте так:
Код AS1/AS2:

var x1:Number = 250;
var x2:Number = 774;
var y1:Number = 150;
var y2:Number = 618;
 
this.onEnterFrame = function(){
 if (_root._xmouse < x1) {
        _root.bg_2._x = -924;
 }
 if (_root._xmouse > x2) {
        _root.bg_2._x = -1124;
  }
};

PS. Почему вы так ужасно оформляете код с точки зрения синтаксиса AS?
Зачем точка с запятой в конце тела операций if? Откуда это?

rockerror 21.09.2009 02:21

Недавно я в as в общем...)) И вообще я дизайнер)))))

Добавлено через 3 минуты
Спасибо огромное!!! Заработало вродь))) Позвольте еще вопрос, как сделать перемещение мувика в новые координаты плавным?

mooncar 21.09.2009 02:25

Оно понятно, я тоже не флешер, но учебники-то и примеры по AS более или менее у нас одинаковые ведь были в массе? :)

rockerror 21.09.2009 02:26

=))) Хых)) У меня только справочник имеется))) Но очень хороший ;)

mooncar 21.09.2009 02:31

Настолько хороший, что в нем указывается, что в конце блока выражений {} нужно ставить точку с запятой? Не верьте ему.
Точка с запятой ставится в конце одного выражения:
Код AS1/AS2:

var x:Number = 7;
this.onEnterFrame = function() { ...... } ;

Тут не ставится:
Код AS1/AS2:

function myFunction() {
....
}
 
if (условие) {
...
}
else {
...
}


rockerror 21.09.2009 02:34

Позвольте еще вопрос, как сделать перемещение мувика в новые координаты плавным?

mooncar 21.09.2009 02:36

Цитата:

Сообщение от rockerror (Сообщение 852314)
как сделать перемещение мувика в новые координаты плавным?

Сделайте не единичную установку новых координат
Код AS1/AS2:

_root.bg_2._x = -924;

а приращение:
Код AS1/AS2:

_root.bg_2._x -= 10;

или знак другой, разберетесь... смысл понятен?

rockerror 21.09.2009 02:36

И еще... Допустимо-ли такое выражение:

Код AS1/AS2:

if (x1 < _root._xmouse < x2)


mooncar 21.09.2009 02:37

Когда выполнится условие, движение должно остановится.

rockerror 21.09.2009 02:37

Да, ясно, спасибо)))

mooncar 21.09.2009 02:44

Цитата:

Сообщение от rockerror (Сообщение 852322)
И еще... Допустимо-ли такое выражение:

Код AS1/AS2:

if (x1 < _root._xmouse < x2)


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

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

x1 = 5;
x2 = 10;
trace (x1 < 55 < x2);

trace всегда даст true, так как сперва сравнивается x1 < 55 и дает true, а потом
сравнивается true < x2 и дает true, так как true приводится к 1.

rockerror 21.09.2009 02:44

Стоп)) А какое условие должно выполниться?))) Чет у меня не тормозит(((

Добавлено через 1 минуту
Благодарю!!! С этим более-не менее ясно)))

Добавлено через 1 минуту
"не тормозит" - всмысле движение не останавливается...

mooncar 21.09.2009 02:49

Условие, которое я не написал, а вы не сообразили поставить :)
Условие достижения мувиком заданной точки _root.bg_2._x = -924;
Код AS1/AS2:

if (_root.bg_2._x >= -924) {
  //идет приращение
}

То есть у вас должны получится вложенные условия.

В общем, дерзайте, мне пора.

rockerror 21.09.2009 02:54

Такс)) Я запутался))) Сейчас код выглядит вот так:
Код AS1/AS2:

var x1:Number = 250;
var x2:Number = 774;
var y1:Number = 150;
var y2:Number = 618;
 
this.onEnterFrame = function(){
 if (_root._xmouse < x1) {
        _root.smoke._x += 5;
 }
 if (_root._xmouse > x2) {
        _root.smoke._x -= 5;
  }
 if (_root._ymouse < y1) {
        _root.smoke._y += 5;
 }
 if (_root._ymouse > y2) {
        _root.smoke._y -= 5;
  }
};

Если не сложно напишите на примере одного из ифов куда нужно вложить дополнительное условие... Никак не соображу...

mooncar 21.09.2009 02:58

У меня нет ваших мувиков, так что я могу ошибиться с направлением сравнения и откуда что у вас движется.

Код AS1/AS2:

if (_root._xmouse < x1) {
    if(_root.smoke._x <= -924 ) { //условие нужно ставить здесь
        _root.smoke._x += 5;
    }
 }


rockerror 21.09.2009 03:01

Все работает!!! Спасибо огромное!!!! Готов угостить спасителя пивом ;)))


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

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