Форум 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)
-   -   AS2.0 Вопрос по силе притяжения (http://www.flasher.ru/forum/showthread.php?t=208125)

Ecks 05.06.2014 07:20

AS2.0 Вопрос по силе притяжения
 
Возможно ли, и как сделать если да данное:

Имеется:
Пол (по которому игрок бегает и прыгает).
Участок в полу (ограниченный отрезок).

Вопрос:
Стоя на данном отрезке при нажатии кнопки (допустим ctrl) перевернуть игрока вниз головой под пол, ну то есть "отразить" с другой стороны пола так, что бы притяжение работало, но уже сверху.

Если да, то какой скрипт писать. Спасибо.

Добавлено через 8 часов 26 минут
http://3.firepic.org/3/images/2014-0...uqus5cvnga.png

Sergey_A 05.06.2014 18:24

Задача вполне решаемая, и довольно простая, ИМХО.
1. На месте нужного отрезка рисуете невидимый прямоугольник - по размеру вашего героя.
2. Пишете обработчик события "нажатие на кнопку" (не уверен, что получиться именно с ctrl, но с другими получится наверняка).
3. В обработчике проверяете, пересекается ли ваш герой с прямоугольником. Если да - просто меняете мувик (изменяете координаты, поворачиваете на угол и др.), возможно, потребуется сделать два мувика и менять один на другой.
Все.
Если вам нужно что-то более конкретное, без имеющегося у вас кода помочь вряд ли возможно. Как там реализована эта "гравитация"?

Ecks 06.06.2014 05:31

На ином форуме дали подсказку изменения гравитации (сам додумался до поворота на 180) столкнулся с проблемой отсутствия прыжка в состоянии "реверса" (перевернутом), пытался исправить но добился лишь постоянного прыжка без остановки(то есть в AS2.0 как я понял нельзя задать клипу, так сказать, две физики одной масти. Или же можно, но ограничивать их жескими условиями?).

Цитата:

возможно, потребуется сделать два мувика и менять один на другой.
Если я правильно понял, то надо создать два клипа с игроком: один в нормальном состоянии, другой в реверсе. И для разных клипов создать разные гравитации для каждого? И менять их местами нажатием кнопки с присвоением новой координаты y, но при условии сохранения координаты x удаленного клипа?

Так же есть несколько вопросов, которые я задам когда решу проблему с реверсом и уже с примером получившегося кода

Sergey_A 06.06.2014 10:56

Еще раз - как гравитация у вас реализована? Если по уму, то должно быть достаточно ввести в формулы расчетов некий коэффициент, равный -1, или вообще один раз поменять знак у одной / нескольких величин, чтобы "прыгал" и "падал" ваш герой в противоположном направлении. Возможно, такой коэффициент в формулах даже есть уже. А второй мувик мог бы понадобиться, если бы вам не понравился внешний вид героя, перевернутого на 180 градусов. Но если гравитация реализована неэффективно, тогда да - придется для "перевернутого" героя все заново писать.

Ecks 06.06.2014 11:23

Код AS1/AS2:

onClipEvent (load) {
        var gravity = 0.3; //Гравитация
        var vspeed = 0; //Вертикальная скорость
}
onClipEvent (enterFrame) {
 
//Событие столкновения с полом и остановка
//if (_root.ground.hitTest(_x, _y, true))        {
                //_y -= gravity;
                //vspeed -= vspeed;
        //}
        _y+=vspeed;
 
        vspeed+=gravity
}


Sergey_A 06.06.2014 14:57

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

Вот простой пример реализации (весь код пишется в первом кадре временной шкалы, на сцене - два мувика - ground - земля, и hero - персонаж):
Код AS1/AS2:

var jamp_force = 15;
var gravity = 1;
var koef_povorot = -1;
var timer_pryg;
var jamp_force_real = jamp_force;
var is_pryzhok = false;
 
function povorot() {
        hero._rotation+=180;
        hero._y+=ground._height * koef_povorot;
}
 
function pryzhok() {
        hero._y+=jamp_force_real * koef_povorot;
        jamp_force_real-=gravity;
        if(hero.hitTest(ground)) {
                clearInterval(timer_pryg);
                jamp_force_real = jamp_force;
                is_pryzhok = !is_pryzhok;
                }
}
 
var keyListener:Object = new Object();
 
keyListener.onKeyDown = function() {
  if ((Key.isDown(Key.DOWN)) and (koef_povorot!=1)){
                  koef_povorot = 1;
                povorot();
        }
  if ((Key.isDown(Key.UP)) and (koef_povorot!=-1)) {
                  koef_povorot = -1;
                povorot();
        }
  if ((Key.isDown(Key.SPACE)) and (!is_pryzhok)){
          timer_pryg = setInterval(pryzhok,20);
          is_pryzhok = !is_pryzhok;
          }
}
Key.addListener(keyListener);

Поворот выполняется по нажатию стрелок "вверх" и "вниз", прыжок - кнопкой пробела, причем в любом положении. Защиту от дурака - типа прыжка с одновременным поворотом - придумайте сами.
И вместо строки (повернуть на 180 градусов):
Код AS1/AS2:

hero._rotation+=180;

можно написать (отразить сверху вниз):
Код AS1/AS2:

hero._yscale*=-1;

- зависит от того, что именно вам нужно.
povorot.swf   (1.1 Кб)

Ecks 06.06.2014 15:25

Ну какой знал такой и юзал. Не изучал новые способы. Огромное спасибо. Теперь придется учить новый :)

Sergey_A 06.06.2014 15:34

Упор не на том, что этот синтаксис устаревший, а на том, что он ГЛЮЧНЫЙ, неудобный. Если вы с первого раза напишете все без ошибок, то разницы не заметите, а если будет какая-нибудь досадная мелочь, то искать ее будет очень трудно и долго. Поэтому лучше бы выучить приведенный мною способ - тоже далеко не новый, непрофессиональный, но намного более удобный для написания кода.

Ecks 06.06.2014 15:37

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

Приведенный кусочек, кстати, это как раз обычная гравитация

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

Sergey_A 06.06.2014 15:57

1. Убедитесь, что вы создали файл именно для AS2.0 (в параметрах публикации).
2. Убедитесь, что на сцене есть 2 нужных мувика, и им назначены соответствующие имена.
3. Создавая мувик героя задавайте его точку регистрации снизу по центру.
Хотя, если в окне ошибок никакой информации нет... не знаю. А вы в чем пишете вообще?


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

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