略
// 入力情報を一つ前のフレームの入力に代入する
BackInput = NowInput ;
if(unn=1){
// 現在の入力を取得する
NowInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// 現在のフレームで初めて押されたボタンを算出する
EdgeInput = NowInput & ~BackInput ;
// 上が押されたら向いている方向に移動する
if( CheckHitKey ( KEY_INPUT_UP ) == 1 )
{Muki = 0 ;
// 向きによって移動方向が変わる
switch( Muki )
{
case 0 : movx = -1 ; movz = 0 ; break ; // X軸プラス方向
case 1 : movx = 0 ; movz = 1 ; break ; // Z軸マイナス方向
case 2 : movx = 1 ; movz = 0 ; break ; // X軸マイナス方向
case 3 : movx = 0 ; movz = -1 ; break ; // Z軸プラス方向
}
// 移動先のマスが道だったら移動する
if( Map[ z + movz ][ x + movx ] == 1 )
{
x += movx ;
z += movz ;
}
}
// 下が押されたら向いている方向と逆方向に移動する
if( CheckHitKey ( KEY_INPUT_DOWN ) == 1 )
{Muki = 0 ;
// 向きによって移動方向が変わる
switch( Muki )
{
case 0 : movx = 1 ; movz = 0 ; break ; // X軸プラス方向
case 1 : movx = 0 ; movz = -1 ; break ; // Z軸マイナス方向
case 2 : movx = -1 ; movz = 0 ; break ; // X軸マイナス方向
case 3 : movx = 0 ; movz = 1 ; break ; // Z軸プラス方向
}
// 移動先のマスが道だったら移動する
if( Map[ z + movz ][ x + movx ] == 1 )
{
x += movx ;
z += movz ;
}
}
// 左が押されていたら向いている方向を左に90度変更する
if( CheckHitKey ( KEY_INPUT_RIGHT ) == 1 )
{
Muki = 1;
// 向きによって移動方向が変わる
switch( Muki )
{
case 0 : movx = -1 ; movz = 0 ; break ; // X軸プラス方向
case 1 : movx = 0 ; movz = 1 ; break ; // Z軸マイナス方向
case 2 : movx = 1 ; movz = 0 ; break ; // X軸マイナス方向
case 3 : movx = 0 ; movz = -1 ; break ; // Z軸プラス方向
}
// 移動先のマスが道だったら移動する
if( Map[ z + movz ][ x + movx ] == 1 )
{
x += movx ;
z += movz ;
}
}
if( CheckHitKey ( KEY_INPUT_Z ) == 1 )
{
}
// 右が押されていたら向いている方向を右に90度変更する
if( CheckHitKey(KEY_INPUT_LEFT ) == 1 )
{
Muki = 3 ;
// 向きによって移動方向が変わる
switch( Muki )
{
case 0 : movx = 1 ; movz = 0 ; break ; // X軸プラス方向
case 1 : movx = 0 ; movz = 1 ; break ; // Z軸マイナス方向
case 2 : movx = -1 ; movz = 0 ; break ; // X軸マイナス方向
case 3 : movx = 0 ; movz = -1 ; break ; // Z軸プラス方向
}
// 移動先のマスが道だったら移動する
if( Map[ z + movz ][ x + movx ] == 1 )
{
x += movx ;
z += movz ;
}
}
}
// マップを描画する
for( i = 0 ; i < MAP_Z ; i ++ )
{
for( j = 0 ; j < MAP_X ; j ++ )
{
// 道ではないところは描画しない
if( Map[ i ][ j ] == 0 ) continue ;
// マップを描画する
for( i2 = 0 ; i2 < MAP_Z2 ; i2 ++ )
{
for( j2 = 0 ; j2 < MAP_X2 ; j2 ++ )
{
// 道ではないところは描画しない
if( Map2[ i2 ][ j2 ] == 0 ) continue ;
for( i3 = 0 ; i3 < MAP_Z3 ; i3 ++ )
{
for( j3 = 0 ; j3 < MAP_X3 ; j3 ++ )
{
// 道ではないところは描画しない
if( Map3[ i3 ][ j3 ] == 0 ) continue ;
MV1SetPosition( chara, VGet( j3 * BLOCK_SIZE, 0.0f, i3 * BLOCK_SIZE ) ) ;
// 壁モデルの座標を変更する
MV1SetPosition( KabeModel, VGet( j * BLOCK_SIZE, 0.0f, i * BLOCK_SIZE ) ) ;
// 壁モデルの座標を変更する
MV1SetPosition( Model01, VGet( j2 * BLOCK_SIZE, 0.0f, i2 * BLOCK_SIZE ) ) ;
// 割り出した番号のフレームを描画する
MV1DrawFrame( Model01, FrameNo ) ;
// 割り出した番号のフレームを描画する
MV1DrawFrame( KabeModel, FrameNo ) ;
// 割り出した番号のフレームを描画する
MV1DrawFrame( chara, FrameNo ) ;
// 割り出した番号のフレームを描画する
MV1DrawFrame( Model, FrameNo ) ;
if( Map3[ z + movz ][ x + movx ] == 1 )
{
}
}
}
}
}
}
}
//第一引数の視点から第二引数のターゲットを見る角度にカメラを設置
SetCameraPositionAndTarget_UpVecY( VGet( x * BLOCK_SIZE+1080, CAMERA_Y, z * BLOCK_SIZE+1080 ), VGet( x * BLOCK_SIZE, 0, z * BLOCK_SIZE ) ) ;
// 指定位置にモデルを配置
MV1SetPosition( Model, VGet( x * BLOCK_SIZE, 0, z * BLOCK_SIZE ) ) ;
戦略シミュレーションゲームで移動
戦略シミュレーションゲームで移動
戦略シミュレーションゲームでユニット移動をさせることが出きませんコードは↓
ですみなさん教えてください
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 戦略シミュレーションゲームで移動
これだけで遅くなるとは思えないので他に問題が有るんじゃないでしょうか。
【補足】
インデントを直してみたら超無駄な描画をしている気がします。
インデントはちゃんとしてくださいね。
ループが5重6重なので、凄い回数の描画をしています。
ループ条件を見なおしてみてください。同じループに閉じ込める必要のないループが閉じ込められています。
あとこれループの中に必要ないですよ。
// 割り出した番号のフレームを描画する
MV1DrawFrame( chara, FrameNo ) ;
// 割り出した番号のフレームを描画する
MV1DrawFrame( Model, FrameNo ) ;
【補足】
インデントを直してみたら超無駄な描画をしている気がします。
インデントはちゃんとしてくださいね。
ループが5重6重なので、凄い回数の描画をしています。
ループ条件を見なおしてみてください。同じループに閉じ込める必要のないループが閉じ込められています。
あとこれループの中に必要ないですよ。
// 割り出した番号のフレームを描画する
MV1DrawFrame( chara, FrameNo ) ;
// 割り出した番号のフレームを描画する
MV1DrawFrame( Model, FrameNo ) ;
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 戦略シミュレーションゲームで移動
これは何処かを参考にしたのですか? それなら参考サイトを記載して下さいね。ハルルン さんが書きました:はいそして移動処理方法を教えてください
自分で考えたのなら分かるはずですが・・・。
あと遅いのは描画処理なので移動処理ではないですよ。
【補足】
一応解説しておくと
if( Map[ i ][ j ] == 0 ) continue ;
と
if( Map2[ i2 ][ j2 ] == 0 ) continue ;
は全く関連が無いので、同じループ内に有る必然性がありません。
つまり、1・2と3・4と5・6のループは関連性がないのに全体として1つの大きなループに成っています。
このため無駄に同じポリゴンモデルを何度も描画してしまっています。
これが遅い原因であろうと思われるわけです。
※ ここの規約で直したソースコードは貼るように定められていますので忘れないようにお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 戦略シミュレーションゲームで移動
すでに書きましたが、規約ですのでソースコードをお願いしますね。ハルルン さんが書きました:あのー一番上にマップあるので意味がないことはありません。
【補足】
コメントのないコードですので、変数名から判断しましたがプレイーヤー・キャラクタなどをマップ描画と同時に1フレームに何百回もする必要はないと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 戦略シミュレーションゲームで移動
トピ主がソースコードを紛失しこのトピックは継続不可能とのことです。
詳しくはこちらのトピックを参照してください。
http://dixq.net/forum/viewtopic.php?f=3&t=14532
以下は個人的な意見です。
規約において変更したソースコードを貼ることが絶対の義務との表現にはなっていません。
しかし質問者がソースコードを提示しないことによって、検証するのにトピックの閲覧者側に手間を与え、過去ログとしての価値も失われます。
フォーラムルールの精神に則れば、それは規約違反よりも重い罪と言えるのではないでしょうか。
詳しくはこちらのトピックを参照してください。
http://dixq.net/forum/viewtopic.php?f=3&t=14532
以下は個人的な意見です。
規約において変更したソースコードを貼ることが絶対の義務との表現にはなっていません。
しかし質問者がソースコードを提示しないことによって、検証するのにトピックの閲覧者側に手間を与え、過去ログとしての価値も失われます。
フォーラムルールの精神に則れば、それは規約違反よりも重い罪と言えるのではないでしょうか。