我是AS3的初学者,很抱歉,如果我有点不高兴。
我有两个简单的物体,星球和船只,我希望被引力吸引到彼此。当我尝试更改ship的x和y坐标时,它给出了错误1119:通过带有静态类型Class的引用访问可能未定义的属性x。
到目前为止我发现的唯一修复是确保它是一个对象的实例并将其导出为actionscript,这两个都没有用。
这是代码。唯一的错误是在尝试访问Ship.x和Ship.y的行上:
var yVelocity:Number = 0;
var xVelocity:Number = 0;
var gravityConstant:Number = 1;
var earthMass:Number = 5000;
var canPlay:Boolean = true;
function findDistance():Number {
var distance:Number = Math.pow(Math.pow(Ship.x - 250,2) + Math.pow(Ship.y - 175,2),.5);
return distance;
}
function findAcceleration():Number {
var distance:Number = findDistance();
return gravityConstant * earthMass / Math.pow(distance, 2);
}
function findAngle():Number {
var angle:Number = Math.atan((Ship.y - 175) / (Ship.x - 250));
return (180 / Math.PI) * angle; //converts from radians to degrees
}
function findXAcceleration():Number {
return findAcceleration() * Math.cos(findAngle());
}
function findYAcceleration():Number {
return findAcceleration() * Math.sin(findAngle());
}
function gravity():void {
yVelocity += findYAcceleration();
xVelocity += findXAcceleration();
Ship.x += xVelocity;
Ship.y += yVelocity;
}
do
{
gravity();
} while (canPlay == true);
答案 0 :(得分:1)
看起来你正在命名你的船名与“船”这个名称相同的名称,例如_ship。目前,当您输入Ship时,Flash会认为您正在引用该类,而不是它的实例化对象。所以..
var _ship:Ship = new Ship();
然后使用
_ship.x = ...
(提供您的Ship Class扩展displayObject)