よろしく、昨夜からこれに苦労しています。新しいオブジェクト(新しいユニット)を作成し、それをスクリーンに描画すると(Flashはすべての作業を行います)、最初に配置されたポイントがその起点とみなされます。つまり、getXとgetYはその点からの距離を返します。Flashのシェイプの(x、y)座標を始点ではなくフレーム上の位置にするにはどうすればいいですか?
なぜですか?それとも私はこれをやめることができますか?
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;
}
[オブジェクト指向プログラミング](http://www.adobe.com/jp/products/catalog.html)を読んだことがありますか? – Marty
これは私がやっていることのようなものです...私は昨日フラッシュを始めましたが、Javaを背景にしています。 –
Javaは重いですOOPはAS3のようになぜこのような関数を入れ子にしますか?あなたの範囲は管理するのが非常に難しいでしょう。適切なルートを使い始めるために、ドキュメントクラスを調べることをお勧めします。犯罪はありませんが、このコーディングスタイルは恐ろしいものです。あなたが標準のOOPに従わなかったので、私はあなたが答えを得ることを疑う。原点は一般的に、探している要素を含む境界ボックスの左上隅です。 –