[過去ログ] Delphiゲームプログラミング相談室 (976レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
48: 名前は開発中のものです。 [] 02/01/11 03:34 ID:4gfbUP+R(1) AAS
かなり良さげなページハケーン
外部リンク:www.suzuka-ct.ac.jp
49: 名前は開発中のものです。 [sage] 02/01/11 12:46 ID:??? AAS
>>41
41(2): 名前は開発中のものです。 [] 01/12/16 20:22 ID:V2T+L2Ma(1) AAS
>>39
YGSをやめた理由は?
漏れYGSで作ろうかと思ってたんだけど。
C言語の腐ったような、おままごと見たいな言語よりは、
まともな言語使っておいた方が自分のためにもいいぜ。
けっこうまともなデバッガも付いてるしさ。
別に乗り換え先の言語はDelphiじゃなくてもいいけど。
50
(3): 名前は開発中のものです。 [] 02/01/15 22:00 ID:no/G6LIu(1) AAS
ゲームを作ってみようと思って最近Delphi入手してプログラムの勉強を始め、
とりあえず画面にスプライトをたくさん表示してみたりしてるとこなんですが
どうにも画面のちらつきが気になってしまう。
自分の持ってる知識では
1.裏バッファに描画。
2.V-ブランクを待つ。
3.表バッファと裏バッファの入れ替え(ん?考えてみたらフルスクリーンじゃなきゃダメなのかな?だと裏→表バッファへコピーかな)
って感じでやれば良いと思うんですが、
V-ブランクのタイミングを調べる関数がどうしても見つかりません。
そもそもDelphiにはそんな関数は存在しないんでしょうか?
よく知らないんだがWIN32APIってのを使わないといけないのだろうか。
51
(3): 名前は開発中のものです。 [] 02/01/15 22:08 ID:aT6JIdrh(1) AAS
>>50
外部リンク[htm]:home4.highway.ne.jp
ここのサンプル見てみた?
52: 50 [] 02/01/15 23:50 ID:Ix5dcxBu(1) AAS
>>51
え〜と、そのサンプルは見てみましたが、
Vブランクのチェックとか裏バッファ使うとかやってませんし,残念ながら画面もちらつきまくってます。

ちょっと話がずれますが
サンプルでBitbltって関数を使ってますが、これはWin32APIの関数なのかな?
自作のコードではCanvas.Transparent:=TrueにしてCanvas.Draw()でスプライトを表示してました。
多分、BitBltを使うほうが速いのか? これから処理メーターでも作って比較してみます。

あぁ、でも処理メーター作るのには時間を計る関数を調べなきゃならないなぁ。
Delphiのヘルプって使いずらくてしんどいです。
Delphi6Personalのダウンロード版をってるんですがパッケージ版についてる紙のマニュアルは見やすいんですかね?
見やすいのなら買ってみようと思います。
53
(1): 名前は開発中のものです。 [sage] 02/01/15 23:57 ID:??? AAS
バックバッファとしてTImageを用意してそこに描画、そこから画面全体(もしくは更新部分のみ)
を表にBitBlt。
それで描画が遅くて耐えられないようだったら他の方法を考えるのでいいかと。
BitBltはWin32APIです。

パッケージ版はどうかな。買うほどではないと聞きますが。
ヘルプは慣れです^^;
54
(1): 名前は開発中のものです。 [sage] 02/01/16 00:04 ID:??? AAS
外部リンク[html]:www.osk.3web.ne.jp
ここにもあるように、VSYNC待ちはいろいろと面倒です。。
(ちなみにVSYNCを待って転送するAPIはDirectXのものしか知りません。
通常のWin32 GDIにあるんでしょうかね?)

その前に別の方法で高速化するのがいいかと。
すごいシビアならばDirectDrawつかわにゃなりませんし。
55: 50 [sage] 02/01/16 01:30 ID:??? AAS
>>53
パッケージ版はいまいちですか。その分のお金をDelphiなりWin32Apiの解説本に使ったほうが良さそうですね。

>>54
紹介のページ見てみました。そうか、PCだとコンシューマーと違って環境ごとにリフレッシュレートが違うって事が頭から抜けてました。
大昔、ゲームメーカーにいた時にプログラマーさんから教えてもらった知識が頭にあって、
Vsyncに同期を取って描画、ウェイト処理をするのが当たり前だと考えてました。
んー。結局、ちらつきのまったく無い画面、スムーズなスクロール等を実現したければ
フルスクリーンにして、リフレッシュレートもこちらから指定しないと難しいみたいですね。
で、そのためにはDirectDrawを覚える、と。

今作ってるゲームは練習用ですし、ちらつきは我慢してとりあえず完成させてみます。
DirectX以前に勉強しなきゃならないことは、いっぱいありますし。

レスくださった方々、どうもありがとうございます。
56
(1): 51 [sage] 02/01/16 01:51 ID:??? AAS
実はレスしているのは全部私だったりして。

51のリンク先のサンプルをダブルバッファリングするように書き変えてみましたが、
高速化の工夫を何もしていないとはいえ、かなり描画が引っかかります。
全面をBltするのはやめたほうがいいかも。面倒ですが。
57: 51 [sage] 02/01/16 01:54 ID:??? AAS
>56で描画が引っかかると書いたのは間違いだった模様。(裏で重いアプリが動いていたせい)
あの程度の描画量だと引っかかりもなくスムーズに描けました。
58: 名前は開発中のものです。 [] 02/01/21 01:02 ID:3QJf94A+(1) AAS
情報が少なすぎてなにやっていいのかさっぱりです。
59: 名前は開発中のものです。 [sage] 02/01/21 07:49 ID:??? AAS
プログラムをするのがはじめてなら、最初は人のプログラムを真似ることから始めると良いよ。
最初は訳わかんなくても、やってるうちに覚えてきます。以下お薦めのページ。

プログラムをしたことが無いなら、ここ。
ゼロから始めるDelphi講座 外部リンク[htm]:www.text2music.com

次に、このへん flow of water のプログラム講座 外部リンク[htm]:isweb21.infoseek.co.jp
60: Delフサギコ [sage] 02/01/21 09:57 ID:??? AAS
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡 < ひまわりって、Delphiの人つくったん?
  UU""" U U   \_______________
61
(5): 名前は開発中のものです。 [] 02/01/21 12:21 ID:cvZI6toD(1) AAS
delphiで、効果音とかの短いwavを、いったんメモリに読み込んで鳴らそうて思ってるんですが
なかなか上手くいかないんで教えろ。
今のところ
sndPlaySound(Pchar('koukaon.wav'),SND_ASYNC)
ってなってるところ、最後のパラメーターをSND_MEMORYって書き換えたいんだけど
そうするとファイル名のところをポインタ型にしなくちゃいけないらしんだよ。windows的に。
で、filestreamとか使ってwavfile読み込んだ変数のポインタ渡そうとしても
型が違いますとかコンパイラの人に怒られちゃうんですが、
どうしたら良いんでしょうか?
フサギコさん教えて!
62: Delフサギコ [sage] 02/01/21 13:04 ID:??? AAS
 氏らん事は教えられません。
 よくわかなんだけど
 PFileStreamとか定義するんじゃないかしら

  . ̄ ̄∨ ̄ ̄ ̄
    . ∧,,∧
     ミ ゚Д゚ ミ たんにwavだけなら
     (ミ  ミ)  ム技板で質問してもいいかもね。
    〜ミ  ミ
      ∪''∪
63
(2): 名前は開発中のものです。 [sage] 02/01/21 15:52 ID:??? AAS
>>61
 function load(fn: string): string;
 var
  fs: TFileStream;
  ss: TStringStream;
 begin
  result := '';

  fs := TFileStream.Create(fn, fmOpenRead);
  try
   ss := TStringStream.Create('');
   try
    ss.CopyFrom(fs, fs.Size);
    result := ss.DataString;
   finally
    ss.Free;
   end;
  finally
   fs.Free;
  end;
 end;
こんなコードを使って
s: string;
s := load('gikohahaha.wav');
sndPlaySound( pchar(s), SND_MEMORY or SND_ASYNC );
とか。
64: 名前は開発中のものです。 [sage] 02/01/21 18:55 ID:??? AAS
stringヲツカウトハ━━━━━━(゚∀゚)━━━━━━ !!
65: 61 [sage] 02/01/21 23:34 ID:??? AAS
>>Delフサギコ
ム板はなんだか敷居が高く感じられるので(;´Д`)コワヒ。。。

>>63
無事動きました。(゚д゚)ウマー
えーと、いったんTStringStreamに読み込んで。。。
(;´Д`)理解するまでもう少し時間をください。
これから研究してみます。
ありがとうございました。
66: 名前は開発中のものです。 [] 02/01/22 01:16 ID:97pziEaT(1/3) AAS
MemoryStreamに読み込んで、Pointerプロパティを使うとかどうですかね
67: 61 [sage] 02/01/22 03:00 ID:??? AAS
いや、問題は
windowsはポインタを要求してるのに
delphiのコンパイラの型チェックが
string型しか通しませんぞゴルァ
と言ってるんで、どうしたものかと。。。

あれ、ひょっとして単に型キャストすれば良いのか?
pointerをPCharにキャストってできるもんなの?
68: 名前は開発中のものです。 [] 02/01/22 03:19 ID:97pziEaT(2/3) AAS
できます
69: 名前は開発中のものです。 [] 02/01/22 03:28 ID:97pziEaT(3/3) AAS
あ、Memoryプロパティの間違いでした
こんな感じで、キャストはいりません

ms:=TMemoryStream.Create;
ms.LoadFromFile('ding.wav');

//鳴らしたいときに
sndPlaySound(ms.Memory, SND_MEMORY Or SND_ASYNC);

//再生が終わったら
ms.Free;
70: 61 [] 02/01/22 03:31 ID:ygXI2h8+(1/2) AAS
━━━━━━(゚д゚)━━━━━━ !!

お騒がせしました。忘れてください。

//でも処理落ちの原因は別のことらしいことがわかっただけでも収穫。
71: 61 [] 02/01/22 03:37 ID:ygXI2h8+(2/2) AAS
ていうか普通にポインタ渡せるじゃん。今やってみたら。
【謎】何で前やったときできないと思ったんだろう。【馬鹿】
というわけで逝ってきます。
72: 63 [sage] 02/01/22 10:14 ID:??? AAS
stringに入れるのはキャストの問題っつーよりも
後始末忘れていいっていうメリットのためだったりする。
すでに動いてるコードがあったので貼っただけで、
キャストは普通にできるという指摘はするの忘れた(笑)

あと、ファイルから文字列への読み込みはこんな回りくどいことしなくても
TFileStreamからサイズ得て、読込先文字列にSetLengthして
Read(文字列[1], サイズ)とかやってしまうほうが手っ取り早いね。

なにぶん昔書いたコードなんで。
1-
あと 904 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s