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

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

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

Регистрация: Jan 2010
Сообщений: 187
Question Прыжок зелёного кубика

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

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

Код AS3:
package {
 
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
 
	public class Main extends MovieClip {
 
		public var hero:MovieClip;
		public var jump:int= 0;
 
 
		public function Main() {
			stage.addEventListener(MouseEvent.MOUSE_DOWN, KeyMouseOn);
			stage.addEventListener(MouseEvent.MOUSE_UP, KeyMouseOff);
 
		}
 
		private function KeyMouseOn(evt:MouseEvent):void {
			jump +=1;
			trace(jump);
		}
		private function KeyMouseOff(evt:MouseEvent):void {
			hero.y -= jump;
			hero.y += jump;
			jump = 0;			
		}
	}
}
Вопрос номер 1: когда я нажимаю кнопку - значение jump увеличивается тольно на 1 и сколько бы я не удерживал кнопку мыши - это значение не растёт, как задумано.
Видимо, событие срабатывает только единоразово при клике. Как мне подправить, чтобы это событие увеличивало счётчик jump до тех пор, пока я держу клавишу мыши зажатой?

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

И вопрос 3: В правом верхнем углу экрана у меня динамическое поле, в котором я хотел бы отображать динамически значение jump. (см. вложение)
В AS2 этому полю можно присвоить Variable в специальном окне и всё работало, а здесь это строка Variable не активна. Как такое реализуется в AS3 ?
Вложения
Тип файла: zip 07.zip (6.0 Кб, 58 просмотров)

Старый 25.05.2010, 16:34
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Идея проста - нажимаем на кнопку, подписываем ее на enterFrame, при отпускании убиваем enterFrame. Можно таймером, вместо enterFrame.
__________________
тут я

Старый 25.05.2010, 16:35
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 3  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
Цитата:
Вопрос номер 1: когда я нажимаю кнопку - значение jump увеличивается тольно на 1 и сколько бы я не удерживал кнопку мыши - это значение не растёт, как задумано.
Видимо, событие срабатывает только единоразово при клике. Как мне подправить, чтобы это событие увеличивало счётчик jump до тех пор, пока я держу клавишу мыши зажатой?
Да, событие вызывается 1 раз. Вам нужно на нажатие мышки запускать таймер. И в обработчике таймера увеличивать значение jump.

Старый 25.05.2010, 16:41
bars80080 вне форума Посмотреть профиль Отправить личное сообщение для bars80080 Найти все сообщения от bars80080
  № 4  
Ответить с цитированием
bars80080

Регистрация: Jun 2009
Сообщений: 31
Цитата:
Как мне подправить, чтобы это событие увеличивало счётчик jump до тех пор, пока я держу клавишу мыши зажатой?
ответ прост: задаём таймер, а при отпускании меряем сколько прошло времени

Цитата:
Тоесть, я хочу, чтобы это было заметно глазом, а сейчас у меня всё это происходит моментально и я не вижу, что мой кубик вообще куда-то прыгал
а эта вещь и подавно делается таймером Timer() или onEnterFrame
ты же когда рисуешь анимацию на временной шкале указываешь положение объекта в кадрах? это и есть указание положения в определённый момент времени.
соответственно, при отпускании кнопки рассчитываем траекторию (точки), запускаем таймер, либо по событию enterFrame изменяем положение кубика

Цитата:
В AS2 этому полю можно присвоить Variable в специальном окне и всё работало, а здесь это строка Variable не активна. Как такое реализуется в AS3 ?
также. только здесь поле представляется не переменной, а классом. чуть ниже этого блокированного поля есть галочка - экспортировать в AS3. назначаешь имя, можно указать целевой класс, либо не указывать - тогда он будет сгенерирован автоматически. остаётся в коде создать объект
var myTxtField = new ТвоёИмяКласса(); // один раз
myTxtField.text = jump; // на каждом этапе изменения координат
всё

Старый 25.05.2010, 16:49
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 5  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
Цитата:
Вопрос 2: Когда я отпускаю клавишу мыши я хотел бы, чтобы кубик подпрыгивал на высоту, которую насчитал счётчик jump, но не скачком, а плавно анимировано. И потом возвращался бы на первоначальное место.
tweenLite в помощь. Где-то в соседней теме давали ссылку на сайт.

Старый 25.05.2010, 16:54
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Да зачем с TweenLite. Достаточно простого знания физики. А именно, что на кубик влияет две силы - импульс-скорость (так сказать дельтаПеремещения/кадр) и гравитация. То есть при полете нужно скорость постоянно уменьшать, а как она станет отрицательной - кубик потянет вниз. И все это будет симпатично и красиво. И плавно.

Добавлено через 6 минут
Ну и плюс коэфициент эластичности. Хотя какая эластичность у кубика?
__________________
тут я

Старый 25.05.2010, 17:10
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
В Instance Name вписываешь myTxtField и сразу используешь, как и в AS2.
myTxtField.text = jump; // на каждом этапе изменения координат.
Я бы честно посчитал коэффициенты параболы, с физикой чуть не точно высота выйдет. Хотя метод Эйлера - это наше всё.

Старый 25.05.2010, 17:28
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 8  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
Цитата:
Да зачем с TweenLite. Достаточно простого знания физики.
Да можно проще. Достаточно простейшей физической модели с прыгающим зеленым кубиком и датчиками, которые определят положение кубика. Ну и сделать передачу данных в as3 по какому-нибудь элементарному последовательному интерфейсу.

Вы свое будете писать сколько? А с tweenLite-ом ровно столько, сколько нужно времени на написание одной строки кода. И все тоже будет красиво и плавно.

Старый 25.05.2010, 17:32
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Э, как вы сложно загнули - с интерфейсами-то. Я сделаю все в одном классе строчек на 20, если не меньше. Тем более, для новичка лучше все сделать самому, ибо это хорошая практика, чем использовать уже готовый класс - потом просто глянуть, хлопнуть себя по лбу, мол, чего я мучился. Зато что-то уже уметь и знать.
__________________
тут я

Старый 25.05.2010, 17:35
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 10  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
КорДум А зачем заново изобретать велосипед? Повторное использование кода, это конечно хорошо. Но готовая библиотека всегда лучше. Потому что она дешевле.

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

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

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


 


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


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