Просмотр полной версии : Как программным путем сделать тень для мяча ?
Andriano606
03.03.2014, 23:01
Обучаюсь по книге Гурского, застрял на уроке 4 нужно сделать тень для мяча движущего по параболе .
Дана формула движения мяча с угасанием после каждого отскока, а как сделать тень для мяча не ясно.
Помогите пожалуйста .
Что-то меня смущает русская фамилия автора книги.
Учите ас3 лучше, серьезно. Ас2 устарел сильно.
Какая тень вас интересует? Можно сделать фильтром, к примеру. Можно сделать размытой копией мяча, движущейся по горизонтали на уровне пола и меняющей размеры в зависимости от высоты положения мяча.
Покажите код мяча, для начала. И опишите подробнее задачу.
Добавлено через 3 минуты
P.S. Можете еще по такому примеру поучиться :) http://www.flasher.ru/forum/showpost.php?p=1104975&postcount=11
Гурский VS Мук - тема для холивара....
Я учился по Гурскому. Подача материала от Мука - более чем неудобно. Мне.
Тень от мяча.... точно также, только клип не двигайте по Y и задайте ему блюр фильтр...
Andriano606
04.03.2014, 10:52
Мне нужна тень движущейся по горизонтали на уровне пола и меняющей размеры в зависимости от высоты положения мяча, но как менять размеры я знаю, мне нужна сама траектория мяча.
Вот программа самого мяча
var X=-50;
var Y=170;
var X0=X;
var Y0=Y;
var t=0;
var a=2;
var Vy=0;
var Vx=6;
var newV=null;
var newX=null;
var newY=null;
_root.onEnterFrame = function(){
if (ball._y>350){
Vy=-newV*0.85;
Vx=0.85*Vx;
t=0.6;
X0=newX;
Y0=newY;}
ball._x=X0+Vx*t;
ball._y=Y0+Vy*t+a*t*t/2;
newV=Vy+a*t;
newY=ball._y;
newX=ball._x;
countor._x=ball._x;
countor._y=ball._y;
if (newY==Y0){countor._rotation+=0;} else
{countor._rotation+=4;}
t+=0.6;}
Zebestov
04.03.2014, 12:02
Andriano606, код следует оформлять соответствующими тегами (кнопка AS в панели редактора сообщений)
Тогда координата тени по икс, всегда будет равна координате мяча по икс, ведь тень всегда находится строго вертикально под мячом (в вашем примере).
shadow._x = ball._x;
Andriano606
04.03.2014, 18:07
тень должна быть как бы объемная, вот пример на мяче который прыгает на месте
Untitled-2.swf
Тогда удаляйте тень на расстояние от мяча до пола, под заданным заранее углом.
ball.swf
var grav:Number=2;
var speedY:Number=0;
var bounce:Number=-30;
//граница пола по игрек
var floorY:Number=280;
//угол под которым уходит тень (0 градусов - это вправо, 180 или -180 - это влево)
//угол -20
var ang:Number = -20 * Math.PI/180;
shadow_mc._y = floorY;
_root.onEnterFrame=function()
{
speedY+=grav;
ball_mc._y+=speedY;
if(ball_mc._y >= floorY)
{
ball_mc._y = floorY;
speedY = bounce;
}
//--------- move shadow
//узнаём насколько мяч выше от пола
var dist:Number = ball_mc._y - floorY;
//перемещаем тень на это расстояние, под заданным выше углом
shadow_mc._x = ball_mc._x - Math.cos(ang)*dist;
shadow_mc._y = floorY - Math.sin(ang)*dist;
shadow_mc._alpha=100-Math.abs(dist/3);
}
Andriano606
06.03.2014, 01:29
Всем спасибо !
Я наконец разобрался (методом ошибок и проб). Вот код если кому нибудь понадобиться
var X = -50;
var Y = 170;
var X0 = X;
var Y0 = Y;
var t = 0;
var a = 2;
var Vy = 0;
var Vx = 6;
var newV = null;
var newX = null;
var newY = null;
var T = null;
_root.onEnterFrame = function() {
if (ball._y>350) {
Vy = -newV*0.85;
Vx = 0.85*Vx;
t = 0.6;
X0 = newX;
Y0 = newY;
}
ball._x = X0+Vx*t;
ball._y = Y0+Vy*t+a*t*t/2;
newV = Vy+a*t;
newY = ball._y;
newX = ball._x;
countor._x = ball._x;
countor._y = ball._y;
shade._x = -(ball._y+30)+389+ball._x;
shade._y =(ball._y+10)+8;
shade._xscale =(450-T);
shade._yscale =(450-T);
T =(ball._y);
if (newY == Y0) {
countor._rotation += 0;
} else {
countor._rotation += 4;
}
t += 0.6;
};
Получилось коряво, но получилось), вот результатUntitled-4.swf
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.