2つの画像の座標が離れたら画像の倍率を下げる
Posted: 2011年9月19日(月) 19:45
よくある格闘ゲームのような、
2つの座標が一定より離れたら画像の倍率を下げ、一定より近づいたら倍率を上げる設定について質問です。
まず、画像の倍率を代入するBairitu変数を用意して、1.0以下にはならなく、2.0以上にはならないようにしました。
そして、2つの画像の位置座標と表示座標を用意して、
位置座標はPlayer1.XとPlayer2.Xで管理しており、-320以下にはならなく、960以上にはならないようにしました。(仮想フィールドの大きさです。2画面分。)
表示座標は、位置座標を代入した後に、64以下、576以上にはならないようにしました。(スクリーンの端から端-キャラ画像の半分です。)
ここまで設定したのですが、ここから倍率の計算につまずいています。
自分がやりたいのはまず、『プレイヤー2の座標-プレイヤー1の座標』を2人の距離として、(後から逆も作成)
最初は2人の距離が近く、倍率が2.0に設定してあり、
2人の距離が640(1画面分)以上になったら画像が小さくなっていき、
ぴったり1280(2画面分)になったところで倍率がちょうど1.0になるようにしたいのです。
そこで自分なりに考えた倍率の計算式なのですが…
2人の距離から640を引いた数値(1画面分以上の離れた距離)を作り、1.0からそれを割って、その数を2.0から引くという
2.0-(1.0/((Player2.X-Player1.X)-640))
を立てたのですが倍率はびくとも動いてくれません…ちなみにPlayer1.XもPlayer2.Xもdoubleで宣言しています。
スクロールの関数から貼らせていただきます…どう変えればよいでしょうか…
2つの座標が一定より離れたら画像の倍率を下げ、一定より近づいたら倍率を上げる設定について質問です。
まず、画像の倍率を代入するBairitu変数を用意して、1.0以下にはならなく、2.0以上にはならないようにしました。
そして、2つの画像の位置座標と表示座標を用意して、
位置座標はPlayer1.XとPlayer2.Xで管理しており、-320以下にはならなく、960以上にはならないようにしました。(仮想フィールドの大きさです。2画面分。)
表示座標は、位置座標を代入した後に、64以下、576以上にはならないようにしました。(スクリーンの端から端-キャラ画像の半分です。)
ここまで設定したのですが、ここから倍率の計算につまずいています。
自分がやりたいのはまず、『プレイヤー2の座標-プレイヤー1の座標』を2人の距離として、(後から逆も作成)
最初は2人の距離が近く、倍率が2.0に設定してあり、
2人の距離が640(1画面分)以上になったら画像が小さくなっていき、
ぴったり1280(2画面分)になったところで倍率がちょうど1.0になるようにしたいのです。
そこで自分なりに考えた倍率の計算式なのですが…
2人の距離から640を引いた数値(1画面分以上の離れた距離)を作り、1.0からそれを割って、その数を2.0から引くという
2.0-(1.0/((Player2.X-Player1.X)-640))
を立てたのですが倍率はびくとも動いてくれません…ちなみにPlayer1.XもPlayer2.Xもdoubleで宣言しています。
スクロールの関数から貼らせていただきます…どう変えればよいでしょうか…
void Scroll(){
//プレイヤー1のスクロール///////////////////////////////////////////////////////
//位置座標はフィールドを超えない
if(Player1.X < -320)Player1.X = -320;
if(Player1.X > 960) Player1.X = 960;
//表示座標に位置座標を代入
PlayerViewX = Player1.X ;
//表示座標は画面を超えない
if(PlayerViewX < 64)PlayerViewX = 64;
if(PlayerViewX > 576)PlayerViewX = 576;
///////////////////////////////////////////////////////////////
//プレイヤー2のスクロール///////////////////////////////////////////////////////
//位置座標はフィールドを超えない
if(Player2.X < -320)Player2.X = -320;
if(Player2.X > 960) Player2.X = 960;
//表示座標に位置座標を代入
PlayerViewX2 = Player2.X ;
//表示座標は画面を超えない
if(PlayerViewX2 < 64)PlayerViewX2 = 64;
if(PlayerViewX2 > 576)PlayerViewX2 = 576;
///////////////////////////////////////////////////////////////
}
void Zoom(){
if((Player2.X-Player1.X)>640)
2.0-(1.0/((Player2.X-Player1.X)-640));
if(Bairitu>=2.0)
Bairitu=2.0;
if(Bairitu<=1.0)
Bairitu=1.0;
}
void DrawGraph(){//画像描画
DrawRotaGraph( 329, 240, Bairitu, 0.0, Haikei1, TRUE );
DrawRotaGraph( PlayerViewX2, Player2.Y, Bairitu, 0.0, Player2.img, TRUE );//プレイヤー2の場所に画像
DrawRotaGraph( PlayerViewX, Player1.Y, Bairitu, 0.0, Player1.img, TRUE );//プレイヤー1の場所に画像
}