貴様ら!ブロック崩し作るので見てください
■ このスレッドは過去ログ倉庫に格納されています
0001ヒッキー@プログラミング
NGNG作りたくなりました。
Bitbltなど使う予定ですが、細かい技術がないので、
小出しにプログラムしようと思います。
(タマが動くだけとか、キーボードで自機を動かすだけとか)
オナーニスレだけどよろしくね。
0756デフォルトの名無しさん
NGNGDIB という単語が多義的に使われていて混乱してる気がするな。
ほんとに素の DIB だと SetDIBitmsToDevice(), StretchDIBits() で描画することしか出来ない。
GDI 関数を使いたければ CreateDIBSection() で DIB セクションを作成する必要がある。
ということで OK?
ついでに DDB, DIB, DirectDrawSurface の得失
DDB
+ GDI 関数が使える
+ BitBlt() が高速
- ピクセル操作は Win32 API 呼び出しが絡むので遅い
(単に API がどうこうというだけでなく、データをビデオメモリ上に持ってるんじゃない?)
DIB
- GDI 関数が使えない(ただし CreateDIBSection で補える)
- BitBlt() はやや遅い
+ ピクセル操作はポインタ経由で行えるので高速
+ ピクセルフォーマットを自分で決められる
DirectDrawSurface
+ GDI 関数が使える (ただしピクセル操作よりは遅くなる)
+ BitBlt() が高速
+ 標準で透過処理などをサポートしている
+ ピクセル操作はポインタ経由で行えるので高速
(ただしシステムメモリにサーフェイスを作った場合、ビデオメモリに作ると操作は逆に遅くなる)
- ピクセルフォーマットはデバイス依存になる
というところで。
良くも悪くもシステムが面倒を全部見てくれる DDB, ハードウェアが直接見える DirectDrawSurface,
その中間に位置する DIB という感じ。
0757デフォルトの名無しさん
NGNGそうじゃないなら言葉足らず。
0758ヒッキー@プログラミング
NGNG何を書いているのかわからなくなりました…。鬱だ
>>756
詳細なご説明ありがとうございます。
用途によって使い分けるのがいいんですね。
ゲームを作るときにDIBを使う…という意味がはっきりしました。
逆に、絵を数枚だけ表示したい時などはDDBの方がよさそうですね。
0759デフォルトの名無しさん
NGNGガンバレ
DIBってデバイスに依存しないビットマップって意味だから,一旦DDBにコピーして
おいてから描画すると高速になる事があって(゚д゚)ウマーだね。面倒くさいけど(w
ま,細かいことはこれから覚えていけばいい事だし,とにかく作ってみて完成させる。
コレが一番。やればやっただけ効果あるし,やる気ある奴は伸びるのも早いよ。
0760デフォルトの名無しさん
NGNG前のほうでちょっと書いたんだけど、Win3.1の頃にはWinGっていう規格があった。
最後のGっていうのはGameの略。つまりゲームアプリのために作られたもの
なんだけど、それがWin32になってAPIとして取り込まれたものがDIBセクション。
DIBとDIBセクションは一応別物として理解していてくれ。
DIBセクションに関してはCreateDIBSectionで検索すればすぐ出てくる。
0761ヒッキー@プログラミング
NGNG↑次UPしました(VC)。変更点は
・ブロックの表示&はね返る
です。
>>759
ほおほお。いろいろ作ってみます。
DIBを作ってみて、速度を計ってみようと思います。
>>一旦DDBにコピーして
というのは、DDBにいったんBitBltするんでしょうか?
>>760
あー、そういえばPCを初めて買った時に見た、雑誌の付録で
WinGを使ってるのがありました。
MSDNのCreateDIBSectionのページを見てみます。
ありがとうございます。
0762デフォルトの名無しさん
NGNGCreateDIBSectionかDirectDrawの二択。
とりあえず、32bitカラーのCreateDIBSectionがおすすめ。
アライメントとかの問題も気にする必要ないから初心者にも扱いが楽。
CreateDIBSectionで速度的に問題があれば、DirectDrawに手を出してみるのが
いいかと。ただし、IA32についてちゃんと理解していなければ、ちっとも速くな
らないから注意。
0763デフォルトの名無しさん
NGNG>というのは、DDBにいったんBitBltするんでしょうか?
そうそう。表示デバイスとコンパチブルなビットマップを作ってBltするんだよ。
CreateCompatibleBitmapでMSDN探せば出てくるよ。
書き換えのチラツキ防止策にも使われたりしますが,ゲームじゃあまり使わ
れないから,気にしなくてもいいかも(w
0764デフォルトの名無しさん
NGNGなぜかネットにつなぐとしたくなるんだよ。
フレッツじゃないし、56kbps(前もこんな人いたような)だからつらい。
まぁ1がんばれ。
0766あきまさ
NGNG0767デフォルトの名無しさん
NGNG元気の出る波動送っときます。
も〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜ん…
も〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜ん…
0768ヒッキー@プログラミング
NGNGそろそろ復帰します…。
0769デフォルトの名無しさん
NGNGえっ、何かの搬入ですか?
それとも、電源工事?
0770デフォルトの名無しさん
NGNGって思うんだ
0771デフォルトの名無しさん
NGNGあけましておめでてーな。
本年もよろしくお願いいたしやがります。
0773デフォルトの名無しさん
NGNG書き込みが少ないのが悲しい。
ひまつぶし
しようと思うが
カキコ無し
圖
0774ヒッキー@プログラミング
NGNG>>762
ういー。了解しました。
IA32って、どういうのでしょう?Itaniumの仲間ですか?
>>763
ほおほ。参考になります。
コンパチブルなBITMAPは一応作ることができたのですが、
普通にBITMAPを作ると白黒になってしまうようなのですが、
解決策はあるのでしょうか?
(MSDNの内容がイマイチ読み取れませんでした…)
>>764
漏れもテンション上がるとウ○○がしたくなります…
あとコーヒー飲んだ後。
がんばります〜。
>>765
若干元気になりました。
>>766
ただいまー。
また、そちらのスレに顔出しマス…。
>>767
なんか耳鳴りがすると思ったら波動を送ってくださってたんですね(藁
>>768
ん?
>>770
小さくできそうですねー。
でもwindows.hをインクルードするだけで重くなるような…
>>771
もっと減らせますか?んんん。
>>772
今年も夜露氏苦おねげーします。
>>773
歌丸師匠!?
もっと正月もがんばったら良かったかと思っています。
0775デフォルトの名無しさん
NGNGIA32はi386〜Pen4(PenPro含む)
0777デフォルトの名無しさん
NGNG> でもwindows.hをインクルードするだけで重くなるような…
ヘッダと実行ファイルのサイズは関係ないって。
ただ CRT に関しては libc.lib (libcmt.lib) をスタティックリンクして使うか msvcrt.dll を使うかでサイズに
差が出る。プロジェクトの設定から [C/C++] - [コード生成] - [使用するランタイムライブラリ] で選択ね。
0778デフォルトの名無しさん
NGNG>普通にBITMAPを作ると白黒になってしまうようなのですが、
コンパチDC作ってビットマップ作成だったかも知れん。スマソ
ここら辺ややこしいんだよな…
0779債務不履行の名無しさん
NGNGいつもsageなのになぁ。
今日、某新聞の求人広告に………があってつい見にきてしまった。
保守上げだ。
0780Monamoe
NGNG漏れも高校の時CとVB勉強してたよ。
今はC++だけど。
年齢もかなり近い。
1さんは漏れの1つ年上みたいだね。
しかも漏れもヒッキーでゲーム作ってたりする。
Cで書かれてるブロック崩しやらせてもらったけど、
なかなかいい感じだね。
1つ注文すると、最大化ボタンはいらないと思うよ。
CreateWindow関数のWS_OVERLAPPEDWINDOW
ってのを変更すれば最大化ボタンを消せるYO!
お互い頑張ろうね!
0781ぴくみん
NGNG0782ヒッキー@プログラミング
NGNG一回休むと続けづらくなってきました…
とりあえずVC起動
0783ヒッキー@プログラミング ◆hky/PGis
NGNG0784不良社員
NGNGそういうときはやらんでよし。
他に興味あるプログラムを作るか、
遊ぶかダラけるかをおすすめします。
とりあえず、やる気でないときは私はそうしてます。
やる気ってコントロールするのが難しいんだよね
0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNG仕事でも、趣味でも、勉強でも。
がんばれage.
0787ほえー
NGNG0788デフォルトの名無しさん
NGNG漏れはマスターベーションの方が大事だと思うな。
0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNGお前みたいなデブメガネは死ね
0791デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNGそういう時は別の言語触ってみたら?
J++も入ってるんでしょ? 他にもDelphi6Personalとかも無料だし
0794789
NGNGおいおい何怒ってるんだよ。(笑)
0795デフォルトの名無しさん
NGNG0796デフォルトの名無しさん
NGNG>>1さぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ♥ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ♥ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ(以下略
0797デフォルトの名無しさん
NGNG| >>1 はどこ!! |
|_________|
∧∧ ||
( ゚д゚) ||
/ づΦ
0798デフォルトの名無しさん
NGNG勢いはもう \0 どうぜん…(w
0799デフォルトの名無しさん
NGNG(例) http://www.google.co.jp/search?q=%8F_%96%D1&hl=ja&lr=
0800デフォルトの名無しさん
NGNG0801ヒッキー@プログラミング ◆hky/PGis
NGNG0802デフォルトの名無しさん
NGNGプログラミングは (それほど) 初心者でもないが、ゲームプログラミングはド素人ってあたりで
どうよ? ひとつシューティングゲームでも書いてみたいなと思ってるんだが、観客いた方が気
合入るし。
0803デフォルトの名無しさん
NGNG俺は全然構わないと思うよ。
>>1もプログラミング多少できたみたいだし。
0804デフォルトの名無しさん
NGNG0805デフォルトの名無しさん
NGNGCreateCompatibleBitmap
の引数のHDCに入れるものが間違ってるからだったような・・・
hWnd = 「メインウインドウのhWnd」;
hdc = GetDC(hWnd);
CreateCompatibleBitmap(hdc, width, height);
とhdcをウインドウのものにすればすればカラーになるはず
0806デフォルトの名無しさん
NGNG漏れも便乗させてもらってもいい?
0807802
NGNG良いんじゃない。
とりあえず DirectDraw7 で、16x16 タイル張りの背景をスクロールできるところまで行きました。
ちとコードを整理したら up します。
0808806
NGNGどうもありがとう。
漏れ業務ではPL/SQLしか経験なくてやばめだけど。
わたしはDirectDrawは使えないヘタレなので、DirectX系無しのVCで・・
背景のスクロールはWM_TIMERでX+=10;とかにして
BitBltの所の背景のX座標の位置を増やしてみました。
たぶんWM_TIMER使っているからだと思うけどゲームみたいな綺麗な
スクロールじゃないや。
それにInvalidateRectをWM_PAINTじゃなくてWM_TIMERの方に書かないと
だめだったし。無念。
0809806
NGNG一文しか私は使っていないんですが、UpdateWindow(hwnd);は
やっぱり普通は使うものなんですか?
自分のソースにInvalidateRectの次の行に書いたらKARNEL32.dllっていうのがエラー出します(涙
0810デフォルトの名無しさん
NGNGVBに帰る手もあると思う。
0811デフォルトの名無しさん
NGNGおそらくWM_PAINT に UpdateWindow 書いてねーか?
0812デフォルトの名無しさん
NGNGhttp://www2.sega.co.jp/sw/woody/
セガのブロック崩し。
おもろいよ。
0813デフォルトの名無しさん
NGNG漏れもちょっと参加してみます。
貴様ら!見てください
http://www.geocities.co.jp/SiliconValley-PaloAlto/4792/
プログラム歴は、昔BASICとCをかじった程度。ひと月程前にDelphiをダウソして勉強中。
0814デフォルトの名無しさん
NGNG色つけたら見てるだけで楽しくなりそう。
0815名無しへの扉
NGNGhttp://www.vector.co.jp/soft/win95/game/se174379.html
0816デフォルトの名無しさん
NGNGAPI板にも来てください
http://pc.2ch.net/test/read.cgi/tech/1006783012/l50
0817813
NGNGhttp://www.geocities.co.jp/SiliconValley-PaloAlto/4792/
画面を分割して、衝突判定を分けたんですが、
だんだんソースがゴチャゴチャしてきて見辛くなってきた。
あと、Ctrl+左マウスドラッグで画面をスクロールできるようになりました。
>>814
ぱくり元のゲームも見てるだけで飽きないとこが好きだったんですが、フルスクリーン専用だったので、
そのへんをなんとかしたいなってのも、作ってる動機のひとつです。完成したらスクリーンセーバにもしてみようかと思ってます。
今のとこ、どうやって作ったらいいのか全然わかりませんが。
見た目の寂しさは何とかしたいとこですが、一通りの機能が出来るまでは我慢しようとおもいます。
音の追加とかも。
0818デフォルトの名無しさん
NGNGぼーっとみちゃったよ。
0819デフォルトの名無しさん
NGNG0820ヒッキー@プログラミング ◆hky/PGis
NGNG今日またやり始めたので、よかったらおいでくださいませ(;´Д`)
0821813
NGNGhttp://www.geocities.co.jp/SiliconValley-PaloAlto/4792/
なんとなくソースファイルをメインフォーム、宣言、描画、物理計算部の4つに分割してみたんですが、
描画時の色がおかしくなってしまい困ってます。
//細胞カーソル描画
procedure DrawCellCursor(cell: PCell; Color: TColor);
begin
with Form1 do begin
if Cell = Nil then Exit;
Image1.Canvas.Pen.Color := Color;
Image1.Canvas.Pen.Width := 2;
Image1.Canvas.Brush.Style := bsClear;
Image1.Canvas.Ellipse(Cell.x - CellRadius - 4 - ViewLeft, Cell.y - CellRadius - 4 - ViewTop,
Cell.x + CellRadius + 4 - ViewLeft, Cell.y + CellRadius + 4 - ViewTop);
end;
end;
//============================================
上のようになっていて
DrawLifeCursor(LifeSelected, clBlue);
のように呼んでいるんですが何故かclBlueでなくclBtnFace(ウィンドウの色)で描画されてしまいます。
ソース分割前は正常だったんですが…。考えてみてもまったく原因が分からない。(;´д`)
お、>>1さんが、ひっそりと復活。息切れしないよう、程ほどに頑張ってね〜。
0822デフォルトの名無しさん
NGNG引数のColorではなくてForm1.Colorが描画されてるのかな。
名前がバッティングしないように引数を変えてみてはどうでしょうか。
0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG0827ヒッキー@プログラミング ◆hky/PGis
NGNGhttp://www.geocities.co.jp/SiliconValley/2530/
WM_TIMERで処理するのをやめて、時間を計るようにしました
0828ヒッキー@プログラミング ◆hky/PGis
NGNG0829デフォルトの名無しさん
NGNGなんら問題はありません。
タリー
タリー タリー イヤーソ
(\_/) タリー
( ´Д)アハーン タリー タリー
/ つ (\_/) (\_/)ノ⌒ヽ、
(_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))
0830デフォルトの名無しさん
NGNG今VBの方をDLしてみたんだけど、面白かったYO!
0831ヒッキー@プログラミング ◆hky/PGis
NGNGがーん(´ρ`)
>>830
ども、ありがとうございます!
これからもがんばって作っていきます
0832デフォルトの名無しさん
NGNG折れもC勉強しようかと思うんだけど、
コンパイラなどどれがいい?
便乗 保守 呼込 質問 揚
0833デフォルトの名無しさん
NGNG0834ヒッキ-@プログラミング ◆hky/PGis
NGNGどもー。
Cですかー。漏れはWindows派の人間なのでやっぱVCが
(・∀・)イイと思うんですが、もし挫折してしまったら
投資がモターイナイので、フリーのLSI-C試食版などどうでしょうか?
DOS環境に限られますが、勉強ならちょうど良いんではないかと。
構造体・配列・ファイル管理などができるようになってきたら、
gccかボーランドのコンパイラに移行すればまた無料でできます。
0836ヒッキ-@プログラミング ◆hky/PGis
NGNGインラインアセンブラのところでエラー出すんですが何ででしょう…。
あと、makeコマンドでコンパイル→リンクする時も
なぜかエラーが…。
設定の仕方がよくわかりません。タスケテ
0837デフォルトの名無しさん
NGNGとりあえずエラーメッセージを Copy & Paste しろ。
0838デフォルトの名無しさん
NGNG466で考えたことはずっと忘れないように。
> 結論としては、僕的にはコンピュータを内部まで知らなくても、1回ソースを
> 書いたら全ての環境で全く同じソースがコンパイルできるようになったら
> いいなと思います。
例えばJavaはすべてのプラットフォームに同じ土台(JavaVM)を用意することで
その上では同じコードを実行できる。
それもひとつの方法なんだけど、1がこれからもっと規模の大きいプログラムに取りかかるとき、
構造化やオブジェクト指向の考え方を知っておいて損はしないと思う。
ざっと1のVBのソース見た限りでは、プログラムが実行する処理を順番に書いてるだけだよね。
VC版ブロック崩しはブロック、パドルなんかを別ファイルに分けてるから、その辺考え始めてると思う。
確かにブロックやパドルは、それぞれひとまとまりだから分けることが出来る。
でもブロックもパドルもボールも同じ画面に描画される物体だよね。
それぞれ表示すべき座標があり、グラフィックがある。
ブロックに対しても、パドルに対しても、ボールに対しても「表示しろ」と命令すれば
しかるべき位置にしかるべき表示をしてくれるとすれば、理にかなってると思わない?
こういう考え方をすると、ブロック=パドル=ボールは共通の概念をもったものであると考えることもできる。
良くまとまらないけど、オブジェクト指向の考え方に踏み出すきっかけにならないかな…?
#俺も昔ゲーム作って、今の1と全く同じようなファイルの分け方してた(ワラ
0839デフォルトの名無しさん
NGNG今のVC版ブロック崩しではボールやパドルのソースファイルに
HDCやら何やらも一緒に入ってるよね。
で、例えばMoveしたときにHDCに対して絵を送ってやって表示を実現してる。
ボールを画面に表示するプログラムの手順としては間違ってるわけではないが、
ボールは表示されるべき場所(この場合はプログラムのWindowの中)の事まで
考慮すべきかどうか。
VBの時も、VCの時も、「ボール」の振る舞いは「移動する」「反射する」…で変わらない。
ブロック崩しのアルゴリズムも変わるわけじゃない。
変わったのは実装依存の部分。これはVBだったらBitBlt、VCだったらBltToBufとか使ったり。
他にはtimer使ったりイベントが呼び出されたり。
こういうとき一枚ラップ用の関数を定義して、例えば表示ならDraw()の中で
実装依存の関数BltToBufを呼び出したりすると、プログラムが読みやすくなる。
抽象化された概念(言葉)でラップして、実装は内側に閉じこめてしまうわけ。
このようにしておくと、例えば描画エンジンをDirectXに取り換えても書き換える部分はごくわずかで済む(のが理想)。
Drawの内側の実装部分を変えるだけだから。
実際うまく行くように切り分けるのは最初は難しいかもしれないけど、
この考える作業は結構楽しい。
でそれにハマりすぎて何時までも完成品が出来なかったりすることもあるけどな・・>俺。
そんなとき初心に帰ってゴリゴリ書くのもいいなとこのスレ見て思ったよ。
長レスすまそ。
0840ヒッキ-@プログラミング ◆hky/PGis
NGNGアセンブラのとこのエラーはこんな感じです…。
a.c: In function `vsync':
a.c:79: parse error before '{' token
で、中身はこんな感じです。
76:void vsync()
77:{
78: __asm
79: {
80: mov r0, 0x4000006
81: scanline_wait:
82: ldrh r1, [r0]
83: cmp r1, 160
84: bne scanline_wait
85: }
86:}
0841ヒッキ-@プログラミング ◆hky/PGis
NGNGMakeの時のエラーは、
D:\GBA\sample\proto_devkit\proto_devkit>make
gcc -g -O3 -mthumb-interwork -nostdlib -Wall -fverbose-asm -fpeephole -M main.c
> Makedepend.txt
make: /bin/sh.exe: Command not found
make: *** [Makedepend.txt] Error 127
こういうのです。
でも、sh.exeにはパス通ってると思うんですが…
っていうか、sh.exeに渡すファイルがないって言う事でしょうか…。
あ、友達からネトゲーのお誘いが…
>>838さんまた後でレスします
0842デフォルトの名無しさん
NGNG自信無いのでsage
0843デフォルトの名無しさん
NGNGgccのインラインアセンブラの書式じゃないから。
0844デフォルトの名無しさん
NGNGcygwinインストールした?
0845ヒッキ-@プログラミング ◆hky/PGis
NGNGうーん、一応PATHに足したつもりなんですが…
>>843
まじすか?がーん。
まずgccの使い方をもっと覚えた方がいいですよね…
>>844
cygintl.dll cygwin1.dll
っていうファイルは、zipに一緒に入ってたので
入れました。
0846844
NGNGDLLだけじゃなくて、cygwin上の開発環境入れたらかなり大量に入るはずなんだけど。
0847ヒッキ-@プログラミング ◆hky/PGis
NGNGcygwinってコンパイラとは別に用意しないといけないんでしょうか?
pathにはC:\devkitadv\binっていうのを足してます。
devkitadvっていうのがGBA用のgccみたいです。
0848デフォルトの名無しさん
NGNGちなみにmake.exeはそこにあるわけ?
0849ヒッキ-@プログラミング ◆hky/PGis
NGNG0850デフォルトの名無しさん
NGNGmount [ENTER]
mount -s [ENTER]
ってタイプするとなんて出て来る?
0851ヒッキ-@プログラミング ◆hky/PGis
NGNGmount: not found
$ mount -s
mount: not found
0852デフォルトの名無しさん
NGNGpwd [ENTER]
./mount [ENTER]
./mount -s [ENTER]
だとどうよ?
0853ヒッキ-@プログラミング ◆hky/PGis
NGNGで、cygwinのbashからmakeしたらうまく逝きました…。
>>852さんどうもありがとうゴザイマス。
0854デフォルトの名無しさん
NGNGまたプログラムやりたくなったよ。
頑張れー>>1
0855デフォルトの名無しさん
NGNGSHELL=sh
って書いたらたぶん解決してたと思う。
853で普通のcygwinとアドバンス開発環境が同居することになったようだけど、
無用な混乱が起こるような気がします。
PATHの設定とmountの状態でわけわからんくなる可能性がありますぜ。
■ このスレッドは過去ログ倉庫に格納されています