Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.06.2014, 07:20
Ecks вне форума Посмотреть профиль Отправить личное сообщение для Ecks Найти все сообщения от Ecks
  № 1  
Ответить с цитированием
Ecks

Регистрация: Jun 2014
Сообщений: 8
По умолчанию AS2.0 Вопрос по силе притяжения

Возможно ли, и как сделать если да данное:

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

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

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

Добавлено через 8 часов 26 минут

Старый 05.06.2014, 18:24
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 2  
Ответить с цитированием
Sergey_A

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

Старый 06.06.2014, 05:31
Ecks вне форума Посмотреть профиль Отправить личное сообщение для Ecks Найти все сообщения от Ecks
  № 3  
Ответить с цитированием
Ecks

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

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

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


Последний раз редактировалось Ecks; 06.06.2014 в 06:06.
Старый 06.06.2014, 10:56
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 4  
Ответить с цитированием
Sergey_A

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

Старый 06.06.2014, 11:23
Ecks вне форума Посмотреть профиль Отправить личное сообщение для Ecks Найти все сообщения от Ecks
  № 5  
Ответить с цитированием
Ecks

Регистрация: Jun 2014
Сообщений: 8
Код 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
}


Последний раз редактировалось Ecks; 06.06.2014 в 12:35.
Старый 06.06.2014, 14:57
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 6  
Ответить с цитированием
Sergey_A

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

Вот простой пример реализации (весь код пишется в первом кадре временной шкалы, на сцене - два мувика - 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 Кб)
Вложения
Тип файла: swf povorot.swf (1.1 Кб, 87 просмотров)


Последний раз редактировалось Sergey_A; 06.06.2014 в 15:27.
Старый 06.06.2014, 15:25
Ecks вне форума Посмотреть профиль Отправить личное сообщение для Ecks Найти все сообщения от Ecks
  № 7  
Ответить с цитированием
Ecks

Регистрация: Jun 2014
Сообщений: 8
Ну какой знал такой и юзал. Не изучал новые способы. Огромное спасибо. Теперь придется учить новый

Старый 06.06.2014, 15:34
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 8  
Ответить с цитированием
Sergey_A

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

Старый 06.06.2014, 15:37
Ecks вне форума Посмотреть профиль Отправить личное сообщение для Ecks Найти все сообщения от Ecks
  № 9  
Ответить с цитированием
Ecks

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

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

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


Последний раз редактировалось Ecks; 06.06.2014 в 15:51.
Старый 06.06.2014, 15:57
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 10  
Ответить с цитированием
Sergey_A

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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