HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1115
Buzzシューティングゲーム マップの移動について10解決


Buzz

リンク

2011/11/15(Tue) 23:46:24|NO.43029

2度目の投稿です。 
現在シューティングゲームを作っていて、分からないところがあり質問いたしました。

内容は、現在の自分が作っているゲームは、画面の大きさX=1000,Y=600 で作っておりその範囲内の中だけでゲームを作っていたのですが
画面を3倍近くに大きくしてプレイヤーが動かす機体周りの一部分だけを表示させるというに変更したいと思っているのですが
どのように処理したら、実現できるでしょうか?


なるべく下記のような動画のようにしたいと考えています。
http://www.youtube.com/watch?v=s7WAebrhMzs

自分と同じような質問または類似した質問があれば、リンクを貼っていただければ幸いです。
どんなアドバイスでもかまいませんので、ご回答お願いします!



この記事に返信する


てれてれ

リンク

2011/11/15(Tue) 23:59:00|NO.43030

画面をスクロールするような処理を行えば、
わざわざ3倍の大きさで描画を行う必要なんてないんじゃないでしょうか?



TMKL

リンク

2011/11/16(Wed) 00:35:13|NO.43034

こんな感じですかね

方法1.
自機には方向転換と弾の発射などを命令
自機の前進後退などは、敵や背景にその逆を命令

例.「自機が上に5px進む」を「敵や背景が下に5px進む」に変える

実際には、
「自機の向いている方向」「敵の向いている方向」「自機と敵との位置関係」
「自機と玉との関係」「自機の向いている方向と背景との関係」
などあるから難しいと思います


方法2.
非表示画面(大)とメイン画面(1000×600)を用意
非表示画面で自機や敵が自由に動く
自機座標を中心に1000×600をメイン画面で表示

簡単ですが、毎フレームごとに画面をコピペするので
重たくなると思います(私は作ったことないのでわかりませんが)



ひらまる

リンク

2011/11/16(Wed) 00:37:38|NO.43035

さらに普通は大きな領域への描画は時間がかかるので、画面の解像度自体を落とします。
100x600のような半端なサイズにすることはまずありません。

そういやフルスクリーンで横長にしたい場合、
なかなか低解像度で横長の比率がなくて困りますよね;
640x360くらいの低解像度が標準でサポートされていれば嬉しいのですが、
いつもは仕方ないので、640x360で描画したものを1360x768のスクリーンに拡大コピーしています。
(若干上下が余る)



Buzz

リンク

2011/11/16(Wed) 22:13:51|NO.43050

自分で少し考えてみて、テストプログラムを作ったのですが自分の思ったようにいきません;

考えとしては、全体の広い非表示画面と一部描画の画面を作ります。
基本的な機体や弾の描画は、表示画面に行います。
そしてメインループの最後あたりで非表示画面の一部をgcopyでコピーし貼り付けます。
これで、できると思っていたのですが、いざやってみると画面が真っ白なままだったりしてうまくいきません。
ですので一度テストでプログラムを作ってみました。


0番ウィンドウ 一部描画の画面
1番ウィンドウ 大きな非表示画面
1番に画像二つを書き込み、gselで描画先を変え0番ウィンドウをgcopyで一部貼りつける。 というプログラムです。


ですがこれの結果は、2枚目(戦闘機2.bmp)しか表示されないのです。
それがなぜか知りたくて質問をいたしました。

プログラムは下記のとおりです。

celload "戦闘機1.bmp",1,0 60×60のサイズ
celload "戦闘機2.bmp",2,0 60×60のサイズ

screen 0,1000,500
buffer 1,2000,1000

gsel 1
pos 0,0
celput 1,0

pos 60,60
celput 2,0

gsel 0
gmode 1
gcopy 1,0,0,1000,500

これを実行すると戦闘機2.bmpしか表示されないのですがなぜでしょうか?



mamo

リンク

2011/11/16(Wed) 22:28:37|NO.43051

buffer 1をscreenにして状況を確認してみれば?



暇人

リンク

2011/11/16(Wed) 22:56:54|NO.43052

>celload "戦闘機1.bmp",1,0
これは

buffer 1
picload "戦闘機1.bmp",0
これと同等の処理

 
celload "戦闘機1.bmp",1,0  celload "戦闘機2.bmp",2,0 screen 0,1000,500 buffer 1,2000,1000 //ここでcelload "戦闘機1.bmp",1,0 で読み込んだ仮想画面が初期化されてる

それから普通はメイン画面に仮想画面から背景をコピーして前フレーム画像をクリアしてからキャラをメイン画面に描画する



暇人

リンク

2011/11/17(Thu) 00:07:06|NO.43054


buffer 10,3000,1800 cls 4 repeat 200 color rnd(100)+150,rnd(100)+150,rnd(100)+150 x=rnd(2900) y=rnd(1700) circle x,y,x+rnd(200),y+rnd(200) loop screen 0,1000,600 x=1000 y=600 ex=1200 ey=800 repeat scrx=x-500 //自機を画面中央に置いた場合の仮想画面のコピーする左上の座標 scry=y-300 //敵等をスクロールに対応させた座標に描画するのにも使用 redraw 0 gsel 0 pos 0,0 gcopy 10,scrx,scry,1000,600 //前フレームを背景でクリア pos ex-scrx,ey-scry //敵描画座標(本来なら画面外なら描画しないとかする) color 255,255,255 mes "敵敵敵" color 255 boxf 500-10,300-10,500+10,300+10 stick k,$f if k&1 {if x>500{x-4}} if (k&4)>0 {if x<2500{x+4}} if (k&2)>0 {if y>300{y-4}} if (k&8)>0 {if y<1500{y+4}} await 10 redraw 1 loop



Buzz

リンク

2011/11/17(Thu) 00:59:18|NO.43056

なるほど、celload の時に仮想画面が素手に1番が使用されていて、その1番にすべて書き込もうとしたから
1番に読みこんだ画像が表示されなかったんですね。

2度目の書き込みのプログラム実行してみましたが自分の思い描いてたとおりのプログラムですね。
参考にします^^

一人で悩むよりも、ホントにここの掲示板は役に立ちます。 感謝感謝です。

またマップの移動について分からないことがあったらここに書き込みます。



mamo

リンク

2011/11/17(Thu) 08:40:03|NO.43061

>なるほど、celload の時に仮想画面が素手に1番が使用されていて、その1番にすべて書き込もうとしたから
1番に読みこんだ画像が表示されなかったんですね。

そうじゃなくて自分で初期化してるでしょ、NO.43052での説明を良く考えて。
celloadについて勘違いがあるだろうから、仮想画面じゃなく見えるようにして確認したほうがいいぞ。



Buzz

リンク

2011/11/19(Sat) 17:29:32|NO.43123

mamoさんわざわざ間違いのご指摘ありがとうございます。

間違いはcelload 1番に機体を読み込んでいたのをbuffer命令で初期化しているからですよね。

あれから色々自分のシューティングゲームに試行錯誤して結果マップ移動の処理できるようになりました^^

みなさん ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.