レス数: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;
});
// パラメータ
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;
});
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 |