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

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

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

Регистрация: Feb 2014
Сообщений: 25
По умолчанию Анимация символа внутри статического контейнера

Имеем баскетбольный мяч и пол. Мяч падает на пол под силой гравитации и отталкивается. Со временем процесс затухает и мяч лежит на полу.

1) Если сам мяч(мувиклип) не имеет анимации - код ниже подходит для описания "модели" поведения мяча.

2) Если же мяч имеет классическую анимацию движения сделанную в Flash CS5 код ниже не подходит для описания "модели" поведения мяча. Анимация - мяч разворачивается относительно центра каждый раз на 90 градусов, простоя анимация вращения 2д мяча.

В первом случае точка ударения символа(мяча) об пол всегда будет совпадать с контуром мяча. \

Во втором случае фактическая точка рисунка мяча не всегда будет ударятся об пол. Это связано с тем что сам символ-мяча(мувиклип) как экземпляр объекта - квадратный, и при анимации этот экземпляр будет независимо крутится, и часто касаться пола не фактическим контуром мяча, а невидимым углом экземпляра объекта мяч.

Код AS3:
import flash.display.MovieClip;
import flash.display.Sprite;
 
//Начальная скорость по Y, гравитация. Мяч будет падать вертикально и отталкиватся с затуханием
var speedY = 0;
var grav = 3;
 
// Рисуем стенки и пол
var line:Sprite = new Sprite();
line.graphics.lineStyle(1,0x000000);
line.graphics.moveTo(10,360);
line.graphics.lineTo(500,360);
addChild(line);
 
var b:Ball=new Ball();// Наш мувиклип, мяч. Имеет свою анимацию
b.x = 100;
b.y = 100;
addChild(b);
 
addEventListener(Event.ENTER_FRAME, gravity);
 
function gravity(e:Event):void
{
	speedY +=  grav;
	b.y +=  speedY;
 
	//Если мяч упал на пол - отталкивается вверх, со временем остановится на полу
	if (b.y > 360 - b.height / 2)
	{
		b.y = 360 - b.height / 2;
		speedY=speedY*(-1);
		speedY +=  grav;
	}
 
	// Если скорость мяча равно 0 и он на полу - прекращаем анимацию мяча
	if (speedY == 0 && (b.y == 360 - b.height/2))
	{
		b.stop();
	}
}
Вот пример Ball_grav.swf - мяч с анимацией, Ball_grav2.swf - мяч без анимации
Ball_grav.swf

Ball_grav2.swf

Каким самым простым и прямым методом можно обойти данную проблему? Если можно - несколько вариантов.
hitTestPoint ?
Или можно как-то вместить анимированый экземпляр объекта мяч в контейнер который не будет поворачиваться (поворот прямоугольной области) вместе с экземпляр объекта мяч. ?
Спс за внимание

Старый 05.02.2014, 22:20
Wizlight вне форума Посмотреть профиль Отправить личное сообщение для Wizlight Найти все сообщения от Wizlight
  № 2  
Ответить с цитированием
Wizlight

Регистрация: Feb 2014
Сообщений: 25
Извините за создание этой темы, нашел проблему...
Цитата:
Код AS3:
(b.y > 360 - b.height / 2)
Значение b.height постоянно меняется при анимации, не обращал на это внимание.
Поэтому создал новую переменную, которая при инициализации объекта, сохраняет в себе высоту экземпляра объекта, которая и будет использоваться в дальнейшем.

Fiziks.swf   (2.1 Кб)
Вложения
Тип файла: swf Fiziks.swf (2.1 Кб, 77 просмотров)

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

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

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


 


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


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