PDA

Просмотр полной версии : Помогите с action script !


MAMMOTH
02.06.2007, 23:02
Люди добрые помогите кто может.... я по образованию художник... а нас пытаются в универе учить программировать. В обшем очень надо помогите...
Задача такова два шара находятся на противоположных сторонах поля (правый нижний и левый верхний углы) далее они должны двигаться на встречу друг другу в центр поля меняя прозрачность от 10% до 100... соприкоснувшись они должны уехать назад в свой угол снова понижая прозрачность до 10%. вся анимация есессно должна быть кодом
Не смейтесь пожалуйста! очень надо ! помогите плиз буду по гроб жизни благодарен. и если не влом откоментируйте код !
ОЧЕНЬ ПРОШУ ПОМОГИТЕ !

BigDan
02.06.2007, 23:32
в setInterval() или onEnterFrame() меняешь свойства _x, _y, _alpha до определённого предела.
з.ы.не обсирайте меня пожалуйста
здесь так не выражаются

D12
03.06.2007, 03:30
var r:Number = 30;
var angle:Number = 45;//угол под которым и происходит движение
var Go:Number = 3;
var rad:Number = Math.PI/180;
var control:Number = 1;
this.createEmptyMovieClip("circle", 1);
with (circle) {
createEmptyMovieClip("circle_mc", 1);
circle_mc.lineStyle(0, 0x000000);
circle_mc.beginFill(0x6600FF);
drawCircle(circle_mc, r, r, r);
}
function drawCircle(mc:MovieClip, x:Number, y:Number, r:Number):Void {
mc.moveTo(x+r, y);
mc.curveTo(r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
mc.curveTo(Math.tan(Math.PI/8)*r+x, r+y, x, r+y);
mc.curveTo(-Math.tan(Math.PI/8)*r+x, r+y, -Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
mc.curveTo(-r+x, Math.tan(Math.PI/8)*r+y, -r+x, y);
mc.curveTo(-r+x, -Math.tan(Math.PI/8)*r+y, -Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
mc.curveTo(-Math.tan(Math.PI/8)*r+x, -r+y, x, -r+y);
mc.curveTo(Math.tan(Math.PI/8)*r+x, -r+y, Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
mc.curveTo(r+x, -Math.tan(Math.PI/8)*r+y, r+x, y);
}
//
circle.circle_mc.onEnterFrame = function() {
if (control == 1) {
this._x += Math.cos(angle*rad)*Go;
this._y += Math.sin(angle*rad)*Go;
//
if (this._x>=(Stage.width/2)-((r*2)-8)) {
control = -control;
}
}
//
if (control == -1) {
this._x -= Math.cos(angle*rad)*Go;
this._y -= Math.sin(angle*rad)*Go;
//
if (this._x<=0) {
control = -control;
}
}
};
//////
//////
//////
//////
//////
//////
this.createEmptyMovieClip("circle1", 2);
with (circle1) {
createEmptyMovieClip("circle_mc", 1);
circle_mc.lineStyle(0, 0x000000);
circle_mc.beginFill(0x6600FF);
drawCircle(circle_mc, r, r, r);
}
function drawCircle(mc:MovieClip, x:Number, y:Number, r:Number):Void {
mc.moveTo(x+r, y);
mc.curveTo(r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
mc.curveTo(Math.tan(Math.PI/8)*r+x, r+y, x, r+y);
mc.curveTo(-Math.tan(Math.PI/8)*r+x, r+y, -Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
mc.curveTo(-r+x, Math.tan(Math.PI/8)*r+y, -r+x, y);
mc.curveTo(-r+x, -Math.tan(Math.PI/8)*r+y, -Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
mc.curveTo(-Math.tan(Math.PI/8)*r+x, -r+y, x, -r+y);
mc.curveTo(Math.tan(Math.PI/8)*r+x, -r+y, Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
mc.curveTo(r+x, -Math.tan(Math.PI/8)*r+y, r+x, y);
}
//
circle1.circle_mc.onEnterFrame = function() {
if (control == 1) {
this._x += Math.cos(angle*rad)*Go;
this._y += Math.sin(angle*rad)*Go;
//
if (this._x>=(Stage.width/2)-((r*2)-8)) {
control = -control;
}
}
//
if (control == -1) {
this._x -= Math.cos(angle*rad)*Go;
this._y -= Math.sin(angle*rad)*Go;
//
if (this._x<=0) {
control = -control;
}
}
};
circle1._x = Stage.width;
circle1._y = Stage.height;
circle1._rotation = 180;

для кубического поля =) ну хотябы 550*550 :)

тихий ужас :wacko: :D

если пузыри не в кубическом поле то нужно подобрать угол движение "angle" под прямоугольник, если силен в матиматике то можно сделать програмно, насчет альфы сделать можно но тут все хитрей ведь неизвесны границы поля а если делать под универсальность нужно в проценты переводить что бы равномерно было

D12
03.06.2007, 03:31
да и круг толком , нормальный , я програмно рисовать неумею =)

MAMMOTH
03.06.2007, 11:36
.Огромное спасибо.... Вот только программа сложновата. я сам тут за ночь кое что своял.... правда работает не до конца ... назрел другой вопрос если делать это не такими сложными математическими функциями к примеру чтобы шарик двигался от точки х1 до точки х2 с шагом n нну dx=(x2-x1)/n; типа того...
var xb1=0;
var yb1=0;
var xb2=180;
var yb2=180;
var n = 50;
var dxb=(xb2-xb1)/n;
var dyb=(yb2-yb1)/n;
var x=xb1;
var y=yb1;
_root.ball._x =xb1;
_root.ball._y =yb1;
// MovieClip ball;
_root.onEnterFrame = function ()
{
x+=dxb;
y+=dyb;
_root.ball._x =x;
_root.ball._y =y;
}
все очень примитивно но оно и должно быть примитивнее..... движение идет вот только ни как не могу остановить шарик по условию.. к примеру поле 400 на 400 шарик радиусом 20 чтобы доходя до точки 180 180 начинал движение назад ну второй соответсвенно на 220 220 .. тогда можно будет точно привязать альфу по тому же принципу... почемуто ни как не могу поставить условие по IF пробовал вариант через switch (step) но чтото я там запутался.
помогите плиз все должно быть как то проще... :( вот только не получается...

ЗЫ на унивверсальность можно забить.... мне бы так разобраться. Задачка то простая... вроде ... должна быть... у меня теперь вся проблема шарик от определенной точки назад заставить ехать.

iNils
03.06.2007, 16:03
MAMMOTH, для оформления своего кода, надо использовать теги .

Reon
03.06.2007, 16:15
Предлагаю заюзать программную анимация с помощью класса Tween, поймать момент столкновения и пустить твином с параметром Back, как идея? =)