![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2014
Сообщений: 25
|
Имеем баскетбольный мяч и пол. Мяч падает на пол под силой гравитации и отталкивается. Со временем процесс затухает и мяч лежит на полу.
1) Если сам мяч(мувиклип) не имеет анимации - код ниже подходит для описания "модели" поведения мяча. 2) Если же мяч имеет классическую анимацию движения сделанную в Flash CS5 код ниже не подходит для описания "модели" поведения мяча. Анимация - мяч разворачивается относительно центра каждый раз на 90 градусов, простоя анимация вращения 2д мяча. В первом случае точка ударения символа(мяча) об пол всегда будет совпадать с контуром мяча. \ Во втором случае фактическая точка рисунка мяча не всегда будет ударятся об пол. Это связано с тем что сам символ-мяча(мувиклип) как экземпляр объекта - квадратный, и при анимации этот экземпляр будет независимо крутится, и часто касаться пола не фактическим контуром мяча, а невидимым углом экземпляра объекта мяч. 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 Каким самым простым и прямым методом можно обойти данную проблему? Если можно - несколько вариантов. hitTestPoint ? Или можно как-то вместить анимированый экземпляр объекта мяч в контейнер который не будет поворачиваться (поворот прямоугольной области) вместе с экземпляр объекта мяч. ? Спс за внимание |
|
|||||
|
Регистрация: Feb 2014
Сообщений: 25
|
Извините за создание этой темы, нашел проблему...
Значение b.height постоянно меняется при анимации, не обращал на это внимание. Поэтому создал новую переменную, которая при инициализации объекта, сохраняет в себе высоту экземпляра объекта, которая и будет использоваться в дальнейшем. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|