マップスクロールに関して
Posted: 2010年8月19日(木) 21:45
include以下はplane.pngを四方向に動かしながら、shot.pngを出す
プログラムの転載です。
これに、マップスクロールを付け加えたいので、int以下のプログラムを挿入しようと考えています。
back.bmpには680*960を使うことを考えています。
int background = LoadGraph( "back.bmp" );
for(i=0;i<321;i++)
{
DrawGraph( 0 ,-480+3*i, background , TRUE ) //画像を描画
Sleep(10); //10ミリ秒待つ
if( i == 320 ) break ;
}
描画の処理のことがわかっていなく、include以下のどこに挿入すればよいのかわかりません。
またスクロールするためには本当にこのソースでよいのかもあわせてご助言頂けないでしょうか。
よろしくお願い致します。
#include "DxLib.h"
#define SHOT 5
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
int X,Y,planegraph,shotgraph,background;
int ShotX[SHOT],ShotY[SHOT],ShotFlag[SHOT];
int ShotBFlag;
int i;
// 画面モードの設定
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1;
// グラフィックの描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK );
// 飛行機および弾のグラフィックをメモリにロード&表示座標をセット
planegraph = LoadGraph( "plane.png" );
shotgraph = LoadGraph( "shot.png" );
background = LoadGraph( "back.bmp" );
X = 320 ; Y = 240 ;
for( i = 0 ; i < SHOT ; i ++ )
{
ShotFlag = 0 ;
}
// ショットボタンが前のフレームで押されたかどうかを保存する変数に0(押されいない)を代入
ShotBFlag = 0 ;
while(1)
{
// 画面を初期化(真っ黒にする)
ClearDrawScreen() ;
if( CheckHitKey ( KEY_INPUT_UP ) == 1 ) //上ボタンが押されたら
Y -= 3;
if( CheckHitKey ( KEY_INPUT_LEFT ) == 1 ) //左ボタンが押されたら
X -= 3;
if( CheckHitKey ( KEY_INPUT_DOWN ) == 1 ) //下ボタンが押されたら
Y += 3;
if( CheckHitKey ( KEY_INPUT_RIGHT ) == 1) //右ボタンが押されたら
X += 3;
if( CheckHitKey ( KEY_INPUT_SPACE) == 1 ) //spaceが押されたら)
{
if(ShotBFlag ==0 )
{
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if( ShotFlag == 0 )
{
ShotX = X;
ShotY = Y;
ShotFlag = 1;
break ;
}
}
}
// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotBFlag = 1 ;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotBFlag = 0 ;
}
// 飛行機を描画
DrawGraph( 0 , 0 , background , TRUE ) ;
DrawGraph( X , Y , planegraph , TRUE ) ;
for( i = 0 ; i < SHOT ; i ++ )
{
if( ShotFlag == 1 )
{
// 弾を8ピクセル上に移動させる
ShotY -= 8 ;
// 画面外に出てしまった場合は存在状態を保持している変数に0(存在しない)を代入する
if( ShotY < -80 )
{
ShotFlag = 0 ;
}
// 画面に弾iを描画する
DrawGraph( ShotX , ShotY[i] , shotgraph , TRUE ) ;
}
}
// 裏画面の内容を表画面にコピーする
ScreenFlip() ;
// Windows 特有の面倒な処理をDXライブラリにやらせる
// -1 が返ってきたらループを抜ける
if( ProcessMessage() < 0 ) break ;
// もしESCキーが押されていたらループから抜ける
if( CheckHitKey( KEY_INPUT_ESCAPE ) ) break ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
プログラムの転載です。
これに、マップスクロールを付け加えたいので、int以下のプログラムを挿入しようと考えています。
back.bmpには680*960を使うことを考えています。
int background = LoadGraph( "back.bmp" );
for(i=0;i<321;i++)
{
DrawGraph( 0 ,-480+3*i, background , TRUE ) //画像を描画
Sleep(10); //10ミリ秒待つ
if( i == 320 ) break ;
}
描画の処理のことがわかっていなく、include以下のどこに挿入すればよいのかわかりません。
またスクロールするためには本当にこのソースでよいのかもあわせてご助言頂けないでしょうか。
よろしくお願い致します。
#include "DxLib.h"
#define SHOT 5
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
int X,Y,planegraph,shotgraph,background;
int ShotX[SHOT],ShotY[SHOT],ShotFlag[SHOT];
int ShotBFlag;
int i;
// 画面モードの設定
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1;
// グラフィックの描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK );
// 飛行機および弾のグラフィックをメモリにロード&表示座標をセット
planegraph = LoadGraph( "plane.png" );
shotgraph = LoadGraph( "shot.png" );
background = LoadGraph( "back.bmp" );
X = 320 ; Y = 240 ;
for( i = 0 ; i < SHOT ; i ++ )
{
ShotFlag = 0 ;
}
// ショットボタンが前のフレームで押されたかどうかを保存する変数に0(押されいない)を代入
ShotBFlag = 0 ;
while(1)
{
// 画面を初期化(真っ黒にする)
ClearDrawScreen() ;
if( CheckHitKey ( KEY_INPUT_UP ) == 1 ) //上ボタンが押されたら
Y -= 3;
if( CheckHitKey ( KEY_INPUT_LEFT ) == 1 ) //左ボタンが押されたら
X -= 3;
if( CheckHitKey ( KEY_INPUT_DOWN ) == 1 ) //下ボタンが押されたら
Y += 3;
if( CheckHitKey ( KEY_INPUT_RIGHT ) == 1) //右ボタンが押されたら
X += 3;
if( CheckHitKey ( KEY_INPUT_SPACE) == 1 ) //spaceが押されたら)
{
if(ShotBFlag ==0 )
{
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if( ShotFlag == 0 )
{
ShotX = X;
ShotY = Y;
ShotFlag = 1;
break ;
}
}
}
// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotBFlag = 1 ;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotBFlag = 0 ;
}
// 飛行機を描画
DrawGraph( 0 , 0 , background , TRUE ) ;
DrawGraph( X , Y , planegraph , TRUE ) ;
for( i = 0 ; i < SHOT ; i ++ )
{
if( ShotFlag == 1 )
{
// 弾を8ピクセル上に移動させる
ShotY -= 8 ;
// 画面外に出てしまった場合は存在状態を保持している変数に0(存在しない)を代入する
if( ShotY < -80 )
{
ShotFlag = 0 ;
}
// 画面に弾iを描画する
DrawGraph( ShotX , ShotY[i] , shotgraph , TRUE ) ;
}
}
// 裏画面の内容を表画面にコピーする
ScreenFlip() ;
// Windows 特有の面倒な処理をDXライブラリにやらせる
// -1 が返ってきたらループを抜ける
if( ProcessMessage() < 0 ) break ;
// もしESCキーが押されていたらループから抜ける
if( CheckHitKey( KEY_INPUT_ESCAPE ) ) break ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}