基本的には、ランダムに生成されたキャラクターが一連のウェイポイントをたどって、ステージの壁などに足を踏み入れることなく、必要な場所に到達できるようにしようとしています。
ポイントの配列をエンジンからキャラクターの followPath 関数に渡すことでこれを行っています (これはループになりますが、まだその段階には達していません)。
この followPath 関数の一部は、キャラクターがウェイポイントに十分に近づいたことを検出し、次のウェイポイントに移動することです。これを行うには、現在選択されているウェイポイントとキャラクターの現在の位置を表すポイントとの間の距離を計算するために Point.distance(p1,p2) を使用しようとしています。
これは、私がこの問題に直面しているところです。キャラクターの現在の (x,y) ポイント位置を更新しようとするのは難しいことがわかっています。ドキュメントに記載されているにもかかわらず、何らかの理由で Point.setTo 関数が存在しないようです。その結果、私は使用しています
currentPos.x = x;
currentPos.y = y;
//update current position point x and y
これを試してみると、1009 エラーが発生します。
これまでの私の完全な Character クラスは次のとおりです。
package {
import flash.display.MovieClip;
import flash.geom.Point;
public class Character extends MovieClip {
public var charType:String;
private var charList:Array = ["oldguy","cloudhead","tvhead","fatguy","speakerhead"];
private var numChars:int = charList.length;
private var wpIndex:int = 0;
private var waypoint:Point;
private var currentPos:Point;
private var wpDist:Number;
private var moveSpeed:Number = 5;
//frame labels we will need: charType+["_walkingfront", "_walkingside", "_walkingback", "_touchon", "_touchonreaction", "_sitting"/"_idle", "_reaction1", "_reaction2", "_reaction3", "_reaction4"]
public function Character() {
trace("new character:");
charType = charList[Math.floor(Math.random()*(numChars))];
//chooses a random character type based on a random number from 0-'numchars'
trace("char type: " + charType);
gotoAndStop(charType+"_walkingfront");
x = 600;
y = 240;
}
public function followPath(path:Array):void {
if(wpIndex > path.length){ //if the path has been finished
gotoAndStop(charType+"_sitting"); //sit down
return;//quit
}
waypoint = path[wpIndex];
//choose the selected waypoint
currentPos.x = x;
currentPos.y = y;
//update current position point x and y
wpDist = Point.distance(currentPos,waypoint);
//calculate distance
if(wpDist < 3){ //if the character is close enough to the waypoint
wpIndex++; //go to the next waypoint
return; //stop for now
}
moveTo(waypoint);
}
public function moveTo(wp:Point):void {
if(wp.x > currentPos.x){
currentPos.x += moveSpeed;
} else if(wp.x < currentPos.x){
currentPos.x -= moveSpeed;
}
if(wp.y > currentPos.y){
currentPos.y += moveSpeed;
} else if(wp.y < currentPos.y){
currentPos.y -= moveSpeed;
}
}
}
}
なぜこれが起こっているのか誰にも説明できますか?この段階で克服できなかった障害です。
ファントム Point.setTo メソッドを使用できない理由について、誰かが情報を提供できるかどうかも知りたいです。