【发布时间】:2012-03-06 08:15:28
【问题描述】:
好吧,所以我从昨晚开始就一直在努力解决这个问题。当我创建一个新对象(一个新单元)并将其绘制到屏幕上(Flash 在那里完成所有工作)时,它第一次放置的点被认为是它的原点。也就是说,getX 和 getY 将返回距该点的距离...
这是为什么呢?或者我该如何阻止?
function createUnit(health:int, attack:int, reach:int, speed:int, friendly:Boolean, type:String):Object {
var unit = new Object();
unit.cHealth = health;
unit.tHealth = health;
unit.uAttack = attack;
unit.uReach = reach;
unit.uSpeed = speed;
if (friendly) {
unit.xSpeed = -speed;
} else {
unit.xSpeed = speed;
}
unit.ySpeed = 0;
unit.isFriendly = friendly;
unit.unitType = type;
unit.updateUnit = function() {
if (unit.cHealth <= 0) {
deleteUnit(unit);
}
unit.moveUnit();
unit.findClosestUnit();
}
unit.getY = function():int {
return unit.shape.y;
}
unit.getX = function():int {
return unit.shape.x;
}
unit.moveUnit = function() {
unit.shape.x += unit.xSpeed;
unit.shape.y += unit.ySpeed;
}
unit.findClosestUnit = function() {
var dist:int = 0;
var closestDist:int = 0;
var closestUnit:Object = null;
var array:Array;
if (unit.isFriendly) {
array = eUnits;
} else {
array = fUnits;
}
if (array != null) {
var i:int = 0;
for (i; i < array.length; i++) {
var obj = array[i];
trace(this.shape.x);
dist = Math.sqrt(Math.pow(obj.getX() + unit.getX(), 2) + Math.pow(obj.getY() + unit.getY(), 2));
//trace(dist);
if (dist <= closestDist) {
closestDist = dist;
closestUnit = obj;
//basically the two lines below *will* start the unit's movement towards the nearest enemy.
//unit.ySpeed = (unit.getY() - closestUnit.getY())/unit.uSpeed;
//unit.xSpeed = (unit.getX() - closestUnit.getX())/unit.uSpeed;
}
if (dist <= unit.reach) {
unit.attackUnit(closestUnit);
}
}
}
}
unit.attackUnit = function(unit2:Object) {
unit2.cHealth -= unit.attack;
}
var spawnX:int;
var spawnY:int;
var color:uint;
if (friendly) {
spawnX = stage.stageWidth;
spawnY = stage.stageHeight / 2;
color = 0xFFCC00;
} else {
spawnX = 0;
spawnY = Math.random() * stage.stageHeight;
color = 0x682388;
}
var tShape:Shape = new Shape();
tShape.graphics.beginFill(color);
tShape.graphics.lineStyle(2, 2);
tShape.graphics.drawCircle(spawnX, spawnY, 10);
tShape.graphics.endFill();
stage.addChild(tShape);
unit.shape = tShape;
return unit;
}
【问题讨论】:
-
这就是我正在做的事情...我昨天开始使用 Flash 但有 Java 背景。
-
Java 和 AS3 一样是重 OOP,为什么要嵌套这样的函数。您的范围将非常难以管理。您可能想查看文档类以使自己开始正确的路线。没有冒犯,但这种编码风格是可怕的。因为您没有遵循标准的 OOP,所以我怀疑您会得到答案。并且您知道原点通常是包含您要查找的元素的边界框的左上角。
-
哦,我知道这很可怕,我开始它时没有研究 AS3 中的类功能。如果我错了,请纠正我,但是由于我将每个形状添加为舞台的子对象,因此它们的 (x,y) 坐标应该与 舞台的左上角相关,如您所说.
标签: flash actionscript-3 flash-builder flash-cs5