ゲームプログラミングの館の24章やっているのですが、
これを、移動を自動的に%32==0毎にするのではなく、移動距離を手動的に移動したいのですが、
どうすればよいでしょうか?
コード書いてみたのですが、
真ん中のL字のところがちゃんと通ってくれないのです。
外れたところでとまっていしまうのです。
ソースはこれです。
環境はVC++2005です。
よろしくお願いします。
ゲームプログラムミングの館24章について
Re:ゲームプログラムミングの館24章について
わけがわからないところで止まったり進んだり(手動的に)してしまいます。
ch.x%32==0 && ch.y%32==0毎にではなく、自分で好きなところに移動して(例えばch.x++;xh,y++;などして移動)やるにはどうしたらよいでしょうか?
ch.x%32==0 && ch.y%32==0毎にではなく、自分で好きなところに移動して(例えばch.x++;xh,y++;などして移動)やるにはどうしたらよいでしょうか?
Re:ゲームプログラムミングの館24章について
回答とサンプルありがとうございます。
アップしたコードだとちゃんと通るのですが、
通路を変えてみたら、通らないところがありました。
int hantei[15][20] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,0<==ここ,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1 },
{ 1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1 },
{ 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};と言う風にやったらここのところが通りませんでした。
通るにはどうしたらよいでしょうか?
アップしたコードだとちゃんと通るのですが、
通路を変えてみたら、通らないところがありました。
int hantei[15][20] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,0<==ここ,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1 },
{ 1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1 },
{ 1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1 },
{ 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};と言う風にやったらここのところが通りませんでした。
通るにはどうしたらよいでしょうか?
Re:ゲームプログラムミングの館24章について
いま当たり判定は
ch.x-16.0fとかch.y-16.0fとかをすべてch.x-14.0fやch.y-14.0fとかにすれば
通れるようになります。
つまり、今の判定は、32の隙間に32では通らないので
少し判定を狭くして32の隙間を28のキャラなら通れるというわけです。
if(GetChipParam(ch.x-16.0f+ch.vx, ch.y-16.0f) == 1 || GetChipParam(ch.x-16.0f+ch.vx, ch.y+16.0f) == 1){ ch.vx = 0.0f; } // 右向き if(GetChipParam(ch.x+16.0f+ch.vx, ch.y-16.0f)==1 || GetChipParam(ch.x+16.0f+ch.vx, ch.y+16.0f)==1){ ch.vx = 0.0f; } // 上向き if(GetChipParam(ch.x-16.0f, ch.y-16.0f+ch.vy) == 1 || GetChipParam(ch.x+16.0f, ch.y-16.0f+ch.vy) == 1){ ch.vy = 0.0f; } // 下向き if(GetChipParam(ch.x-16.0f, ch.y+16.0f+ch.vy) == 1 || GetChipParam(ch.x+16.0f, ch.y+16.0f+ch.vy) == 1){ ch.vy = 0.0f; }となっています。
ch.x-16.0fとかch.y-16.0fとかをすべてch.x-14.0fやch.y-14.0fとかにすれば
通れるようになります。
つまり、今の判定は、32の隙間に32では通らないので
少し判定を狭くして32の隙間を28のキャラなら通れるというわけです。
Re:ゲームプログラムミングの館24章について
当たり判定の微調整はしなければいけません。
実際に動かしてみて、一番良いところを見つけます。
上の回答は考え方を示したもので、適当な値を使いました。
私の作った superMariko2 では、キャラの画像は32x32ですが、
高さ28、幅22で当たり判定をしています。
superMariko2 は、まだアップしたままですので、ソースも
いっしょにアップしてあるので、よければ参考にしてください。
実際に動かしてみて、一番良いところを見つけます。
上の回答は考え方を示したもので、適当な値を使いました。
私の作った superMariko2 では、キャラの画像は32x32ですが、
高さ28、幅22で当たり判定をしています。
superMariko2 は、まだアップしたままですので、ソースも
いっしょにアップしてあるので、よければ参考にしてください。