問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:5 / 状態:解決済み / No:9 / ATOM
1 名前:ぽてと 日付:2010/04/12(月)20:30:45 ID:tMQTP/xCQsOU
「ベクトルを使ってみよう」を参考にして、キーボードでは動作させる事ができたのですが、
マウスでクリックした地点に、キャラクターを(等速で)移動させるにはどうすればよいでしょうか。
宜しくお願いします。
2 名前:1/2 日付:2010/04/15(木)13:07:07 ID:2iuB4losX8Zs
等速であればこんな感じでしょうか。


// パラメータ
var SPEED_MAX = 10;// 最高速度

// 背景
var bg : Shape = new Shape();
bg.graphics.beginFill(0xFFC0C0);
bg.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
bg.graphics.endFill();
addChild(bg);

// プレイヤー
var player : Sprite = new Sprite();
player.graphics.beginFill(0x4040F0);
player.graphics.drawRect(-20,-20,40,40);
player.graphics.endFill();
addChild(player);


// 位置
var pos : Point = new Point(100,100);
// 速度
var spd : Point = new Point(0,0);
// ターゲット
var target : Point = new Point(300,300);

// クリックされたらターゲットをマウスの位置に更新
stage.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){
target.x = stage.mouseX;
target.y = stage.mouseY;

});
3 名前:2/2 日付:2010/04/15(木)13:07:28 ID:2iuB4losX8Zs
// 毎フレーム処理
addEventListener(Event.ENTER_FRAME,function(e:Event){

// 座標からターゲットまでのベクトル
var v : Point = target.subtract(pos);

// ターゲットまでの距離
var d : Number = v.length;

// 距離が最高速度を超えるかチェック
if(d > SPEED_MAX)d = SPEED_MAX;

// 正規化してから拡大
v.normalize(d);

// 速度に反映
spd.x = v.x;
spd.y = v.y;

// 座標に速度を加算
pos = pos.add(spd);

// 座標を player に反映
player.x = pos.x;
player.y = pos.y;
});
4 名前:ぽてと 日付:2010/04/16(金)20:29:19 ID:tMQTP/xCQsOU
助かりました
ありがとうございます!
5 名前:状態変更 日付:2010/04/16(金)20:29:43 ID:tMQTP/xCQsOU
この質問の状態を『解決』に変更しました。
このスレッドについて
質問の状態 :
解決済み
投稿開始日 :
2010/04/12(月)20:30:45
投稿終了日 :
2010/04/16(金)20:29:43
投稿者 :
ぽてと
レス総数 :
5
スレッド番号 :
9
MondoCollectionSystem ver.0x00020000 by Hakuhin