Я пытался создать бильярд и все застопорилось на одной проблеме - скорость по y (обозначена yy) постоянно равна нулю. Как я не пытался перестроить код выходила одна и та же фигня.... Опытным путем я обнаружил что проблема в классе мяча, в котором я описал торможение.

Код AS1/AS2:
package cod {
import flash.display.MovieClip;
import flash.events.*;
public class ball extends MovieClip {
public var xx:Number = 0;
public var yy:Number = 0;
private var a:Number = 0.1;
private var ang:Number;
public function ball() {
addEventListener(Event.ENTER_FRAME, torm);
}
public function torm(event:Event):void {
ang = Math.atan2(yy,xx);
if(xx>a ||xx<-a) {
xx -= Math.cos(ang)*a;
} else {
xx = 0;
}
if(yy>a||yy<-a) {
yy -= Math.sin(ang)*a;
} else {
yy = 0;
}
}
}
}
Дело в том, что в процессе выполнения кода yy приравнивается к 0, после прошествия некоторого времени мяч двигается по оси Х со скоростью ХХ. По У не движеться.
Главный код

Код AS1/AS2:
package cod {
import flash.display.*;
import flash.events.*;
import flash.ui.Mouse;
public class first extends MovieClip {
public var ball1:ball = new ball;
public var stol1:stol = new stol;
public var ky1:ky = new ky;
public var kxx:Number = 0;
public var kyy:Number = 0;
public var mark:Number = 0;
public var angle:Number;
public var force:Number = 20;
public var t:Number = 1;
public var t1:Number;
public var t2:Number;
public var l:Number;
public var l2:Number;
public function first() {
addChild(stol1);
stol1.x = 0;
stol1.y = 0;
addChild(ball1);
ball1.x = 300;
ball1.y = 300;
addChild(ky1);
ky1.x = ball1.x;
ky1.y = ball1.y;
ky1.visible = false;
stage.addEventListener(Event.ENTER_FRAME, kiy);
stage.addEventListener(MouseEvent.CLICK , cli);
stage.addEventListener(Event.ENTER_FRAME, movee);
}
public function movee(event:Event):void {
if(!(ball1.xx==0)&&(ball1.yy==0)){
t=1;
while(t>0){
if(ball1.xx > 0) {
l = 770 - ball1.x - 7;
t1 = l/ball1.xx;
} else if(ball1.xx < 0) {
l = ball1.x - 37;
t1 = -l/ball1.xx;
} else if(ball1.xx == 0){
t1 = 2;
}
if(ball1.yy > 0) {
l2 = 400 - ball1.y - 7;
t2 = l2/ball1.yy;
} else if(ball1.yy < 0) {
l2 = ball1.y - 37;
t2 = -l2/ball1.yy;
} else if(ball1.yy == 0) {
t2 = 2;
}
if((t1<=t2)&&(t1<= t)) {
t-=t1;
ball1.x += t1*ball1.xx;
ball1.y += t1*ball1.yy;
ball1.xx = -ball1.xx;
} else if ((t2<=t1)&&(t2<=t)) {
t-=t2;
ball1.x += t2*ball1.xx;
ball1.y += t2*ball1.yy;
ball1.yy = -ball1.yy;
} else {
ball1.x += t*ball1.xx;
ball1.y += t*ball1.yy;
t = 0;
}
}
}
}
public function kiy(event:Event):void {
if(ball1.xx == 0 && ball1.yy == 0){
ky1.visible = true;
ky1.x = ball1.x;
ky1.y = ball1.y;
kxx = ball1.x - stage.mouseX;
kyy = ball1.y - stage.mouseY;
ky1.rotation = Math.atan2(kyy,kxx)* 360/(2*Math.PI);
mark = 1;
angle = Math.atan2(kyy,kxx);
} else {
ky1.visible = false;
mark = 0;
}
}
public function cli(event:MouseEvent):void {
if(mark==1) {
ball1.xx = -force*Math.cos(angle);
ball1.yy = -force*Math.sin(angle);
}
}
}
}
В нем я сделал обнаружение столкновений не в кадре, а за кадром, сначала просчитываются столкновения, затем уже прорабатывается движение.*
При стирании класса мяча скрипт вобще перестает работать, хотя в ммяче заложено лишь торможение..........
Подскажите как исправить ошибку, много раз было, что флеш глючил, но щас никакие меры(копироование, переименовка) непомагают =(((