画像の移動
Posted: 2010年9月08日(水) 12:40
はじめまして、学校の課題で行き詰ったので投稿させていただきます。
課題の内容は「出発座標から目的座標まで画像を移動させる」というものです。
そこで以下のようなプログラムを作りました。
#include "DxLib.h"
#include <math.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
SetGraphMode(1366,768,32) ;
if(DxLib_Init()==-1) return -1 ;
SetDrawScreen(DX_SCREEN_BACK) ; //裏画面に描画
float sb,sbx,sby,bx,by,sx,sy; //初期座標と目的地の座標
float Ex,Ey,Esx,Esy; //移動時の座標
int agent; //人のグラフィック
int Cr; //線の色
double sokudo; //速度
double SB; //移動距離
float rad; //ラジアン
bx=600; //出発点x座標
by=300; //出発点y座標
sx=800; //目的地x座標
sy=600; //目的地y座標
sokudo=10; //人の移動速度
sbx=sx-bx; //それぞれのx座標の差
sby=by-sy; //それぞれのy座標の差
sb=sqrt(sbx*sbx+sby*sby); //出発点と目的地の距離
Esx=sbx/sb*sokudo; //x方向の移動速度
Esy=sby/sb*sokudo; //y方向の移動速度
agent=LoadGraph("char1.png"); //画像をメモリに読み込み
Cr=GetColor(255,255,255); //白の取得
SB=0; //初期値
Ex=0; //初期値
Ey=0; //初期値
rad=atan2(sbx,sby); //ラジアン
while(sb>SB) //SBがsbになるまで繰り返す
{
ClearDrawScreen(); //画面の初期化
Ex+=Esx; //EsxをExに代入
Ey+=Esy; //EsyをEyに代入
SB=sqrt(Ex*Ex+(Ey)*(Ey)); //移動距離の計算
DrawRotaGraph(bx+Ex,by-Ey,0.3f,rad,agent,TRUE); //画像の描画
DrawLine(bx,by,sx,sy,Cr); //線の描画
ScreenFlip(); //表画面へ描画
}
WaitKey() ; // キー入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
一応移動はするのですが、目的座標にぴったりと到着しません。while(sb>SB)のあたりの計算式に問題があるはずなのですがどうしたらよいのかわかりません。
それと、目的座標に着いたら違う目的座標に再度移動するというプログラムも入れたいのですがどういう方法があるのでしょうか?自分は上記のプログラムを使ってif文等を使えば動くと思うのですが、どのようなプログラムの書き方をすればよいのかわかりません。
以上が質問になります。助言を頂けると嬉しいです、よろしくおねがいします。
[1] わからないこと
(1)目的座標にぴったりと到着するにはどうしたらよいか
(2)目的座標に着いたら再度違う目的座標に移動する
[2] 環境
[2.1] OS : WindowsXP
[2.2] コンパイラ名 : VC++
[3] その他
・C言語を初めてまだ2週間程度です
・DXライブラリを使用
課題の内容は「出発座標から目的座標まで画像を移動させる」というものです。
そこで以下のようなプログラムを作りました。
#include "DxLib.h"
#include <math.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
SetGraphMode(1366,768,32) ;
if(DxLib_Init()==-1) return -1 ;
SetDrawScreen(DX_SCREEN_BACK) ; //裏画面に描画
float sb,sbx,sby,bx,by,sx,sy; //初期座標と目的地の座標
float Ex,Ey,Esx,Esy; //移動時の座標
int agent; //人のグラフィック
int Cr; //線の色
double sokudo; //速度
double SB; //移動距離
float rad; //ラジアン
bx=600; //出発点x座標
by=300; //出発点y座標
sx=800; //目的地x座標
sy=600; //目的地y座標
sokudo=10; //人の移動速度
sbx=sx-bx; //それぞれのx座標の差
sby=by-sy; //それぞれのy座標の差
sb=sqrt(sbx*sbx+sby*sby); //出発点と目的地の距離
Esx=sbx/sb*sokudo; //x方向の移動速度
Esy=sby/sb*sokudo; //y方向の移動速度
agent=LoadGraph("char1.png"); //画像をメモリに読み込み
Cr=GetColor(255,255,255); //白の取得
SB=0; //初期値
Ex=0; //初期値
Ey=0; //初期値
rad=atan2(sbx,sby); //ラジアン
while(sb>SB) //SBがsbになるまで繰り返す
{
ClearDrawScreen(); //画面の初期化
Ex+=Esx; //EsxをExに代入
Ey+=Esy; //EsyをEyに代入
SB=sqrt(Ex*Ex+(Ey)*(Ey)); //移動距離の計算
DrawRotaGraph(bx+Ex,by-Ey,0.3f,rad,agent,TRUE); //画像の描画
DrawLine(bx,by,sx,sy,Cr); //線の描画
ScreenFlip(); //表画面へ描画
}
WaitKey() ; // キー入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
一応移動はするのですが、目的座標にぴったりと到着しません。while(sb>SB)のあたりの計算式に問題があるはずなのですがどうしたらよいのかわかりません。
それと、目的座標に着いたら違う目的座標に再度移動するというプログラムも入れたいのですがどういう方法があるのでしょうか?自分は上記のプログラムを使ってif文等を使えば動くと思うのですが、どのようなプログラムの書き方をすればよいのかわかりません。
以上が質問になります。助言を頂けると嬉しいです、よろしくおねがいします。
[1] わからないこと
(1)目的座標にぴったりと到着するにはどうしたらよいか
(2)目的座標に着いたら再度違う目的座標に移動する
[2] 環境
[2.1] OS : WindowsXP
[2.2] コンパイラ名 : VC++
[3] その他
・C言語を初めてまだ2週間程度です
・DXライブラリを使用