1 :
名前は開発中のものです。 :
2009/03/31(火) 01:14:36 ID:IgyJcgap
2 :
テンプレ :2009/03/31(火) 02:12:19 ID:kzwE1qo1
DXライブラリに関係のない、例えば「C++のlistはどう使えばいいの?」といった 質問はその言語の初心者質問スレで。 教えたがりの中級者も極力答えないように。
俺はテンプレの
>>2 を見て、失望した。
STLを質問するのは確かにスレ違いではあるが、
それを言うのなら以前のコンストラクタ処理の話だって、float/doubleの話だってもスレ違いとなってしまうだろうに。
さらに言うと、あたり判定の作り方や、マップチップの表示の仕方やFPS管理の仕方などもゲーム製作に必要な知識が、DXライブラリと直接関係無いとぶった切られてしまうよね。
本当にDXライブラリ関数の使い方"だけ"しか質問できなくなってしまう過疎スレにしたいん?
俺は、DXライブラリを使ってゲーム製作をしている人たちによるゲーム製作全般における質問もアリだとおもうのだが。
あくまでDXライブラリ利用前提でどう実装すべきなのか話を進めたい時も多いだろうし。
>>4 俺も同意だよ。
特に最後の2行のためのスレだと思ってたけど…。
DXライブラリ関数の使い方だけの質問スレだったら公式BBSの方が的確だしね。
結局このスレ、「公式行け」だけになっちゃう。
むしろ過疎でいい
公式掲示板ですら、プログラム全般の質問OKなのに。
程度の問題。STLの話も当り判定の話も別に問題ない。 前スレのlist君が異常だっただけ。
>>4-5 お前らは公式で質問してろよ
なんで質問する事前提になってるんだ
>前スレのlist君が異常だっただけ。 具体的にどう異常だった?
12 :
名前は開発中のものです。 :2009/03/31(火) 14:13:05 ID:IkcCkAe5
>>11 前スレ少しでも見れば分かる程度のことだけど。
見た上で聞いてるなら、君やlistくんが全て正しいってことでいい。
10レスにも満たないやりとりで異常って言われても。
>>13 俺は知識披露してた年寄(ID:8c8Vy+u+、ID:wJL07IJT )のことを言ってるんだが。
前
>>920 を見てlist君という表現を使った。紛らわしかったならすまん。
>>14 list君と呼ばれたびっくりした。自分が年寄りの老害です。
知識披露するにも前
>>920 は、前
>>916 で聞かれたから素直に答えただけで……。
長文が目についてウザいのは判るが、聞かれたことに答えてるだけで話題は(自分からは)逸脱してないとおもうけどなあ。
自称中級者が懇切丁寧に説明するのはこのスレじゃアウトなん?
正直叩かれるのにビックリだ。
GetHitKeyStateAllを手動でやってたおれバカス
多分、流れ的に文句言ってるのは一人だと思うんだが なぜそこまで否定するのかが解らない。 普段ならスルーされる程度の話題だと思うんだけど。
19 :
名前は開発中のものです。 :2009/03/31(火) 20:47:39 ID:Ad7RXl/L
タイミングの問題じゃね? スレ立てじゃない>2が勝手にテンプレとか言って持ち越しにしただけ。
2はテンプレじゃないから無視でいいよ
さすがに早すぎて次作る時に見逃しそうだけどw
>>16 気にしなくていいと思うよ。
ためになるレスだったし、スレ違いでもなんでもないと思うよ。
DXライブラリを取り巻く事って、ゲーム作りのちょっとしたTIPSなんかも含むと思うし、
それにまつわる雑談なんかもいいと思うよ。
それこそDXライブラリ限定だとしたら公式がある限り誰もこのスレを使う必要ないしね。
前スレ916であるところの私は、ポインタはおろかクラスすら使った事なかったので、 せっかく教えていただいた知識も役立ててませんけどね……。 ああ、でもクラスは勉強して使ってみました。けど三行目がさっぱりわからず 結局1フレームに一回、自前でソートさせてます。
もうDXライブラリのことなんかどうでもいいんだろ? 正直に言えよおまいら
up or downのゲームすら作れません
まず、最初に up or downのゲーム を日本語で説明する文章を書きます。
>>27 だけど、確立チェッカー作って眺めてるだけで満足だわ
勝率と敗北率がお互い50%絶対超えないし、引き分け率も0.074-0.075の間いったり来たり。
数学やっぱ楽しいです^p^
30 :
名前は開発中のものです。 :2009/04/01(水) 18:22:56 ID:iMcacUMw
>>27 グー チョキ パーの画像作って
じゃんけんぽい ズコ!ってゲームつくるんだ
やっぴー も必要ではなかろうか
>4月3日にたぶんあるものを公表します。楽しみにしておいてください。 >...COMING SOON >なんか新聞社を敵に回してしまったかもしれません。あのサイトに数日前に導入した機能が・・・なにかあったらなにかあったと思ってください 何があったんだJEX氏
>>33 あの、、、1点だけ失礼します。
×確立
○確率
35 :
名前は開発中のものです。 :2009/04/01(水) 22:03:55 ID:iMcacUMw
やだ・・・恥ずかしい////
>>35 本当にIMEたんのこと想っているなら、誤変換をIMEたんのせいにしないであげて。
38 :
名前は開発中のものです。 :2009/04/02(木) 17:53:48 ID:QCCv4XDG
0から99の数字を高速で+1させていきボタン押した時のタイミングに出た
数字で内部判定すれば自力抽選みたいなことができる
子供のころあったゲーセンのメダルゲームのジャンケンマン初期のやつは
またコレがとんでもない上記のプログラムをさらに単純にしたプログラムで
なんとデモ画面のグーチョキパーの動きで勝率8割まで攻略可能だったという
(8割というのは10円いれる時の物理的なタイミングの誤差。よく10円つまるしww)
http://dgm.hmc6.net/museum/jyankenman.html
確立の多さは異常
以外もな。
定番の誤変換に突っ込むというお約束なのか、それともマジ指摘なのか。 いつも判断つかないんだが、何か良い方法は無いだろうか。
マジだぜ。 概出と違って。
>42 そうか、あれってマジなのか。 なんだか見るたびに変な応酬があって、うんざりしてたんだ。
普通に書けば全て解決
2.25bを使いたいけどBCC5.5な俺涙目w
VCを導入しようぜ。タダなんだし。
10年も前のコンパイラ(BCC)を使い続ける理由を教えてくれ
SP2をいれるとパソコンろくに動かない
そろそろPCの買い替え時だと思われ
今日、公表される何かを楽しみに待っているのですが。。。 依然、何も無し。。。
完全に初心者向け雑談スレになったな
初心者向けのライブラリだから仕方がない
なるほど。PCが重いからBCC使ってるわけね。若干斜め上の意見だった。 統合環境無くても、bcc.exeの代わりにcl.exe使えばいいんじゃない?
そこまで他人の環境に口を出す理由を知りたい。
流れを読まずにネタ。 VCでDXライブラリ使っているとインテリセンスが働かなくて不便だなと感じるようになった。 自分で関数やクラスを作るようになってからは。
最後にVC触ってから何年も経ってるから記憶は曖昧だし、 当時使ってたのがVC6だから、出来るかどうかは分からないが。 DXライブラリのソースを読み込む(コンパイルも?)と、内部用の辞書ファイルが生成される。 その辞書ファイルを、自分のプロジェクトのところにコピペ(上書き)。 こうすることでDXライブラリの関数群も、インテリセンスが使えたと思う。 もちろん自前の関数も問題なく使える。 辞書ファイルの拡張子はncbとかだったと思うが自信は無い。
VS2008だけどDXライブラリの関数も自前関数もインテリセンス働くよ。 もちろん働かないときもあるけどそれはVC++の気分次第っていうのはちょっとした常識じゃない? そういう時は何も考えずにまずncb消す。
あら、そうなの。 VC2003だからかな。 2008の無料の奴に替えよかな
そだな2003はインテリ働かないよ
いや多分VC++6の頃からVC++のインテリセンスは進化してないと思うよ。多分。 VC++のインテリセンスに関してはあまり期待しないっていうのが普通じゃないかな。 2010ではインテリセンスも含めてVC++とかMFCにも力入れるみたいだね。(2008SP1もMFCに力入れてきたし) だから多分2003から2008にしても変わらないと思うよ。 まあまずは終了させてncb消して起動しなおしてごらん。
>>63 知ってるなら教えてあげなよ。
俺は経験談と知ってる範囲で答えたまで。
1人ほど煽り荒らしが居るな
>>64 VS2005からヘッダに書いてあるだけでインテリセンスが効く
59の書き込みでインテリセンス効くって書いてあるんだから
確かめもせずに「多分」程度の確証で他人の書き込みを否定するのってどうよ?
なんだ59と62の書き込みは同じ人か、勘違いした ・VC6〜VC2003 ヘッダに書いてあるだけじゃインテリセンス効かない ・VC2005〜 ヘッダに書いてあるだけでインテリセンス効く
前ここにうpされてた奴がニコニコに上がってた
雪が降ってるエフェクト出したいのですが、 実装ほうほうがさっぱりなのですが……。 ランダムに画像を表示させても少しも雪っぽくなりませんでした……。
>69 サンプルプログラムのパーティクル基本が参考になると思われ。
>72 降ってる最中に移動量や方向は変わらないのか。 透明度が変わるのは面白いな。 あとたまに、真横や上方向に雪が飛んでくんだがw
>>72 おおサンクス。
C#使ってるからそのまま使えないのが残念……。
つかこれ勝手に使って良い?
>>73 変な方向に行くのは元のアルゴリズムが花びらだった名残だったり
>>74 どうぞ
>>72 綺麗だなぁ。
横だが自分も使わせて貰う。
もうDXライブラリ3Dに頼る必要すらなくなった 次はシェーダーについて学ぼう
馬鹿は発言するな
これってドレよ。 てかScreenFlipが重いなんて話あったっけ? 単に君の作ってるプログラムが遅くて、60FPSを保ててないのに 垂直同期信号待ちをさせたままって話じゃなくて?
シェーダーって使えるの?
プログラム優先度変更オヌヌメ
ノートPCでVistaだったら俺と一緒。 実行ファイルのプロパティ開いて、「互換性」→「WindowsXP SP2互換」にチェックを入れてみる。 もしかしたら幸せになれるかもしれない。
>>79 遅くするための処理を導入して重くなったとはどういうことなんだ?
>>79 たぶん初心者っぽいからこんなことをあえて言うけど
まずリフレッシュレートとプログラムのfpsを比較しないとね
ここぞとばかりに食いつく初心者たちの群れ
そういやDXライブラリがDirectX9ベースに移植してるって話はどうなった? あのコード量を移植するのは並大抵じゃないとおもうが、作者ガンバレ!
うーん、
>>79 じゃないけどただ ScreenFlip してるだけで CPU 使用率が 60% くらいになるのはなんで?
Pen4 の 1.6GHz だけど
それはScreenFlipの仕様。VSyncがくるまで待機するんだが、その待機時間もCPU使用率に含まれる。(実質アイドリングループなのだが) CPUが100%になるのがいやならVsync待ちを切ればいい。(ティアリングが発生するし、ゲームの速度も変わってしまう) 正しい設計はVsync待ちは有効で、なおかつFPS管理をし60fpsになるようにフレーム毎に適度にsleepを入れること。
1か所sleepするだけでもだいぶ変わりそうだねぇ
>正しい設計はVsync待ちは有効で、なおかつFPS管理をし60fpsになるようにフレーム毎に適度にsleepを入れること。 モニタのリフレッシュレートが60でない時はどうなるのかな。
公式より引用:
>前回の ScreenFlip から 10ミリ秒以下しか時間が経過していない場合のみ Sleep で処理を一時停止するようにしています
>>92 60fpsになるように管理してるんだから60fpsになるだろーがw
>>93 フルスクリーンにできる or デフォルトのリフレッシュレートが50 であるのであれば、Vsync有効。
ウィンドウモードでリフレッシュレートが60以外の場合は、ティアリングを犠牲にしてVsync切る。
(ウィンドウモードで垂直同期に合わせてしまうとティアリングの線が毎フレーム同じようなところにできてしまって、逆にきたなくなってしまう)
現状、DirectX7ベースのDXライブラリではウィンドウモードでのVsync無効だから、どうしようもないぜ。
すまん。誤字がすごい。レスは
>>92 へだ。
あと、50じゃなくて60。
ん? 50?
リロードしろ俺 orz
>>60 fpsになるように管理してるんだから60fpsになるだろーがw
だからどう管理するのかなーと。
単純に「1/60秒 - 前回のScreenFlipから経過した時間」でSleepかけると
モニタのリフレッシュレートが70の時、いざScreenFlipしようとした時には
すでに1フレーム経過しちゃうんだから、次のVsync信号待ちまで待っちゃうよね。
そしたら1フレーム 2/70 秒になって 35FPSって事なっちゃうのでは。
いや、当然こんな事解決する方法はあるんだろうけど
俺の頭じゃ難しくて。
>>94 >ウィンドウモードでのVsync無効だから
って言われるけどウィンドウモードで、どう見てもScreenFlipでVsync待った方が明らかにティアリングなしできれいなんだがなぜ?
リフレッシュレートを変えても同じ。
ただ、fps調整無しでリフレッシュレートのfpsになるように単純にVsyncを待った場合、
ウィンドウモードよりフルスクリーンの方が明らかに滑らか(高fps)を体感できる。もうよくわかんない。
70の時は1/70だから1/60よりも速いからその分だけ待てばいいのでは
>>99 OSはVistaかい?
VistaだとDesktopWindowManagerが自動でティアリング防止するように描画順を待機するようになるからティアリング無いかもね。(未検証でゴメン)
詳しくはここ。
http://d.hatena.ne.jp/enra/20081014#p2 で、XPでDirectX7環境だとティアリングが発生します。でもXPでもDirectX9が検出できた場合に限ってScreenFlipで垂直同期待ちになる模様。
(もしくはティアリングが発生していても、線がウィンドウの領域と被ってないので見えてないだけかもしれない)
>>90 なるほどなるほど
VSync まちでいろいろやってるループより sleep の方が軽いのは当然てことか
>>101 2000/XPです。
下方向に高速スクロールする画面で、Vsync同期/非同期を切り替えられるようにしてます。
明らかに違いが出てきますね。
ティアリングに敏感な人なら確実に分かると思います。
同期してないとガリガリしてるような気がします。
でも、フルスクリーンの方がさら〜って感じでさらにきれいに見えるのも謎。
60Hzと70Hzじゃ描画回数が違うので当然なんだけど。(見た目にも描画回数が多いのがはっきりわかる)
でもこれはウィンドウモードとフルスクリーンじゃ絵柄自体の大きさが違うので錯覚してるだけかも。
>でもXPでもDirectX9が検出できた場合に限ってScreenFlipで垂直同期待ちになる模様。
これはかなり興味深いですね。初めて聞きました。
ウィンドウモードでも間違いなく同期してると思ってる派なので調べてみます。
>>100 >70の時は1/70だから1/60よりも速いからその分だけ待てばいいのでは
そしたら70FPSになるんじゃないか。
70FPSは60FPSより1秒間に10フレーム多い事になるから、
6フレームごとに1回、空待ちさせれば60FPSを実現させる事はできるけど、
ゲームの処理時間が、「60FPSだと余裕があるが、70FPSだと足りない」
って時に処理落ちがひどくなる。
105 :
名前は開発中のものです。 :2009/04/16(木) 19:22:11 ID:/YbqE5Rh
14歳からはじめるC++ わくわくゲームプログラミング教室 って本に間違いってないですか? 何度書き直しても、サンプルプログラムにエラーが発生します (P118です)
なにそれこわい よくわからないけど、4章-01の最後、P125まで全部入れてひとつのプログラムだぞ。 ・main.cpp ・gameframe.h ・gameframe.cpp
107 :
名前は開発中のものです。 :2009/04/16(木) 19:41:32 ID:D5YSrYi0
なんかわかった気がする。 gameframe.h の先頭で、#include "DxLib.h" 宣言しておかないとむりぽ これ、本文に書いてない。 P120上の画面写真のプログラムには、しれっと入ってるけど。
エラーが発生したならその内容も書いておかないと
その本動画あったよ 誤植多いそうです
確かに、誤植は多いな。まぁ、ソースも付いているんだからWinMergeを使うのも勉強だと思えばいい。
>>104 int nowtime = GetNowCount();
static int oldtime = 0;
static int frametime = 1000 / 60
int diftime = nowtime - oldtime;
while(1)
{
if(diftime >= frametime)
{
oldtime = nowtime;
break;
}
else
{
Sleep(1);
nowtime = GetNowCount();
diftime = nowtime - oldtime;
}
}
こんな感じでScreenFlip()の前に書いてみて。
今ちょっと60Hz以外選べない環境なので今は確かめられないけど、
たしか以前試したときはちゃんと60Hz以外でも60fps出てたはずだよ。
>112 俺もそんな気がしてきた
今回の流れで試しに自作ゲームのタイトルのキー入力待ちでSleep(1)入れてみたら CPU使用率100%から0%になった/(^o^)\ナンテコッタイ 例えばタイトル画面とか即時性のない入力待ちの時って ちょっと長めにSleep入れたりするほうがいいのかな? 20msぐらいなら問題ないのだろうか・・・
>例えばタイトル画面とか即時性のない入力待ちの時って >ちょっと長めにSleep入れたりするほうがいいのかな? 少なくとも俺は入れてる。 >20msぐらいなら問題ないのだろうか・・・ 全然問題ないと思う。 もっと入れてもいいくらいでしょ。 実際にやってみて自分でストレス感じるなら減らせばいい。
入れすぎると、キー入力が飛ばされる可能性もあるので、注意したほうがいいよ。 20msぐらいなら大丈夫だけどね。
むしろ、何故キー入力待ちだけでループさせてることに突っ込もうぜ
タイトル画面が動くゲームもあるのだよ あと音楽のループ再生する時はScreenFlipを毎フレーム呼ぶ必要があるみたいだし
120 :
名前は開発中のものです。 :2009/04/17(金) 20:22:40 ID:xbUmRi3d
WaitKey(笑)
まぁ少なくともProcessMessage()はいれておくべきだよな。
>>118 音楽再生とScreenFlipは関係ないと思うよ。
CPUが100%になるのは明らかに異常だからちゃんとProcessMessage()かSleep()出来てるか確かめた方がいいよ。
たぶんウィンドウ自体をドラッグすらままならない状態だと思うから。
OSにタスクさえ返してあげられてればCPUが多少高くても気にしなくていいと思うけどなぁ。
ゲームって常駐させたり多重起動させたりするものじゃないし。
ProcessMessageさえ入れとけば大丈夫だと思ってた
124 :
118 :2009/04/18(土) 02:18:14 ID:k17DhjXo
うへあーw 素で間違えてたorz 何と言う勘違い 恥ずかしい限りです しばらくROMってます
ディスプレイ2台の環境でウィンドウを左右に振ると 片側のディスプレイだけ明らかに画面がぼやけるんだけど DirectXの設定かビデオカードの設定がおかしいんだよなこれ?
言い忘れ SetEmurationやSetGraphModeで画面を引き延ばすと起こるっぽい ディスプレイの設定なのかよく分からん・・・
ディスプレイ二台の環境使ってる人はそういないだろうから 同意求められても答えられる人ほとんどいないんじゃない?
128 :
名前は開発中のものです。 :2009/04/20(月) 22:52:47 ID:eX32oi4P
保守
129 :
名前は開発中のものです。 :2009/04/21(火) 15:00:56 ID:UkM4PCid
最初 ScreenFlipとScreenCopyの違いがわからんかった ScreenFlipは裏画面と表の内容を交換するで ScreenCopyは裏画面の内容を表に上書きコピーなんだったんだなー
C#の練習にDXライブラリ使ってみよう
>>125 シャギるな。俺もだ。
設定次第ではどうにかなるのかもしれんけど。
どっちにせよわざわざウィンドウを引っ張って画面を跨らせることもなかろう。
132 :
名前は開発中のものです。 :2009/04/27(月) 18:31:23 ID:FIDn8lAk
かっこいい爆発がつくれない
それはスレチ
DXライブラリの本を読んだけど、とても14歳から始めるような話じゃねーな 大学生が入門書に読んでちょうどいいレベルだろコレ
14歳から始めて30歳くらいで読み終わるっていう意味じゃないかな
14歳っつーと中二くらいか。 俺はBASICがせいぜいだったが、 マシン語とかやってる友人もいたし 決して無理じゃないだろう。
やっぱ0x14歳だったか
むしろ厨二がガツンとやられるための本
14歳の新版(VS2008対応版)は、3章までと4章以降のレベル差がひどい。 簡単に作れるように自前ライブラリ用意してるけど そのせいでDxLib関数なのか自前関数なのかごっちゃになってるし。 間に20章ぐらい入れて10本以上ゲーム作って、本の厚さが倍になってもいいぐらい。
世間一般の流れ 小学生 ゲーム遊ぶのおもしれえwww 中学生 ツクールおもしれえwww 高校生 VisualBASICとかC言語を始めるか 大学生 C++とかJAVAで2Dゲームでも作るか 20代 3Dゲーム、オンラインゲーム作るよ! 30代 何でこんな仕事を選んだんだろう…… 40代 クビになった。新しい仕事探すか…… 50代 息子よ。おれは昔、ゲーム開発をやっててなあ 60代 年金安いのう…… 70代 孫よ。わしは昔、ゲーム開発を(ry 80代 開発の仲間……もうみんなこの世におらん…… 90代 ゲーム? 何のことかいね 100代 「おじいちゃん! それはご飯じゃないよ、ゲームだよ!」 晩年 「おじいちゃんは亡くなる前に、大好きな『ハレハレユカイ』を唄っていました」
大往生だな。いい人生だった
>30代 何でこんな仕事を選んだんだろう…… いまここ
144 :
名前は開発中のものです。 :2009/04/28(火) 22:07:41 ID:MfOPTYG9
なんか画面のドット範囲が640×480で固定されてるんですが これいじる方法はDXライブラリには無いんですか?
公式のリファレンスくらい嫁と言いたいが つSetGraphMode
146 :
名前は開発中のものです。 :2009/04/28(火) 22:24:39 ID:MfOPTYG9
>>145 ありがとうorz
すみません。ウインドウモードの項ばかり探してました
「これいじる方法はDXライブラリには無いんですか?」って訊くくらいなら全部読めよ!
149 :
名前は開発中のものです。 :2009/04/29(水) 00:57:49 ID:8JDzhdlg
>21歳 卒業とともに小さな会社に一人だけ入社 何でこんな仕事を選んだんだろう……相談する同僚がいない >30歳 ←いまここ 俺
小学生 ゲーム好きだけどファミコン買ってもらえなかったから友達んちに通ってうざがられる 中学生 PC98買ってもらってtakeruとかでゲーム買ったりベーマガ買ってBASICで遊ぶ 高校生 女遊びでPCなんていじらない 大学生 にはならずにバイト生活。PCなんて無縁 20代 実家に帰るとWindows98とネットがあったので暇だったのでいじってみる。 ここでwebの世界やプログラミング熱再発。色々物色する。 そしてそのまま引きこもり。 30代 ←もうすぐここ
それは報告しなくてもいいです
してもいいです
そうですか
そうでづよ
そうでちゅわ
プログラマーは35歳で引退だからな プランナーや絵描きなどで生きられるだけの資産がなければ、そのままスクラップだ ゲーム会社も高齢化が進んでて、新しい概念が作れなくなってきている
なぜ35なのかというと、部下ができたりしてプログラムどころじゃなくなるから。 新しい概念が作れないのはゆとりが増えたから
それでも将来は……。
それはスレ違い
ドラッグ&ドロップで音楽を再生したいのですが DXライブラリで実現できますでしょうか? GetDragFilePath()の使い方がいまいちわかりません。 ご教授お願い致します_ _
>>160 D&Dに関しては、GetDragFilePathでググって出てきたページの内容を見る限り、
この関数は毎フレーム呼び出し、戻り値はD&Dされていれば0、されていなければ-1となる。
D&Dされてたら、引数で渡したバッファにD&Dされたファイルのパスが入ってくる。
ちなみにD&Dされたファイルの個数はGetDragFileNum()で取得できる。
複数ある場合は、その数だけGetDragFilePathを呼べば1つずつファイルパスを取得できる。
ちなみにこれらは毎フレームに一度DragFileInfoClear()で初期化してから使うべき。
ただ情報が古い可能性もあるし、実際試したわけじゃないから、
今のDXライブラリでできるかどうかは知らない。
読み返して気付いたが、ひどい日本語だ・・・まぁいいや
163 :
名前は開発中のものです。 :2009/04/30(木) 01:56:07 ID:JGk3snwA
#include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){ ChangeWindowMode(TRUE); SetMainWindowText("(´・ω・`)"); if(DxLib_Init() == -1 ){return -1;} int open,tdn,cc;char file[256]; SetDragFileValidFlag(TRUE);SetDrawScreen(DX_SCREEN_BACK);SetFontSize(32); while(ProcessMessage()==0){ ClearDrawScreen(); open=GetDragFilePath(file);//D&Dでファイル獲得する open:ファイル獲得が成功か失敗か判定 if(open==-1&&CheckMusic()==0)DrawFormatString(0,100,-1," なんか音楽を食わせろ!ESCキーで終了"); if(CheckMusic()==0&&cc==0){SetMainWindowText("(´・ω・`)");cc=1;} if(CheckMusic()==1)DrawFormatString(0,100,-1," 音楽を止めるのならスペースを押せ!"); if(CheckHitKey(KEY_INPUT_SPACE)==1)StopMusic(); //スペースで音楽を止める if(CheckHitKey(KEY_INPUT_ESCAPE)==1)break; //エスケープで終了 if(open!=-1){ //ファイル獲得成功 cc=0;SetMainWindowText(file);tdn=PlayMusic(file,DX_PLAYTYPE_LOOP);} ScreenFlip();Sleep(20); //音楽ファイル以外を食わせた場合w if(tdn==-1){MessageBox(NULL,"(゚Д゚)ゴルア!"," それ再生できねーし",0x0000030);StopMusic();break;} DragFileInfoClear(); } InitSoundMem(); DxLib_End() ; return 0 ; }
>>161-163 ありがとうございます!!
>>163 さんにはサンプルまでご用意いただいて感激です!
これでBGMをプレイヤーに指定させることができます。
即レス感謝!ありがとうございました!!
個人的にはAPI使って、ファイル開く形式を勧めたいが……
最初からサンプル書いてくれと露骨に頼めば可愛げもあるのに。
暫定的にDrawStringで文字を描いていたんだけど、 見栄えや諸々の理由で画像ファイルとして文字を作ることにした。 インストールされてるフォントを使って12x16のサイズのカタカナを ほぼそのまま描いてるんだけど、どうしてもエッジが目立っちゃう。 縁取りとか、影とか、ぼかしとか色々試したんだけど難しい。 みんなはどうやってるの?あと、デザインとか凝ったりするの?
>>167 その辺は、普通に。 まずは、見栄えとかよりも、完成が先だしね。
「文字 CG 講座」とか「ロゴ 制作」とかで検索すrば、やりたい事の方法が見つかると思う。
なんの為の文字かってのにもよるだろうけど、 セリフとかそんなヤツなら、何も工夫せずにそのままDrawStringで表示してる。 >デザインとか凝ったりするの? デザインが大事なのは理解してるが、センスが壊滅的なので あきらめて最低限で済ませてる。
>>168-169 ありがとう。俺もデザインが壊滅的です。
しょぼ画像で今まで普通にやって来たんだけど、
先日ゲーセンで業務用のゲームを見たのがいけなかったw
最近はフォントを一文字ずつ手打ちでドット修正して、
気付いたら4、5時間経ってて結局上手くいかなかったとかあって。
まあでも、「この方法では出来ない」っていうのが少し分かったのは収穫だけどw
ゲーム作るのってやっぱり色々な知識が必要だね。
その試行錯誤が楽しくもあり面倒くさくもあり
ロゴはなぁ… それで飯食っている奴がいるくらいだから奥が深いよな。 フォントの選定とか字間とか決めるだけでも大変。
英数字だけ程度ならフォトショとかで作るけど、 台詞に使って日本語漢字とかまでなるとやってられないから普通に既存フォントのでやってるな。 フリーのフォントいくらでもあるから、それ使えばいいんじゃないか? テキストに文字書いておけば、指定フォントのを画像ファイルにして出力するソフトなかったっけか。
2009/5/1更新 2.25b
ちょいと質問です。 SetAlwaysRunFlagで非アクティブでも処理を実行し続けるようにして アクティブ時はCPU使用率15〜20%ぐらいでスムーズに動いてるけど 非アクティブ時は、CPU使用率が0近くになってしまいます。 処理もカクカクになってしまうのですが、 どうにも原因や解決法について手詰まりになってしまったので 何かアドバイスをいただけませんでしょうか?
>>176 Σ (゚Д゚;)うおー解決したー!!
DXライブラリ自体の仕様的問題だったとは・・・
ありがとうございましたー
GetRandを使って1回だけ乱数を取得するってどうやるの?
意味がわからないけど、一回だけGetRandすればいい……って事じゃないの?
do while文使うとループ処理終わらないんだけど俺だけ? どんな簡単な条件でもだめ whileは全然問題なし、仕方ないからfor文で代用した
環境とかソース示してくれない事にはなんともいえん。
>>180 hello world的なコンソールアプリだとなんともないのに
DXライブラリだと動かないのか?
またまたご冗談を○ノ
DXライブラリで遊んでて、 3Dも触ってみたくなったら次はどの辺のライブラリがお勧めかな?
直に叩くのマジお勧め。 ライブラリを使うにしても。
>>185 直かー、興味はあるけど難しそうだね
その辺もライブラリのソースを見てみたい感じ
DXライブラリ3Dを引き継いでる(?)のがSiv3Dで公開はまだしていないのか
187 :
名前は開発中のものです。 :2009/05/09(土) 03:40:25 ID:lfg6KlkW
真・女神転生のようなダンジョンマップ一度作ってみたい
>>184 現時点ではDarkGDKがお勧め。
DarkBasicをC言語で使えるようにしたライブラリだが、DXライブラリ並に簡単に3Dが使える。
資料もDarkBasicのものが使えるから検索すればかなり見つかると思う。
>>185 直叩きはいいけど、ウインドウズと付き合うのがイヤなんだ俺は。
今の俺の技術なら、WinProcの多重switch〜caseの悪夢から逃れられるかもしれないけど。
ここが奇麗にラッピングできたら、DxLibから離れられる。
このライブラリってc++でしか開発できないの? cでも動く?
>>190 意味も分らずに質問してるのか?それとも釣りか?荒らし?
>(使用する際はC言語の知識だけで大丈夫です)
と、Topページにすら書いてあるが・・・・・
>191 その回答だと、それはそれで微妙じゃないか?
Cのコンソールで一通りの基礎を抑えたレベル(ポインタは微妙だけど) OpenGLも基礎の基礎ぐらいは分かる。 しかしC++は全くやったことないから、Cのソースコードでも動くのかなぁって思ってさ つうかこの俺のこの程度のレベルで開発できるのか?w
心配するな。 BASICくらいしかまともに使えなかった俺でも作れてる。
予想どおりだけど、Cではコンパイル通らなかったよ。
>>195 自分も通らなかったから、やっぱりcppでやらないとダメか…。
でもcとc++の違いって引数の所とかreturn 0;を入れる事ぐらいだよね
それなら俺にも作れそうだ
最初は、C++はCの文法がまんま使えると思ってていいと思うよ。 そりゃ細かいところは違うけど。
俺はmainがwinmainに変わったぐらいしか意識せずに Cのつもりで書いてるけど特に問題は起こってない。
俺はCとC++の違いなんて知らんけど、少なくともBASICとC++の差に比べたら無いも同然だろう。 きっぱり乗り換えた方が早いと思うよ。
Cでも書けるけどコンパイルはC++としてしなければいけない ってことでしょ CからC++の関数呼べないだろうし
203 :
名前は開発中のものです。 :2009/05/10(日) 01:23:34 ID:ZcEG6Uji
テキスト読み込ませるにはどうしたらいいんだろ?
>>202 184じゃないけど良いなコレ
まあスレ違いだからここではやめとくが
>>203 それはDXライブラリと関係ない、C言語の領域だからぐぐって探せばみつかるでしょう。
まぁひとつ言っておくなら、読み込むだけなら
テキストファイルだろうとバイナリファイルだろうと関係ねーって事でしょうか。
それがテキストファイルかバイナリファイルかを区別するのは人間の仕事。
コンピュータにとってはどっちも数字の羅列です。
>>202 おお、簡単そうでいいな。
と思ったが商用だとライセンス必要なのか。
「同人は金とるけど商用ではありません」って理屈がアメリカに通用するかどうか。
あれー? exeクリックしても何も起こらないや。 動かすのに必要な環境とかあるのかな
何の話?
>>203 >>205 せっかくだから DxLib でやろうぜ。
以前、なんかダサイ感じのやつを作った記憶あったのでうp
int MapInit()
{
int FileHandle = FileRead_open("StageData.txt");// ファイルのオープン
int FileSize = FileRead_size("StageData.txt");// ファイルサイズを取得して
char* FileImage = new char[FileSize];// その大きさだけ領域確保
FileRead_read( FileImage,FileSize,FileHandle);// 一気読み
FileRead_close(FileHandle);// ファイルを閉じて終了
const char* d = FileImage;
while(*d != '\0'){ // NULL文字(終端)ではない間
switch( *d ){
:
:
それ、NULL文字はどこでセットされるのさ?
PlaySoundMemでmp3の音楽ファイルをループ再生した時、 曲がはじめに戻る時に一瞬無音部分が挿入されてしまうのは仕方の無い事なんですかね?
指定秒数から再生みたいな関数無かったっけ
あるよ。 俺使ってるから間違いない。
いや頭は正常だけど終わりの部分と頭の間に微妙な空白期間があるんだけど。
それはMP3自体にはまったく空白が無い状態で? てか空白が頭なのか終わりなのか区別つくのか? 俺はoggでやってるけどそんな現象は出ていない。 oggでなくてmp3だから空白が出てるってのも考えにくいし……。 たとえば、 // 音声をループ再生する PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ) ; // キーの入力待ち WaitKey() ; こんな感じで音楽鳴らしてWaitKeyで待たせてるだけの状態でも空白は出る?
空白をカットすれば
MP3とかoggを直接編集できるフリーソフトとかあるから それでまず音楽データ自体に空白が入ってないか確認するのが先かな。 (俺は古いけどspwaveっての使ってる)
ゲーム開発って、ファイル分割がキチンと綺麗に出来るかどうかで難易度グッと変わるよね? いまいちヘッダーファイルに何書けば良いのか分からん。 ヘッダーファイルに書くのって基本的に 構造体、グローバル変数、クラス で良いんだよな? でもグローバル変数はそのまま書くより、メインの実行処理を書いたソースでグローバル宣言して、externしたのをヘッダーに書いた方が良いのか? 中々難しい
ヘタレプログラマな俺は何も考えずにやってる。 必要性を感じたらやればいいなと。
再利用性ってのがあるだろ 他のプロジェクトで同じヘッダーを使いたいって時があるはず stdlib.hやwindows.hなどは、頻繁に共有して使う定義をまとめてあるわけだな ゲーム開発では、バージョンアップや拡張版を作る時に意識する そういうのが前提になくて、ただ使い捨てのマイナープログラムを作りたいだけなら ヘッダーに書こうがソースに書こうが大した違いにはならん 集団開発ではこういう実動的な概念を知ってないと、プロジェクトに致命的な遅れを引き起こす原因になる 読めないソース、意味のわからない変数名、再利用性の全くないヘッダー そういうのを書く奴はとても多い 同僚から「早くクビになれ」と睨まれてるのに、大抵は自覚がない
mp3の仕様上、変換した時点で前後に無音部分が入るのは避けられないんじゃなかったか? 無音部分のないoggを作れば大丈夫だと思う
wavの状態で編集→mp3にエンコ
これでmp3にした場合だけループに空白が出来る。
でも編集ソフトでmp3ファイルを見てみても無音が入っていないので
ファイル自体じゃなくてループ再生時に無音が入っちゃってると予想してる。
>>223 のような情報もあるのでwavからoggでやってみようと思います。
むしろmp3でちゃんとループしてる人がいるなら是非そのファイルをくれませんか?
まー、mp3使う理由なんてないだろ
>>220 グローバル変数を何の工夫もなくヘッダに書くのはありえない。
でも、1つのソースファイルからしかincludeしないなら
ヘッダの意味もないが、トラブルも出ないし好きにしたらいい。
>ヘッダ 例のセガの人の本によれば ヘッダファイルは、そのモジュールの顔のようなものなので、 自分からしか参照しないものはヘッダに書くな、だそうな。
OPムービーをつけたいのですが動画挿入ってできます?
普通にありましたすみません
みんなDXライブラリをなんて読んでる? ディーエックス?デラックス?
ディーエックスかな てかそもそもデラックスなんて意味込められてたっけか?
よし! 今度、自分用のライブラリを作る時は超合金ライブラリという名前にしよう。
ぼくはダブルエックス!
俺はデラックスって呼んでるな。カービィDX的なノリで
DXライブラリ…… それは裏切りを意味する言葉。
237 :
名前は開発中のものです。 :2009/05/14(木) 23:52:26 ID:JXz6JeNm
DXライブラリってProcessMessageでメッセージをひとまとめに扱ってますが このことによって何か出来なくなる(制限される)ことってありますか? ウインドウズプログラム的に。
画像を多く使う予定なのですが、 DrawRectGraphでその都度座標を指定して描画するのと LoadDivGraphやDerivationGraphで新しくグラを作成するのってどっちがいいとかありますか? 面倒なのですがDrawRectGraphの方が軽そうな感じがして…
後者の方が速かった気がする 実際に試してみるのが一番いいと思うけど
241 :
名前は開発中のものです。 :2009/05/20(水) 22:50:34 ID:XKq5DK9V
ありがとうございます。両方試して比べてみます。
結果の報告お待ちしております
いちいち画像読み込むとハードディスク使うから遅い メモリに読み込んでハンドル返す方法は高速に描ける 速度を必要とする場面かどうか検討するといい 使い捨ての場面ならメモリに確保しない方が開発の負担が小さいし 何度も使うのならメモリに読み込んだ方が処理の負担が小さい 一般的には後者に統一することが多い 似たような話で、画像にjpgやpngを使ったり、mp3を使うのはCPUに負荷を掛けるので 通常素材にはbmp、効果音にはwavを使うのを勧める (企業開発で形式を隠蔽したいわけでもないし)
大した負荷じゃないんじゃない?
HDDからいちいち読み込んでるとアホみたいに遅くなるぞ
下三行への突っ込みだと思う
jpgやpngはロードした時点でbmpに変換されるんじゃなかったっけ。
pngやらはゲーム処理が遅くなるかもしれんが、 bmpを使うとゲーム容量が馬鹿デカクなる気がする 実際にどれほど処理・容量の違いがあるのかが知りたいNe!
いまどきbmpで作ったからって容量が多くなりすぎて困るって事はないと思うけどなぁ。 3Dゲームとかノベルゲームとかならまだしも。 むしろ容量食うのは音楽。
ある程度DL数が多かったり、自宅サーバだったりする場合は けっこう容量も気になってくるのだそうな。
bmpじゃないと透過色が定まらない…
俺はpng一択。αチャネルを1ファイルで処理できるのが便利すぎる (bmpやjpgだとチャネル用の別画像を用意しないといけない) ちなみに読み込みだけにCPU負荷がかかるだけで、 テクスチャになってしまえば転送速度は同じ。 bmpの場合はファイルサイズも大きくなり、読み込みに時間が逆に掛かることもあるので、適材適所が良いと思います
質問。 32x32の画像があって、これを2倍に拡大して表示するのと、 64x64の画像があって、これを等倍で表示するのとでは、どっちが高速? 拡大する手間がある分だけ遅くなると見るべきか、元々の画像が小さいから有利と見るべきか。 実測してみたけど、いまいちよく分からん。
実測してわからないのならどうしようもないような……。
>>253 前者の方が早いでしょう
拡大表示処理はハードウェア(Direct3D)で行うので、とても高速ですよ
256 :
239 :2009/05/23(土) 12:29:43 ID:A4cQi3hh
2000*4000くらいの大きな画像や、小さい画像を1000個くらい描画してみて DrawRectGraphとDerivationGraphの違いを検証してみましたが、 メモリ、ビデオメモリ、処理速度に目立った違いは見受けられませんでした。 なので扱いやすいDerivationGraphを使って行こうと思います。
257 :
名前は開発中のものです。 :2009/05/23(土) 13:25:24 ID:ORU4uz0n
自分や友人がDxLibを使って作ったゲームを俺のPCで起動させると、始めはいいんだが、しばらくしてから必ず30フレームになってしまうのはなぜかわかる人いるか? 俺のPCは「VGN-AW71JB」っていう型なんだが…。PC版のスプリンターセルはヌルヌル動き続けるし、スペックの問題ではないと思うんだが…。64bitのvistaってのがなにか影響してるのかな?
257 名前:名前は開発中のものです。[] 投稿日:2009/05/23(土) 13:25:24 ID:ORU4uz0n 自分や友人がDxLibを使って作ったゲームを俺のPCで起動させると、始めはいいんだが、しばらくしてから必ず30フレームになってしまうのはなぜかわかる人いるか? 俺のPCは「VGN-AW71JB」っていう型なんだが…。PC版のスプリンターセルはヌルヌル動き続けるし、スペックの問題ではないと思うんだが…。64bitのvistaってのがなにか影響してるのかな?
インデックスカラー方式の画像描画はどうやったらいいんでしょうか。パレットを切り替えて色を途中で変えたりしたいんですが。
一度メモリに読み込んでからパレット部分を書き換えて、グラフィックハンドルに登録する。 つまり、途中で自在に色換えはできない。 わかる、君のやりたい事はわかる。 スプライトの色変えみたいに自在にやりたいんだよな。でもできない。
PCってファミコン以下の糞環境なんですねラスタースクロールもできないし
DirectXでも弄ってろよ
ラスタースクロールなんて10年ぶりに聞いた
>しばらくしてから必ず30フレームになってしまうのはなぜかわかる人いるか? 処理速度が低下するような時は、メモリーリークの可能性がある、 簡単に書くと、メモリを解放せずループで使いっぱなしにすると メモリーがどんどん不足してゆき処理速度低下として症状が現れる。
>>259 一色ごとに画像を抽出してそれを全部白くして、表示時に色をいじってだね・・・
コストはかかるが、あくまで自由自在に色をいじりたい奴だけそうしてみるとか
266 :
名前は開発中のものです。 :2009/05/24(日) 04:14:52 ID:7GmmmL9x
FilmtnとBCCつかうとコンパイルとプログラム実行一瞬でめちゃくちゃ速いな VC2008は豪華だけど重い
267 :
名前は開発中のものです。 :2009/05/24(日) 17:40:43 ID:seD1hHi/
>>264 同じソースでも、友人のPCだったら落ちないという…
落ちないようにするにはどうしたらいいかな?
※と、書いてる途中でタスクマネージャーを見たら、CPU使用率が90%以上に張り付いてた。
他何も起動してないし、アプリケーションを停止したら0%に戻る。意味不明。
そりゃ友人のPC環境が良いだけって話にならんかね。
まぁ、ソースを見ないとなんともいえないな。 文字描画するのに、毎回文字の大きさ変えて描画してるとか
270 :
名前は開発中のものです。 :2009/05/24(日) 23:50:08 ID:seD1hHi/
自分 CPU:Core 2 Duo 2.66GHz RAM:4.00GB 友人 CPU:Core 2 Duo 2.40GHz RAM:2.00GB ソースとして挙げるなら、DxLibのホームページの、ゲーム作成講座のソース。 四角君が自分に向けて弾を撃って来るあのソースですらなりました。
いちいちageるなぼけ
c++教室の2Dアニメーションのプログラムを書いたんだが、表示されない 何が悪いのか……
それは愚痴か、質問か。 質問だったら「エスパーじゃないんだから、そんな事知らん」
DirectXを最新版にしてみたら?
指定ファイル名が違うとかダブルバッファの処理がおかしいかメモリに読み込まれてないかじゃね
俺はScreenFlipでの垂直同期周りだと予想 グラボと設定によっては同期待ちのタイミングでCPU処理に加算されとても重く「感じる」ことがある。
277 :
名前は開発中のものです。 :2009/05/25(月) 15:09:43 ID:bb62p5Sd
SetWaitVSyncFlag(FALSE); でカオスになるぜ!
>277 誰もが一度は通る道www
3D背景を実装するのって難しいかね
あなたの実力による
チラ裏。 Dxライブラリをうまく名前空間に突っ込めないかなー、と思ったが 自前で改造しなきゃならない量を考えると挫折しそうだって愚痴。 >279 3Dで作った背景を2D画像に落として、 無理やりパターンアニメで表示させてるって作品があったような気がする。
283 :
279 :2009/05/29(金) 06:57:39 ID:Vqjs1m4E
>>280 ふむ…努力次第でどうにでもなるという解釈でおkかな。時間はかかりそうだがやってみないことにはわからないな
>>281 横シューのなら見たことあるwwものすごい労力の割に拡張性が無さそうでなぁ…
>>282 おお、こんな感じで動かせられるなら…
とりあえずテクスチャを簡単にくりくり動かせるような関数でもつくってみることにする
284 :
名前は開発中のものです。 :2009/05/29(金) 21:51:58 ID:izoQPgWw
VC2008って無意味に重いなあ 関数かいてカーソル合わせると宣言が表示されるから便利なんだけどなあ
ツール→オプション→環境→自動バックアップ→自動バックアップの実行間隔→60分ごと
286 :
名前は開発中のものです。 :2009/05/30(土) 23:32:29 ID:3JWvpnu4
>3Dで作った背景を2D画像に落として、 >無理やりパターンアニメで表示させてるって作品があったような気がする。 いいねこれメガテンの3Dダンジョンみたいなのに使えるな
287 :
名前は開発中のものです。 :2009/05/31(日) 03:54:51 ID:/tj3gvKS
int state = 0; swith(state){ case 0: if(CheckHitKey(KEY_INPUT_RETURN)){ 文字表示 state++; } case 1: if(CheckHitKey(KEY_INPUT_RETURN)){ 文字表示 state++; } case 2: if(CheckHitKey(KEY_INPUT_RETURN)){ 文字表示 } } という風にすると、全部一気にキー判定されて、同時にすべての文字が表示されます。 WaitKeyとかWaitTimerを使う以外で、エンターを押すごとに順番に表示させるにはどうすればいいでしょう?
>>287 コンパイルしてないから、実際に動くかは知らんが、
enterが押しっぱなしの時は、flagを0にシナイので、
enterが離されて、再度flagが0になってからswitch文の実行が行われる。ように改造すれば
望みの結果が得られると思う。
int state = 0;
int flag =0;
if(flag == 0){
switch(state){
case 0:
if(CheckHitKey(KEY_INPUT_RETURN)){
flag =100;
文字表示
state++;
}
case 1:
if(CheckHitKey(KEY_INPUT_RETURN)){
flag =100;
文字表示
state++;
}
case 2:
if(CheckHitKey(KEY_INPUT_RETURN)){
flag =100;
文字表示
}
}
}else if(flag != 0)
{f( !CheckHitKey(KEY_INPUT_RETURN) ){
flag =0;
}
/*
>>287 の意図する動作かどうかわからんが、俺がいつも使ってる方式
キーバッファを設けることによって、押された瞬間を判定することができる*/
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
ChangeWindowMode(TRUE);
if (DxLib_Init() == -1) {return -1;}
SetDrawScreen(DX_SCREEN_BACK);
char key_buffer[2][256]; // キーバッファ
int state = 0;
while (ProcessMessage() != -1) {
ClearDrawScreen();
// 前のフレームの入力状態を保持
for (int i = 0; i < 256; i++) {
key_buffer[1][i] = key_buffer[0][i];
}
// 現在のフレームの入力状態を取得
GetHitKeyStateAll(key_buffer[0]);
// 「現在のフレームで押されている」かつ「前のフレームで押されていない」ならば
if (key_buffer[0][KEY_INPUT_RETURN] && !key_buffer[1][KEY_INPUT_RETURN]) {
state++; // 次の状態へ
}
// state の値によって分岐するなり何なり
DrawString(0, 0, "Press enter key!", GetColor(255, 255, 255));
DrawFormatString(0, 20, GetColor(255, 255, 255), "状態%d", state);
// 適当なところで終了
if (state == 10) {break;}
ScreenFlip();
WaitTimer(10);
}
DxLib_End();
return 0;
}
とりあえずbreakしようぜ
if((CheckHitKey(KEY_INPUT_RETURN))&&LeftFlag==0){ LeftFlag=999; 文字表示}else LeftFlag=0; 押したときだけ処理するようにすればいけそう?
static break
if(CheckHitKey(KEY_INPUT_RETURN)){ if(enter_cnt<100){enter_cnt++;} }else{ enter_cnt=0; } if(enter_cnt)//押している間 if(enter_cnt==1)//押された瞬間
if(CheckHitKey(KEY_INPUT_RETURN)){ if(enter_cnt<100){enter_cnt++;} }else{ enter_cnt=0; } 半角消えるのか
>>286 DOGA最盛期にうんざりするほどあったよそういうの
296 :
名前は開発中のものです。 :2009/06/01(月) 03:53:44 ID:ojIQArFl
CheckHitKeyで押された回数を数えるにはどうしたらいいでしょう?
>296 if文とインクリメント
>>296 今話題の押された瞬間を数えて適当な変数に保存しときゃいいんでね?
299 :
名前は開発中のものです。 :2009/06/01(月) 04:12:11 ID:ojIQArFl
下のプログラムを改良して、エンター押すごとにA,B,C,Dを表示させていくにはどうしますか。 下のままだと、ABCDっていっきに表示されます。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE); if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1; int col1 = GetColor(255, 255, 255); char input[4]; int i = 0;
300 :
名前は開発中のものです。 :2009/06/01(月) 04:13:52 ID:ojIQArFl
>>299 続き
while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
if(CheckHitKey(KEY_INPUT_RETURN)){
switch(i){
case 0:
input[i] = 'A';
break;
case 1:
input[i] = 'B';
break;
case 2:
input[i] = 'C';
break;
case 3:
input[i] = 'D';
break;
}
i++;
}
if(CheckHitKey(KEY_INPUT_SPACE)){
ClearDrawScreen();
DrawString(0, 0, input, col1);
}
ScreenFlip();
}
DxLib_End();
return 0;
}
キーを1回押されるごとに処理したい場合の あるごりずむ体操 (ループはじめ) ↓ <前回キーが押されていたか?> YES→ (ループおわり) ↓ NO <キーが押されているか?> NO → (ループおわり) ↓ YES [キーが押された時の処理] ↓ (ループおわり)
iの値も0に戻してあげようね
リアルタイム処理でないのならScreenFlipのあとにでも↓を追加しときゃいいんじゃね? while( ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0 && CheckHitKey(KEY_INPUT_RETURN) == 1 ){ Sleep(16) ; }
>>301 昔、組み込みプログラムでやったな、そういう処理。
クラス化するとか class Key { private: int keyCode, state; public: Key( int KeyCode ) : keyCode( KeyCode ), state( 0 ) {} int CheckHit() { int tmp = state; state = CheckHitKey( keyCode ); return tmp ? 0 : state; } }; //WinMain ... Key enter( KEY_INPUT_RETURN ); if(enter.CheckHit()){ ...
無駄すぎ糞ワロタ
そこで無駄のないソースの登場ですね。
俺もクラス化してるから、簡潔な方法があるなら教えて欲しい。
そもそもこのプログラムはスペースを押さないと表示させないようにしてるのかな
それはともかく言われたように押してくごとにABCD表示させようと思ったら
>>300 を変更するとしたら
int returnOn = 0; // ←
while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
if(CheckHitKey(KEY_INPUT_RETURN) && !returnOn){ // ←
switch(i){
case 0:
input[i] = 'A';
break;
case 1:
input[i] = 'B';
break;
case 2:
input[i] = 'C';
break;
case 3:
input[i] = 'D';
break;
}
i++;
returnOn = 1; // ←
}
if( !CheckHitKey(KEY_INPUT_RETURN)) returnOn = 0; // ←
(以下略)
とかやるとか
static変数のフラグ使うのが一番単純だと思うなあ
hsp時代にも散々似たような処理書いたなぁ… なんかゲームのメインループ() { if((Aボタン==1)&&(Aボタンバッファ==0)) { なんか押された瞬間だけ1回やりたい処理 } Aボタンバッファ=Aボタン } 最初からKEY_DOWN、KEY_UP的なものがライブラリに有れば楽なんだが ゲームじゃしょっちゅう使うし
32ビットか64ビットの整数をバッファにしてビット演算で書き込み、取り出しが一般的だろ そのバッファに生でアクセスすることはあまりないが、 かといってキーごとにオブジェクト化するのもありえない
299にいきなりそんな話してもわかんないでしょ。
抜けてたが、 上の例の場合、バッファは二つ以上ないとあまり意味ない キーがマッピングしきれないって人はchar配列とか使えばいい よりこだわる人はRawInputで
入力の話題が出たので
キーコンフィグの実装で悩んでるんだけど、
>>315 とかだと KEY_INPUT_なんとか の部分は変えられないし
どうやってキーコンフィグ実装するんだろうか・・・
同じようなソースでenumを弄っても根本的には変わらないし
少しは頭使えよww
>>315 の例で言うならkeyb_keyを動的に書き換えりゃよかんべよ
KEY_INPUT_なんとかとスクリーンに表示する文字との対応表は作らにゃならんが
抽出 ID:fOpSnwq/ (3回) 312 名前:名前は開発中のものです。[sage] 投稿日:2009/06/02(火) 09:48:11 ID:fOpSnwq/ 32ビットか64ビットの整数をバッファにしてビット演算で書き込み、取り出しが一般的だろ そのバッファに生でアクセスすることはあまりないが、 かといってキーごとにオブジェクト化するのもありえない 314 名前:名前は開発中のものです。[sage] 投稿日:2009/06/02(火) 11:08:32 ID:fOpSnwq/ 抜けてたが、 上の例の場合、バッファは二つ以上ないとあまり意味ない キーがマッピングしきれないって人はchar配列とか使えばいい よりこだわる人はRawInputで 317 名前:名前は開発中のものです。[sage] 投稿日:2009/06/02(火) 23:00:27 ID:fOpSnwq/ 少しは頭使えよww
>>316 自分の場合:
ちょっと
>>315 と関数の仕様が違うけど
KEY_STATE getKeyState(int pad_num, KEY_FUNC key_func);
if(getKeyState(1, shot_btn) == KEY_DOWN){
ショット処理
}
コンフィグのiniファイルかなんかを読んで
shot_btnとかjump_btnとかの数字を適当に書き換える
今パッと思いついただけでコンフィグ実装したことないけど
>320 俺も大体そんな感じでやってる
変な質問。 ウインドゥモードにした場合、勝手にウインドゥを作成して表示ではなく、あるウインドゥを使うように することってDXライブラリではできますか?
>>322 例えばIEのウィンドウに表示したりとか?
意味がよくわからんが何より意図がわからない
どうせならGetHitKeyStateAllの方使った方がよくね
MDIにしたりとかだろ。 無理じゃないか?
>>324 ジョイパッド無理じゃなかったっけ?
まぁ可能かどうかは別にして
それをどうラッピングして押下げや押上げの判定を楽にしようかって話なんじゃ
俺の場合はGetJoypadInputState と GetHitKeyStateAll を併用で一括入力管理して 押上判定は個々の部分でやってるな。
みんな色々なやり方で面白いな。 自分はWin32APIのイメージが強すぎたせいか KEY_UPとかキー状態の列挙体を戻り値で返す方法前提で考えていたけど メンバにアクセスして真偽だけ返すという手もあるのか…
いや307は俺。
おいおい勝手に俺を名乗るなよ
俺も307です
じゃあオレも307
俺がこんなにいるなんて……作業がはかどるかなぁ。
能力は1/5だけどな
天津飯かよ
>337 名乗ったのが4人なら、もっと天津飯ネタを取り入れていた
2Dに限ってなんだが 結局の所 DXライブラリで作ったゲームと OpenGLで作ったゲームと DirectXで作ったゲームって どこがどうちがうの?ほぼ一緒だろ?
>>340 DXライブラリ:楽。動作実績が大きい。
OpeGL:日本のゲーム作りに関しては情報少ない。
DirectX:DXライブラリと似たようなラッパーを書く事になる。動作検証要。
DXライブラリのサポートは金とってもいいレベル
世界的な実績で言うなら、その3つの中で一番下のような気もするけどなーw
ツクールシリーズ →日本人からプログラミングの素養を奪い取るキラーソフト DXライブラリ →日本人から3Dプログラミングの素養を奪い取るキラーソフト 漢ならLinux環境でC+OpenGLでvi+gdbするべし
>>345 それなら薦めるべきはSDLな気がする
それだけだとせっかくCとGL使ってもキー入力まわりで移植性がなくなる
GLUTのキー処理は論外だし
SDLからGL叩けるし
メジャーなプログラミング言語のほとんどがSDL対応してるし
でもこのスレ的にどうかと思うぜこの話題
それだけ解っててなぜDXライブラリスレにいるのかと。
「作ったゲーム」に関していう違いなら DXライブラリで作ったゲーム 動作実績があるライブラリだから動作する環境が多い 速度は各ソフトの特性に合わせて最適化できないぶん遅い ライブラリで実装されていてDirectX直叩きなら使える機能が使えないから表現力はDirectX直叩きした場合より劣る OpenGLで作ったゲームとDirectXで作ったゲーム エンジンの動作検証は作者PCのみだからプレイヤー環境で動作しない可能性はライブラリを使った場合より高い 作るソフトに合わせて最適化できるのでDXライブラリ作者と同レベルのプログラム力を持っていれば確実にDirectX直叩きのエンジンの方が動作速度が速い DirectX直叩きできるから表現力はDirectXの表現力とイコール
追記 基本的にゲーム製作を助けるためのものだからプレーヤー側から見ればDirectX直叩きで DXライブラリと同等かそれ以上の性能のオリジナルエンジンを使ってソフトを作ってくれた方が嬉しいのは確かだろう (それが製作者が支払う労力に見合うかどうかはさておき) ただ、DXライブラリの存在があったことによって世に出ることができたゲームソフトもあるだろうから 端的にプレーヤー側にとっては動作安定以外にはデメリットしかないという結論に達することはできない 345的な理論はBASIC言語についても似たようなことが言われていたね、まあ3D対応すれば多少は改善されるんじゃないか
俺の場合はC++を重点的に学習したいからこれ選んでる DirectXとか使おうもんならC++の上にこれも覚える負担に駆られるためかなり厳しくなる DXLIBだと覚えること比較的少なく済むからC++に労力割けれるしね だからその人その人の状況次第でしょう あとこう書くといちゃもんつけてくる奴がいるから言っとくけど 全半角に突っ込むのなしね 俺タイプ苦手だから一々直すの面倒いからそれだけは言っとく
351 :
名前は開発中のものです。 :2009/06/05(金) 07:44:06 ID:Jb6PFwRw
クソスレ晒し上げ
面倒って……MS-IMEなら無変換キーを二回押すだけだし ATOKだってファンクションキー一回押すだけだろうに……。 ていうかタイプ苦手だから面倒なんじゃなくて それくらいを面倒がるからいつまでたってもタイプ苦手なんじゃないか。
DXライブラリに関する書籍はないものでしょうか?
俺は全角のが落ち着くの
苦手というか、面倒という気持ちはわかる。 プログラミングしてて全角でコメントした後半角になおしたりとか正直邪魔くさい。
>>353 初心者用でいいなら14歳から始める〜 とか
>>348 >>349 一通り触ったことはなさそうなことだけ伝わってくる文だな
その割に長くてうざい
>>342 OpenGLならラッパー書かずに済むの?
OpenGLはラッパーどころかゲーム作りに必要な他の部品も必要。音楽再生とかキー入力とか画像読み込みとかどっかのライブラリ持ってくるなりしないといけないから超めんどくさいそりゃ普及せんわ
14歳は名著でもあり地雷でもあるから気をつけろ。 誤字脱字内容間違い多いからな。
んなこと言い出しゃ自分でOpenGL、DirectX相当つくったり 自分で言語やコンパイラつくったり
>>322 俺もこれやりたい
ウィンドウ周りは.NET Frameworkにまかせて、あるPictureBoxコントロールの中で描画とか
LunaかなんかのサンプルにMDIのウィンドウで動いているのなかったっけ?
ある程度プログラムさえ分かってりゃある程度の誤字脱字には気付くんじゃまいか と言うよりあれはそんな初心者向きじゃないような気モス ある程度基本はできていた方がいいかも 俺は大分参考になったし俺のやり方はそれがベースになってる
マップスクロールってどうやるんだ? プレイヤーがx座標400ぐらいまで行ったら、背景画像をスクロールさせる感じで組んでみたら 動いてるようには見えるけど自身の座標は当然変わらず、後ろのハリボテが動いてるだけになったw どんな感じでマップスクロールって作ってる?
>>367 基本的のその考え方で間違ってない。
気に入らないならもっと考え方を進めていけばいいだけ。
アクションゲームなら、マップの座標は固定にしてカメラを動かすという考え方のほうがいいかもしれない。
よく2Dクォータービュー型の箱庭ゲームで画面の拡大・縮小というのがあるけど、 あれは裏バッファ2に描いておいて、裏バッファに縮小転送、フリップというやり方 なのでしょうか? それとも拡大・縮小の段階毎に元絵を用意しておいて、現在の段階に応じた元絵 を裏バッファに描画、フリップというやり方なのでしょうか?
やった事ないけど、俺がもしやるなら 普通にそれぞれの画像を描画する際に縮小描画するだろうな。 当然、表示座標も縮小計算して。
俺は普通に描画時に拡大縮小してる
>>370 だと後者になんのかな
ひょっとして、拡大縮小描画の命令を知らんとか?
>373 拡縮機能使ってる? それとも予め画像用意しとく? って聞きたいだけじゃないかな。
当たり判定って三角関数使って作ったほうがいい? それともXY座標だけのでもいい?
376 :
名前は開発中のものです。 :2009/06/06(土) 19:42:33 ID:94tz/m1F
ちょっと質問。 >int SetWaitVSyncFlag( int Flag ) ; >ScreenFlip関数 実行時にCRTの垂直同期信号待ちをするかのフラグセット ってあるんだけど、 これって液晶モニタだと関係ない(常にtrue扱いになる?)んだろうか。 手元に液晶しか無いんで、プログラムが間違ってるのか仕様なのか判断できないんだ。 >375 なんの当たり判定だよと。 x,yだけで処理できるなら三角関数使わなくてもいいんじゃないの?
よくは判らんが、垂直同期信号って別にモニタが返してきてるわけじゃないんじゃない? とりあえずうちの液晶モニタじゃ普通に動いてるし。 グラボ(RADEON)で垂直同期信号のON/OFF設定ができてるから 問題となるのはグラボの設定って気がする。
ビデオカードか、言われてみればそりゃそうだよな。 なんかすまん。 色々と試してみた結果、 グラボの設定を変更&フルスクリーンでFPSが60Hzの上限を突破することが出来た。 まあ、実際に使うことはないだろうけれど。
>>379 君はもう少し自分の考えてる事を他人にわかって貰う努力をしろw
スクロールと当たり判定と三角関数がどう関わってくるのか、の説明とか
どうして「三角関数が必要かも」と思ったか、とか。
円形か四角か
ジャン()笑
MessageBox(NULL,"なんとか","かんとか",MB_YESNO) これのメッセージの中身って、%dで変数表示したりできるんですか? できるならどうやってやるんでしょうか、教えてください。
>>385 リファレンス読む努力しろ
こんな簡単な事ができなきゃやめちまえ
>>371-374 返答ありがとうございます。
どうも、うまく伝わってなかったみたいですね。
そうか、1つの建物なり乗り物を描画する時に縮小描画してるというわけですね。
それが普通ということですね。
>>386 あんたも努力しろって言ってるジャン
>>384 俺も379読んで380と同じ意見だ
384は379だけでわかるのか?
>>385 できない、sprintfを調べてみるといい
当たり判定に三角関数が必要か?三平方の定理のことじゃないか まあ俺は2次元しか知らんから分からんが
いつからウミガメのスープスレにw
ウミガメノスープスレって何のことかと思って調べちまったじゃないかw ある問題について出題者が回答者の質問にYes/No形式でヒントを与えつつ 解答を推理していくゲームか。 なるほど確かに、質問者がちゃんと状況を説明できず、情報も小出しにしかできないで 質問に答えようとする人間が、なんとか回答するに足るだけの情報を 引き出そうと四苦八苦するところが似ているな。
>>391 ゲーム化したぜ(原作がスレって意味じゃないが)
スローンとマクヘールの体験版をプレイする作業に戻るんだ
2Dスクロールゲームでさ 敵を出すときって、マップ座標の一定値までプレイヤーが来たら敵を出現させるって感じでいいのかな? 今敵の出現関数の引数にマップ座標渡してやってるんだけど、それだと思った所に出すのがめんどくさい。 もっといい方法ない?
なんかDXライブラリと直接関係ない質問が連発されるなぁ。
他にもっと適切なスレがあると思うんだが。
>>393 それで特に間違いはないと思うが、
マップデータに敵の存在情報を埋め込むという手もあると思うな。
自由スクロールかどうか等で、いろいろ工夫がいるようになるだろうけど。
だったら誘導してやれば 2Dスクロールゲームと言ってもいろいろあるからそれにもよる
というかどのスレか誘導して欲しい。 確かにDXライブラリ以外の話題はスレ的によくないと思うし。
2Dスクロールで敵が出ると言ってもシューティングや他のアクションゲームもあるし それらで別れるからなあ。
でもまあアルゴリズムと言ってもDXライブラリ的なアプローチもあるやも知れん
DXライブラリ的なアプローチって何やねん
DXライブラリを使ったアルゴリズムなら?
前に教えてもらった14歳からはじめるシリーズを立ち読みして その中で、わくわくゲームプログラミングを買ってきました ゆくゆくはRPG作れたらいいなぁ、なんて しかし最近の14歳は凄いな、ざっと見たけどこの本理解できんだろうか・・
スレチだが、サルでもわかるXXの本があるのだから、人間はサル以下と
PC-6001版ゼビウス(タイニーゼビウス)を作ったのは小学六年生だと聞いて愕然とした。
小学生なめんな 年齢で知識の量は違っても論理力はたいして変わらないと思う
>>402 昔は小中でハンドアセンブルとかふつうだったし
テキストエディタ無かったし
アセンブラやコンパイラ無かったし
それでもゲーム作ってたからね
資料がネット無い時代だけど毎月大量の雑誌があったおかげで
今の10倍は情報量があると思う
14歳からはじめる〜の内容が毎月5冊くらい雑誌としてあったと思いねぇ
テキストエディタがないってどうやってコーディングしてたんですか
>>406 モノがあふれてない方がかえって集中できてよいことの典型的な例ですな
当時でも、機械語でゲーム製作できる小学生は相当凄い。 情報も今のほうが圧倒的に多いし楽に手に入る。 逆に、情報や手段が多いせいで入りにくくなってる。
>>407 方眼用紙もってドット絵かいたりハンドアセンブルばっかりしてた
変換表の半分くらいは暗記してたけど今じゃもう何も覚えて無い
c9がretだっけとかそんな感じ
ミスすれば暴走>リセットだったから実行するにも緊張した
結果机上デバッグにみんな慣れてソースやバイナリ見るだけですぐわかるようになってくる
バイナリ見たときのビッグエンディアンのわかりやすさはあこがれた
なんせ俺の暴走原因の90%は上位と下位のスワップし忘れがほとんどだったから
あと当時はPCの楽しさは俺達しかしらないんだぜ的なものもあったかな
というか全然普及して無いから虐げられてた
マイコン触れる=ネクラの変人で運動も何も出来ないんだろ的な
だからDXライブラリのように敷居を下げるライブラリにはがんばってもらいたい
今のほうが情報が入手しやすいというのはどうだろうね
CPUそのものとかOSとかデザパタとかそういうオカタイ情報は入手しやすいけど
ゲームを作りたい場合の情報の敷居の高さは半端じゃないよね?
徳間のM-FANみたいなのが必要かなと
ゲームプログラミングが初めてだという人、特にゲームを作りながら言語も覚えようという人は 最初は出来る限りシンプルなゲームから作った方がいい…と、僕は思うんだ。 80年代前半より前の生まれなら、ゲーム&ウォッチが通じるんだが 最近の子(20歳以下)だと、どのへんが分かりやすい例え何だろうか。
>>407 >>410 俺も方眼紙にドット絵描いたり、
ノートにニーモニックでプログラム書いてから、ニーモニック→マシン語変換表見ながらマシン語に書き換えて、
それをバイナリエディタで入力とかやってたなぁw
ところで当時バイナリエディタって読んでたっけ? なんか別の呼び方だったような気がするが……。
モニタ
ここにいる人は40歳前後が多そうだな
そんな知識のある父がほしかった
416 :
名前は開発中のものです。 :2009/06/09(火) 03:20:38 ID:C8Rc41AV
今思い出すと俺も16,7の時もツクールで なんであんなに創作意欲があったんだろうと思う 年取るとアイデアうかばない症候群になった ただの鬱なのかもしれんが
>>411 VCもあることだしファミコンでいいんじゃね?
高校でパソコン部を作りたいと申請したら 教師に「そんなおもちゃが一体何の役に立つんだ」と 即却下されたのもなつかしい
>>417 ファミコンだと、スーパーマリオ3やドラクエ3も含まれるんだぜ?
ケータイアプリとかなら行けるのかな? やったことないから分からんのだが。
どんなタイトルでもいいだろ
そうか、別にそう思うならそれでいいんだが。
>>416 俺もツクールに数百時間費やしたくちだが、今思うと凄いな。
アイデアは今でも思い浮かぶんだが、頭の中だけで終わってそれを表に出そうっていう気にならない。
誰かが作ってくれるならアイデアとかは言うんだけど自分でやるってなるとめんどくさくて。
ちなみにその数百時間かけたのはセーブデータぶっ飛んで電子の藻屑に\(^o^)/
数百時間かけてすら、まだ1/5程度な完成度だったけど・・・
DXに関係ない話題がどうとかってかいてあったくせに、早速関係ない話題にあふれてる件
2chなんてそんなもんさ
どうとか言った人間と話題に出してる人間が別人だからこそだろ。
426 :
名前は開発中のものです。 :2009/06/09(火) 23:50:55 ID:ggNV6tYD
DXライブラリで、選択肢並び替え問題を作っているんですが、ちょっと行き詰ってしまったので、質問させてもらいます。
プログラムとしては、選択肢を選んだ順番に配列に格納して、正しい解答と比較することで正誤判定をしています。
一応、選択肢を選んで決定するところまではできたのですが、正誤判定の部分?がうまくいかないんです。
正しい順に選択肢を選んでも、間違っているということになっているみたいです。
なぜでしょうか?
あと4回目に選択肢を選ぶと、変な文字が表示されるのはなぜでしょうか?
自分の作ったプログラムです。
ヘッダファイルとメイン部分、会話(選択肢並び替え)部分に分かれています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9402.cpp C言語をはじめて1年、DXライブラリをはじめて2か月くらいなので、やさしく教えてください。
お願いします。
>>426 char input[5][1];
をグローバルにすればとりあえず動くと思う
ところで、要素数1だったら配列の意味なくね?
アドバイスとして、
↓の関数あたりを使えばもう少しスマートに書けると思う
sprintf、strcmp (C言語)
DrawFormatString (DXライブラリ)
428 :
名前は開発中のものです。 :2009/06/10(水) 15:37:12 ID:UXlA/6A3
>>427 inputをグローバル変数にしたら、うまくいきました。
アドバイスしていただいたことも参考にして、もう少しスマートなプログラムが書けるように努力します。
本当にありがとうございました。
はじめてだから優しくしてねって言うと かえって乱暴に扱われるってばっちゃが言ってた
こんなとこでじっちゃの性癖を暴露せんでもよかろう。
431 :
名前は開発中のものです。 :2009/06/11(木) 23:55:55 ID:GA3GCHk+
int keiken; if(keiken==0)printf("童貞乙");
>431 初期化しとけ
>>432 こうですか?分かりません><
#define KEIKEN 0
if(KEIKEN==0)printf("童貞乙");
こうでしょ int keiken=0; if(keiken==0)printf("童貞乙");
const int keiken=0; if(keiken==0)printf("童貞乙");
これだからプログラミングはやめられないw
int keiken = 0; keiken ++ ; keiken ++ ; keiken ++ ; keiken ++ ; if ( 1 ) printf ( "童貞乙" ) ; これで。
雑談するにしても、せめてDrawFormatStringを使うぐらいには気を回してくれよ。
動くわけねーと思ったら動いた。 インクリメントってスペースがあってもいいの?
半角スペースは無視されるだろ
if(keiken) とか if(!keiken) ってみんなあんま使わない? 視認性重視で「==1」「==0」なのかな? 某神録のサイトでも今見たらそんな表記だった。
>441 よく使うと思うが、今回は単に>431に合わせただけじゃない? あとは掲示板で見やすい書き方というのはあるかもしれんね。
あんま面白くなかったけど、今回のは0回かどうかが重要だから あえて==0使ったんでしょ。 実際のコードでもそういうことはやる。
>>441 0であることを強調するため。
あと文化圏の違いもある。
0が偽じゃない言語も多数存在するから、そういう言語出身の人は
if(keiken)というコードは気持ち悪く感じる。
逆に生粋のC/C++の人はif(keiken==0)というのは冗長に感じる。
俺は簡潔性よりもわかりやすさを重要と考えてるから、==で比較する。
使う言語がC++だけじゃないってのもあるけど。
445 :
名前は開発中のものです。 :2009/06/12(金) 13:57:03 ID:+pEtBUBP
446 :
名前は開発中のものです。 :2009/06/12(金) 13:58:09 ID:+pEtBUBP
>>441 while(!CheckHitKey(KEY_INPUT_ESCAPE)){
}
おおこういう表記もできるのか
変数自体の評価なら「==」で結ぶけど、
関数の戻り値なら
>>446 みたいな感じで書くかな。
2値もしくはそれに準じるものなら
>>446 3値以上なら(不)等号あるいはswitchを使うかな
if (!strcmp(str, "hoge")) // 一致したら
とかは気持ち悪い
スタイルは人それぞれ。自分に合ったやり方で書けば良いよ。
if (0==keiken) やっぱこれは見づらいのかな
451 :
441 :2009/06/12(金) 19:00:21 ID:l4TbPUJW
>>450 俺自身はそれ。
会社でfalse==keikenって書いたら!に修正されていたけど
具体的な数値や列挙が書いてあるだけマシ 世の中には条件式を省略しようとする輩がいるから
だいたい if(hoge()){ … } じゃ返値をひとつだけ判定することができないじゃないの あとでhoge()の返値を増やしたら予期せぬ動作をする可能性が高い hoge()の返値を絶対に増やさない!なんて自信満々に言える奴は少ないでしょ ==で結べば必ず1つの返値で動作するから安全
>>453 C++は多値返せないよ
戻り値のとり得る値が増減する、とエスパーすると、
関数の戻り値っていうのは、関数本来の意味を参照すると、
関数の作用そのもの、すなわち関数が実装する機能そのもの。
(わからないならSchemeやHaskellとか関数型プログラミング言語を一度触ってくれ)
これが変更されるということは、すなわち関数の機能が変わったか、設計の錬度が全く足りてない
(どんな機能を実装するかすらあやふやだった)かどちらか。
どちらにせよその変更は、その関数を使用するコード全体に波及する。
だから
>あとでhoge()の返値を増やしたら予期せぬ動作をする可能性が高い
この指摘はずれてる。
繰り返しになるけど、戻り値の変更はそれを使用するコード全体に波及するから、
予期せぬ動作をする可能性が高い、じゃなくて、予期せぬ動作をしないようにコード
を変更しないといけない。
>>453 実装の修正は何度もやるとして
インターフェースや振る舞いはなかなか変えないもんだ
というか、戻り値の意味が2通りを超える時は
関数名も変えざるを得ない気がするが
456 :
名前は開発中のものです。 :2009/06/15(月) 23:58:33 ID:FuxW1Dfe
Windows 7 のペイントでpng保存しても 透明色指定しても透明にならない bmp2pngが必要
文字列を画面の中央に表示したいけど 何かいい方法あるかな? x座標を調整するの面倒だ
>457 自分は使ったことないんで分からないけど、 GetDrawStringWidth GetDrawFormatStringWidth というのはどう? で、長さを調べてxを調整して、文字列を出力するところまでを1つの関数にしちゃうの。
ドラクエみたいに停止してるキャラに足踏みさせるいい方法ないかな? countを0と1でオンオフしてSleep(300)とかで歩行と同じように調整はできたんだけど、 歩き出しが時々ぎこちないので悩んでます。sleepじゃなくていい方法が思いつかない
>>458 フォントを変えないならいける
CreateFontToHandleで作ったフォントデータだと駄目っぽい
>>459 countを範囲でオンオフ切り替えてみては
if(count%40<20)//ドロー
else //ドロー2
count++;
>>460 GetDrawStringWidthToHandleがあるじゃん
>>461 うわ・・・恥ずかしい・・ごめんなさい
ありがとねん
>459 そもそもSleep使ったら何も出来なくなるんじゃ?
歩行絵+右足踏み出し絵と左踏み出し絵を描けばいいだけじゃね?
while(ProcessMessage()!=-1){ ClearDrawScreen(); if(count<20) 右足が前に出てるキャラ表示 if(count>=20&&count<40)左足が前に出てるキャラ表示 ScreenFlip(); WaitTimer(10); count++; if(count==40)count=0; } うーんよくわからん
>465 基本的な考え方はそれでいいと思うよ。 あとせっかく答えてくれた>460の答えも読んどいた方がいいんじゃね?
>>465 基準FPS値決めて、フレーム数と秒が変換できるようにしてみるといい
あとWaitTimer(10)とかいうのはジョークだよね?w
468 :
466 :2009/06/16(火) 10:16:47 ID:1CAlzcIC
とりあえず>466の日本語がおかしいってのはスルーしてくれると嬉しい。
>>467 おや、見逃してたw
もしかして>463(俺)の発言を勘違いしちゃったのかな……? だとしたらちょっと責任感が。
>>467 たぶんWaitTimer等の関数を使わないと高速足踏みに見えると感じて、
こういう手段で自然に見えるようにしたんじゃないかな。
一秒でひとつの動作をループさせる必要はないからこれはあまり良くないと思うけど。
>469 count値20ごとに表示を変えてるみたいだし、それは大丈夫なんじゃないかしら?
ScreenFlipで垂直同期信号待ちが行われているかどうかで変わってくるような。
WaitTimer使う位なら count<20 の値を増やした方がよくね
時分割で状態変移したいのなら、コルーチン使ってみては? と上級者ぶってみるわ
474 :
459 :2009/06/16(火) 18:26:00 ID:qN6akUYZ
いろいろ意見ありがとう。
WaitやSleepは使わずにFPSとかFrameやらを使って試行錯誤してみます。
countを0と1でオンオフにしてたけど
>>465 のようにフレームカウントにしてやってみます。
別人だったんか!
リフレッシュレートの概念がわからないと変なの書いちゃうぞ レートは60ヘルツかも100ヘルツかもしれないし 65とか75とか微妙な数値になることもある DXライブラリの教本にあるように書かないと、動作環境が変わった時に同じように動く保証がない 俺が以前に見た酷い例 FPSが60切ると点数がどんどん減る意味不明なゲーム しかもどんなアルゴリズムか知らんが、FPS60でも点数が減りっぱなし ああいう「自分の環境しか見ない」人間は駄目だな
ゲーム機のゲームってその辺固定だからなにも考えなくていいんだよなー。
>>476 と言っても、個人レベルの開発でどこまで他の環境を考えられるやら。
定番のアルゴリズムとかは書けるかもしれないけど、それだけじゃ意味ないし。
結局のところ「知らね」って言いきるしかできない。
俺今作ってるゲームはリフレッシュレート無視しちゃってる。 ティアリングが気になるんだよなぁ。 他人が作ったゲームは60FPS超えるやつとかあるけど ティアリングあまり気にならないんだよな。どうやってんだろ。
480 :
名前は開発中のものです。 :2009/06/17(水) 00:27:22 ID:gsrBiXQc
>>469 WaitTimer(10); 入れるとCPU使用率が下がる ただそれだけw
>>479 君みたいな人が駄目らしいよ
自分の環境しか見ない人間は駄目なんだってさ
ていうかさ、FPSが60切ると点数がどんどん下がるゲームかどうか
ソースもアルゴリズムも考えずにどうやって判別したのかねwプッw
偉いなぁこの人wプレイしただけでバグの原因分かっちゃうって
>>476 は神だねwプッw
環境を合わせる方法としては 1,Sleepを使ってFPSを30ほどに落としてやる。 2,時間と同期をとる。 くらいしか思いつかない。
関係ないけど、テクスチャに描画する場合ってZバッファ効かないんだね
リフレッシュレートをAPIを使ってある固定値に設定する
セガの新人教育の本の人いわく、 作りやすいのは固定フレーム、性能を活かしやすいのは可変フレーム。 自分は面倒なので、60固定前提でやってるんだが (1)タイマ(ミリ秒)を取得して1フレームの規定時間(16msec)が過ぎるまで待つ (2)モニタのVSYNCを待つ (3)モニタのリフレッシュレートを変更する の3パターン用意して、あとはユーザに適当に選んでもらおうかなと。 まずいかな?
ScreenFlip使えばFPS保たれるんじゃないの
>ScreenFlip使えばFPS保たれるんじゃないの ・環境(グラボの設定)によっては垂直同期信号待ちがOFFになってる場合があるのでFPSは保たれない。 ・垂直同期信号待ちがONだとして、FPS保てる状態でも、 モニタのリフレッシュレートを60にしてたり70にしてたりってのはユーザーの好き好きなので、 作り手の望んだとおりのFPSになってくれるとは限らない。
めんどくさいからゲーム機のゲーム作ろうぜ
491 :
名前は開発中のものです。 :2009/06/18(木) 04:16:26 ID:eqFlz8O1
勝手にリフレッシュレート60に切り替える命令とかあればいいのに
別に少々速度違ってもいいじゃない
>493 アクションゲームのゲーム速度2割アップとか結構きついですぜ
DXライブラリ3Dってどうなったの? 開発中止?
60FPSのゲームを70FPSとか、とんでもないぜw
たまに弾幕シューティングが75FPSになったりするけど、 気づくのはいつもしばらくプレイしてからだった
>497 気付かぬうちに難易度が上がってたり、タイミングが変わってミスを誘発させたりするって ちょっと怖いよな。
一般的に表示上のFPSが上がるとゲーム速度も上がるものなの? ってことは2次元アクションでいえば1フレーム毎の移動量が固定なのか。 自分自身も楽だからそういう作り方をしているけど… 例えばあるゲームで 60FPSだと重いのでコンフィグで30FPSに変更って場合は ゲーム速度そのものは変わらないものだと思っていた。
>>499 時間で処理、描画だけFPSで更新なら変わらないよ。
全体をFPS60処理だと60より上に上がらないようにしてるのが一般的かなぁ。
ツールで簡単に上げれたり、処理間に合わないとFPS下がって全体の速度も低下する。
>499 フレームではなく時間単位で処理してるなら ゲーム速度云々の話題にすらならんと思うよ。
しかし時間単位で処理すると確実にティアリングが発生するので画質面で劣るという
そんなの関係なくバッドノウハウ使わない限り起きるだろw
発想を逆転させるんだ ユーザーをゲームに合わしちまえばいいんだ
まともにゲーム作ったことある人手あげて〜?
>>502 違うんじゃない?
モニタのリフレッシュレートが60だろうが70だろうが時間単位で処理するからこそ
スピード一定でティアリングも発生しないようにできるんでしょ。
垂直同期信号が切ってあるなら、そもそもティアリングは発生してあたりまえだろうし。
モニタの画面更新のタイミングを無視してメモリ上の画面データを書き換えると言うことだから 1画面分のデータの構築途中でそのメモリイメージが画面に表示されて画面上部と下部でフレームがずれるということだから ティアリングが発生するということじゃないの
「モニタの画面更新のタイミングを無視する」なら、時間単位で処理する意味ないでしょ? なぜ時間単位で処理する必要があるかって言ったら、 垂直同期信号待ちをして、ティアリングを起こさないようにしたいけど、 ユーザーのモニタのリフレシュレートが60なのか70なのかが判らない、からでしょ?
間違えた。逆だった。 実際の画面の更新途中でメモリ上の画面データが更新された場合に、描画済み画素と未描画画素でフレームがずれるためティアリングが発生する、だった。 要するにAPIでリフレッシュレートを60に設定して60前提で作ればよい。60に対応してないモニタを使ってるやつのことは知らない。
なんか「時間単位で処理」と「フレーム単位で処理」の認識が逆になってる気がするw
>509 FPS指定APIは過信してはいけない 上のほうにあるようにドライバ側の設定が優先される
じゃあPC環境は糞
>509 「60以外は知らん」と言いきっちゃうのも、それはそれでアリな気がする
最近は液晶が殆どだしそれもありだな
液晶がどう関係するのか。
一般的な普及価格帯のやつは選択肢が60Hzや59Hzしかない
自己中心的なハード理論を押し付けるもんじゃない 動作環境をテキストに書いたら、それを満たすあらゆる環境で同じように動いてもらわないと困る デフォルトで不具合が出る可能性があるなら、設定で変えられるようにしなきゃ駄目 なるべくたくさんの環境でテストするのも大事
難しいことしなくても、垂直同期かウェイトかはオプションで選べようにすれば問題ないだろ
全くその通りだと思うんだが、 そういう選択式になってるゲームってほとんどみないよな? 普通はどうやってんだろ、ってのが話題の焦点じゃないかな。
>>517 実際、60Hz固定のモニタも多いんじゃね?
他に話題ねーのかよ 飽きた
何か話したい話題があるなら自分から振れと
んー じゃぁDxLibの今後 俺はもう少し発展してくれてもいいと思う、3Dを強化して欲しいね
無理じゃね 3D強化するなら作り直しレベルだろ
デスクリムゾンレベルなら作れるw
上からくるぞっ!気をつけろ!
>>526 いま3D機能作ってるって公式掲示板で言ってたけど・・・
意外とみんなチェックしてないんだな
俺のクリムゾンは下からくる設定で作るわ
せっかくだから俺はこの赤い扉を選ぶぜ!!
Platinumっていうマップエディタで、15*20マスのマップを作って csv形式で出力して、読み込んで描画したいんだけど上手くいきません #include "DxLib.h" int WINAPI... { if( DxLib_Init() == -1 ) return -1 ; int mapchip[256]; char mapdata[15][20]; int filehandle; LoadDivGraph("a.bmp",256,16,16,16,16,mapchip); f = FileRead_open("a.csv"); FileRead_gets(mapdata,num,filehandle); このあとfor文でFileRead_getsで読み込んだ1行を15回くりかえして mapchipに入れていきたいんだけど・・・ FileRead_getsのnumに何を入れていいのかが??状態。 リファレンス読んでもメモリ領域のサイズて書いてあるけど・・・ 日本語おかしくてスマン
numはメモリ領域のサイズってリファレンスに書いてあるじゃん。 てか、a.csvの内容はどんな感じになってんの?
>>533 int mapdata[15][20],mapwidth= 0, mapheight= 0, mapchipwidth, mapchipheight, bitcount;
int filehandle;
char buf[1024];
filehandle = FileRead_open("a.csv");
if (filehandle==0){エラー処理}
int gyoucount = 0,retucount = 0, iVal,layercount;
while((FileRead_eof(filehandle) == 0)&&( gyoucount < mapheight+1 ))
{
FileRead_gets(buf, 1023, filehandle);
if (gyoucount == 0){
sscanf_s(buf, "%d,%d,%d,%d,%d,%d", &mapwidth, &mapheight, &mapchipwidth, &mapchipheight, &layercount, &bitcount);
}else{
while(retucount<mapwidth){
char *next_token;
if (retucount==0){
iVal=atoi(strtok_s(buf, ",",&next_token));
}else{
iVal=atoi(strtok_s(NULL, ",",&next_token));
}
mapdata[gyoucount-1][retucount] = iVal;
retucount++;
}}
gyoucount++;
retucount = 0;
}
FileRead_close(filehandle);
if( ( gyoucount != mapheight+1 ) || ( retucount != 0 ) ){エラー処理}
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 3 3 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 3 3 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 3 3 3 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 0 2 2 0 0 0 0 2 2 2 2 2 2 0 0 0 0 3 3 0 2 2 0 0 0 0 0 0 0 0 2 2 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0が草原で1が川で2が森で3が山です 1行ずつ読み込んでchar chip[ ][ ]に入れて その番号をint型の数字に変換してmapchip[ ]で描画させたいんですが・・orz ごめん、メモリ領域のサイズってどうやって調べるの?
コーディングしたのはおまいさんだろ?
FileRead_gets(mapdata,sizeof(mapdata),filehandle);
>>507 遅れたけど正確にはダブルバッファリングしてるからティアリングはおきないよ。
データの構築中に画面に表示される事は無い。
あと垂直同期を待ちつつタイマーで調整する事も可能。
具体的にはタイマーでfpsを調整すれば、ゲームが基準にするのはタイマーじゃなく、
一定間隔が保障されてるフレームを基準にすればおk
マップの縦横が固定長なら ifstream+For2重ループで読み込んでしまえば良い 都合のいいことに半角スペース無視ってくれるからね c++知らなければスルーしてよし
垂直同期を待つってことは動作速度がリフレッシュレート固定になるってことじゃないの? 最期の2行の意味をくわしく。
可変レートの場合、 60の時は、前回の1/60秒後の世界を描くし50の時は1/50秒後の世界を描くんだろう。
ググってると公式サイトのリファレンスに載ってない関数が時々出てくるんですけど、 そういうのが載ってる詳細なリファレンスは無いんですか?
擬似コードでいいからプログラムで説明してくんない? 下記に追記する形で。 while(1){ main_loop(); flip(); }
1秒間に100ドット移動させたい時。 : ScreelFlip() 時間計測A(ミリ秒) : ScreenFlip() 時間計測B(ミリ秒) : 移動距離算出 100 * ( B-A ) / 1000 : ScreenFlip() 時間計測〜 って感じ?
ぼくのイメージではこんなだけど合ってる? 垂直同期が取れるなら while(1){ main_loop(); sleep until 垂直同期60hz; flip(); } 取れないなら A = GetTickCount(); while(1){ main_loop(); B = GetTickCount(); sleep(17 - ((B - A) % 17)); //1tick = 0.001秒, 17tick = 1/60秒と仮定 flip(); A = B; } ただ、こうするとsleepしてる時間が無駄だから…
無駄を減らすために main_loop()の処理時間が十分に短いなら A = GetTickCount(); while(1){ do { main_loop(); B = GetTickCount(); } while (B-A < 17); flip(); A = B; } あるいはタイマーを使うか… A = GetTickCount(); while(1){ main_loop(); B = GetTickCount(); SetTimer(17 - ((B - A) % 17), flip()); A = B; } それとも描画と計算は別スレッドにするか…
>>541 そうとは限らないよ。
まずfps制限と描画を完全にわけて考える。
fps制限は60に設定したとする。
int nowtime = GetNowCount();
static int oldtime = 0;
static int frametime = 1000 / 60;
int diftime = nowtime - oldtime;
while(1)
{
if(diftime >= frametime)
{
oldtime = nowtime;
break;
}
else
{
Sleep(1);
nowtime = GetNowCount();
diftime = nowtime - oldtime;
}
}
これで垂直同期しようがしまいが60で固定された。
1ループで1フレーム1/60秒が保障されたので、1秒で100ドットキャラを進ませたいのなら、60フレームで100ドット進ませればおk
5秒後に何かをしたいときも、5秒をタイマーで計測するんじゃなくて300フレーム後に行えばおk
だから
>>539 で「ゲームが基準にするのはタイマーじゃなく、一定間隔が保障されてるフレームを基準にすればおk」と書いた。
ただ、これだとスペック不足によって60fpsが出ない場合や、リフレッシュレートが60以外でかつ垂直同期を待った場合中途半端な同期によって60fpsが出ない場合(これは垂直同期を待たない事で解決出来る)、
フレームがゲームスピードの基準になっているのでゲームスピードが遅くなってしまう。(処理落ち)
これはこれでおkならそのままでいいが、ゲームスピードだけは死守するのならフレームスキップ(コマ落ち)が必要になる。
この方法も色々あるので今回は割愛。
結局ティアリング発生するじゃん
せっかく説明したのになにその全然読んでないようなレスは。 ティアリングの話がしたいの? >垂直同期を待つってことは動作速度がリフレッシュレート固定になるってことじゃないの? これを解決したいの? どっちなの? てか548を読んで解決出来なかったの? 質問しといてなんなの。
ティアリングを発生させずにどんなリフレッシュレートのモニタでも同じ処理速度で動作させる方法があるかを聞いてる。
14歳からのゲームプログラミング読めよ 書いてあるよ
馬の耳に念仏だろうがな
なるほど。 リフレッシュレートをAPIで固定する、か リフレッシュレートを何らかの方法で取得して、1フレームの移動量をリフレッシュレートに合わせて変更する しかないわけか。
>>555 何が「なるほど」なんだか・・・
548をどう読めば
「リフレッシュレートを何らかの方法で取得して、1フレームの移動量をリフレッシュレートに合わせて変更する 」
の説明になるんだよ
読む気がないなら質問なんてするな
>>548 は垂直同期を待たない事で解決出来るとか言ってるから話にならないじゃん
ダブルバッファリングしてるからティアリングはおきないとか言ってるし。
ダブルバッファリングとティアリングは関係ないよな。 垂直同期信号待ちしないと、裏画面と表画面切り替える瞬間にモニタ画面更新される事もあるから結局ティアリングは発生する。
>>557 垂直同期を待たない事で解決出来るのは60fpsにならない場合の話だから下5行は読まなくていいよ。
しかもコマ落ちさせれば同期待ちでも解決出来るって書いてあるのに…。
120Hzのモニタで同期待ちするけど60fpsに制限すればゲーム速度も一定になるでしょ?
1フレームの移動量を変更するんじゃなく、移動量をフレームに合わせれば常に一定でしょ?
>>558 flipする時はコピーするんじゃなくてVRAMの参照先を変えるだけだから、VRAM上のデータを書き換え途中って事は無いと思うけど。
だからどの瞬間においても描画途中で画面更新される事は無いと思うんだけど違うのかな?
もちろんこれはティアリングの厳密な意味でのことなので、広義の意味の 画面のちらつき=ティアリング として使われる事についてはそれでいいけど。
>>559 残念だけど垂直同期を待たない場合はビデオカードがモニタに映像を送信している間でも
参照先のVRAMアドレスを変えてしまうからティアリングは発生する
>>559 DXライブラリで裏画面への描きこみ、ScreenFlipってほとんどデフォだよね?
これが君のいうダブルバッファリングでしょ?
ScreenFlipの垂直同期信号待ちをOFFにして、
タイマーだけでスピード固定するようにして、フルスクリーンで動かしてごらん。
ティアリング一目瞭然だから。
>>560 そうなんだ。どうもありがとう。
同期しない事によるちらつきは画面更新部分と非更新部分の時間がばらばらな事による現象かと思ってた。
モニタのVsync信号の方が偉くて、そのタイミングでflipした時は次のVRAMの更新先を強制的に参照するみたいな認識でいいのかな。
>>561 ややや、ちらつくのは一目瞭然だけど、ティアリング(=上半分表画面で下半分裏画面のような状態)かどうかっていのは人間の目では判別不可能でしょ。
そのちらつきの原因は、更新部分と更新して無い部分の時間差によるものだと思ってた。
例えば背景が流れる画面の場合、1場面を■、次の場面を□とした場合、
■□■□■□■□■□
と見えればちらつかないが、
■■□■□□□■■□
のように見えるとちらついてみえると思うんだ。
でも
>>560 のレスで、ティアリング自体も起きているとのことなので一応解決出来た。
これはもうちょっと自力で調べてみようと思う。
「垂直同期信号待ち」ってのは要するに画面が全部描き終わるまで待つって事だから。
描き終わって、次の画面が描き始められるまでの一瞬の間にVRAMのアドレスを切り替える、って事だね。
そうする事で初めてティアリングを防げる。
>>563 ちらつくというより画面が波打つ、と言った方がよかったかな。
>ティアリング(=上半分表画面で下半分裏画面のような状態)かどうかっていのは人間の目では判別不可能でしょ。
ぴったりには合わないとは言え、だいたい60FPSで固定しようとしてスピード調整してるわけだから
ズレが生じるのも大体画面更新の同じタイミングになるわけ。
当然、人間の目にもはっきり判るよ。
>>563 固定フレームレートの2Dゲーははっきりとわかる
キャラだけならともかく背景のスクロールもよくつかわれるからくっきりと
3Dとかで可変フレームレートだとわかりにくくなるかな
でも2Dメインでしょ、DXライブラリ
問) 垂直同期を待たずにティアリングを抑制する方法を答えよ 答) 垂直同期信号の発生周期をフリップのタイミングの合わせればよい
誤字があるから△だな
>>564 CRTの場合は走査線があるので画面の上半分と下半分で違う場合もあると思うんだけど、
液晶の場合は1画面をいっぺんに更新するわけだけど、それでも上半分と下半分で違うようなものになるってことなのですか?
VRAMから送られるデータは画面の左上から右下のデータが順次送られてるのかな?
そしてその送られてる時間がネックになっていてその間にflipしたらバックバッファの途中のアドレスから参照されるってこと!?
それってそもそもおかしくないですか?
バックバッファが出来上がっていない可能性もあるし、どうせ同期待ちしていないんだからとりあえずフロントバッファのデータを送りきってからバックバッファ分を送ればいいわけだし。
じゃあ将来例えば物凄くリフレッシュレートが高くなった場合、VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速かったりしたら
"同期待ちしてるのにティアリングが起きてる"っていう最悪な状態になっちゃいそうですが。
なのでやっぱり液晶の場合はティアリングは起きていないと思いますがどうでしょう?
>>565 えと、だから、画面更新に合わせずに好き勝手にflipしたら、
ある1枚が長く見えてるかもしれないしある1枚が欠損しているかもしれない。
だからちらつくように見えると思うんだけど、
肉眼でただちらつくように見えるからってそれはティアリングが起きてる証明にはなってないよ。
とりあえず3行以内に要約する癖をつけてくれ
>>568 >VRAMから送られるデータは画面の左上から右下のデータが順次送られてるのかな?
Yes
>そしてその送られてる時間がネックになっていてその間にflipしたらバックバッファの途中のアドレスから参照されるってこと!?
Yes
>バックバッファが出来上がっていない可能性もあるし、どうせ同期待ちしていないんだからとりあえずフロントバッファのデータを送りきってからバックバッファ分を送ればいいわけだし。
?
何を言いたいのか良くわからないけど
VRAMのデータをモニタに送るタイミングはPC側からは操作できない
リフレッシュレートに依存する
>じゃあ将来例えば物凄くリフレッシュレートが高くなった場合、VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速かったりしたら
>"同期待ちしてるのにティアリングが起きてる"っていう最悪な状態になっちゃいそうですが。
縦解像度nの画面データをモニタに送る流れ
0lineを転送→水平同期期間→1lineを転送→水平同期期間→
nlineを転送→垂直同期期間→0lineを転送→水平同期期間
つまり、垂直同期間は1画面分のデータを転送した後にくるので、
「VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速い」
というのはそもそもありえないよ、nline分送る前に垂直同期期間に突入する事はないから・・・
2点修正 >リフレッシュレートに依存する 厳密には設定した解像度とリフレッシュレートに応じて発生する 水平同期信号と垂直同期信号に依存する >0lineを転送→水平同期期間→1lineを転送→水平同期期間→ >nlineを転送→垂直同期期間→0lineを転送→水平同期期間 0lineを転送→水平同期期間→1lineを転送→水平同期期間→ (n-1)lineを転送→垂直同期期間→0lineを転送→水平同期期間 の誤り
で
>>570-571 そういうことだったんですね。
詳しい説明どうもありがとうございます。
>VRAMのデータをモニタに送るタイミングはPC側からは操作できない
>厳密には設定した解像度とリフレッシュレートに応じて発生する
>水平同期信号と垂直同期信号に依存する
ビデオカード側がモニタに送るタイミングを主導しているんだと思ってましたけど、そこが間違っていたようです。
>>568 >だから、画面更新に合わせずに好き勝手にflipしたら、
>ある1枚が長く見えてるかもしれないしある1枚が欠損しているかもしれない。
>だからちらつくように見えると思うんだけど、
ちらつくっていうよりも、それはがたつくというか、コマ落ちとかそういう心配でしょ?
ティアリングってのは君が言ってるように上と下の画像にズレが生じる現象だから、
横に対して線が入って(実際にはドット単位でずれてる)波打ってるようにみえる。
コマ落ちだったらこうは見えないはずでしょ?
実際にプログラム動かしてみてみれば一目瞭然だと思うんだが……。
>>552 14歳のやつ
計算式思い切り間違えているぞ。
実際にリフレッシュレートの違うモニタで確かめたから間違いない。
あれ分母と分子逆になってるのかなあ
>>576 何がどう違うのか具体的に例をつけて書け
改良案も書け
>>578 自分で考える癖をつけよう。
適当な数字を入れて検証してみ。
明らかにおかしいのがわかるから。
どうおかしいのかわかれば治し方は自明だと思う。
>>575 学生さんなのかな?
デジタル写真に法的な証拠能力は無いわけだが
なんの話だw
どこの誤爆だw
これが若さか。
いいや幼さだ
中年オヤジは黙っとけよクズ いい年こいて2chやってんじゃねえよカス
こんなヤツもDXライブラリ使ってるのか……
悪いの?使うのに制限あるなら教えてくれませんかね?
初心者向けライブラリのスレなんだし、カリカリしないでまったり行こうぜ?
590 :
名前は開発中のものです。 :2009/06/22(月) 21:32:05 ID:6Vl6l2Pm
クソスレ晒しアゲ
まったく・・ オッサンにもなってゲームでも作ってんスかね?w
世界のゲームプログラマーの殆どがオッサンですよ
そもそもおっさんって何歳以上?
DXライブラリはDixq氏のゲームプログラミングの館の影響で東方厨が流れ込んできてるからこんなのはゴマンと居るよ
いちいち煽らない。
おっさんでもガキでも宇宙人でも何でもいいから、 DXライブラリでおもしろいゲーム創っていこう。
>>580 こういう奴は駄目だな……
デバッグ報告になってない
再現例も書けない奴は現場に出てこないでほしいと思う
そもそも「適当な数字を入れたら」ってのは、「適当な数字が必ず入る」という前提なのか?
プログラムの動作の中で「適当な数字」が入らざるを得ないような状況を説明できるのか?
例えばOSやモニタやリフレッシュレートを変えたらおかしい、と言うなら説明になるが
チート使ったらゲームがバグった、レベルの議論は論外だ
こういう人に限って動的な数値に固定値を代入したりしてるんだから
自分で調べようともしないで、他人に訊けば答えが返ってきて当然と思う人間の方が 現場では嫌がられると思うぞ。
>>598 わからないなら、わかりません教えてくださいって素直に言えばいいんだよ。
嘘なら嘘でしたといったほうがいい
作ってて楽しいからゲーム製作してるんだろ? なんでこんなカリカリしてんのさ
分をわきまえず背伸びしてるから疲れてるんだろ
>>598 わからないなら素直にそういえばいいじゃない。
>例えばOSやモニタやリフレッシュレートを変えたらおかしい、と言うなら説明になるが
>>576 疑うならリフレッシュレート変えて実際に試してみ。
ソース見せてくれたら第三者にも判断つくんだけどね。
ここ現場じゃねーし 掲示板だし そもそも教えない奴にこそ性格に問題抱えてる事がほとんど
わからない、とそいつが言ったら言ったで責めんの目に見えてるし ググレとかそれ以前のことでしょとか嫌味吐くのおまえらじゃん
フレーム単位で処理してモニタのリフレッシュレートに合わせて移動量を変えればリフレッシュレートによらず処理できることは分かるけど、 例えば、タイトル画面でスタートボタン押してから次の画面が表示されるまでの待ちの処理ってのはどうやってフレーム単位で処理すればいいんだろう。
>>607 これだけ色々答えてくれる場でなんでそういう考えに至るのか。
あまりにガキ過ぎる。
そんなもん無視しろ
>>608 どういう意味?
待ちの時間って、本当に何もしないって事?
それともデータロードとかしてる時の事?
612 :
名前は開発中のものです。 :2009/06/23(火) 23:53:01 ID:95CP5Nno
ゆとり乙 ガキは教えて貰うのが当たり前だと勘違いしてるから始末が悪い。
移動量だけでなく待ちのフレーム数も可変にしないといけないとなるとちょっと面倒だな
>>607 //14歳本より
//リフレッシュレートの高い環境ほど1フレームあたりの移動量を小さくしfloatの配列にセットする
void SetFrameRate()
{
float frametime = 0;
unsigned int s = GetNowCount();//計算開始時刻をsに代入
for(int i=0; i<30; i++)
{
ScreenFlip();
unsigned int e = GetNowCount();//計測終了時間をeに代入
frametime += e - s ;
s = e;
}
frametime = frametime/30;//30回採取した経過時間の平均を取る
for(int i=1; i<20; i++)
{
idouryou[i] = i / frametime * 16.67;//←ここの式が間違い!自力で治そう!
}
}
解説文は間違っていないから単純ミスだろう
適当な数字を入れてみって言ったのは
frametimeの値が小さくなればどうなるか式に入れて考えてみってこと
試すまでもなくこの式がおかしい事が判る筈
FPS計測するとき同じミスよくやったなぁ
俺もそこおかしいと思ってずっと悩まされてた 答え言っちゃいけないのかな あそことあそこ入れ替えるでおk?
>>616 うん。
それでおk。
ちなみに初版で気付いてラトルズに付属の葉書で出したが
C++本でも後の版でも訂正されなかった。
サポートページに訂正箇所のpdfがあるが読んだら全然違う箇所のことだった。
14歳から〜って読んでる人結構いるんだな
知らぬは、著者ただ一人だけ
「14歳〜」って読んだこと無いのだけれど、 これ買ったらDXライブラリの作者さんに何らかのお金が行くんだろうか? 行くなら買ってもいいかなあ。
>>616 何で答えを言っちゃいけないとかいう言葉が出るの?お前は?
バカなの間抜けなの?なにがそんなに秘密にしたがんの?死ねば?
釣りだとわかってるけど笑ってしまったw
ティアリングに拘るよりやることがあるだろw 釣りであってくれw
ネタじゃなかったら日本が滅ぶw
ティアリングサーガだな
こだわるのはプログラマの性だしなあ
627 :
名前は開発中のものです。 :2009/06/28(日) 16:38:04 ID:Mn3+4Pod
例えば class Enemy{}; と class Player{}; ってのがあったとして、両方とも座標用変数がpribate:になってる場合、両者の当たり判定はどうやって組んだらいいかな? あと、Enemyをたくさん出したい場合って、class Enemy型の配列をつくっていいの? それとも他になにか良い方法があるのかな? 今現在、練習を兼ねてミニゲームのようなものを作ってて行き詰っちゃって。 よかったら教えてください。
俺は面倒だからpublic でやってるけど まあ普通は getx(){return x;} という public なメンバ関数から座標を取得するのかな もう一方の方は俺はEnemy型のlist でやってるけど 配列でも別にいいんじゃないかな まあ俺みたいなへぼいのから聞くより出来る奴から聞いたほうがいいと思うが
Enemy中でplayer->touch_p(this->x,this->y)とかどうかな
630 :
名前は開発中のものです。 :2009/06/28(日) 19:48:47 ID:Mn3+4Pod
>>628-629 返答ありがとうございます。
さあ当たり判定を作ろう。と思ったときに上記のことでつまづいて書き込ませもらったんだけど
返答があるまでちょこっとなにか加えようかなと思っていじってたら、上から降ってきたものが
地面についたとたん固まるという想定外の現象に見舞われて、コードの半分ほどを書き直す
羽目になってしまって。
いまだ復旧作業の途中なので、せっかく返答してくれたけどその知識を使うのはもう少しあとになりそうです。
とりあえず、HitEnemy()というメンバ関数を作って、Playerのポインタを渡す感じでいこうかと思ってます。
…出来ないかもしれないけど。返答ありがとうございました。
ポインタを渡しても直接値を参照することはできないから privateならget使うことになるんじゃないかな。 めんどいなら一時的にfriendしてやるとか。
>privateになってる場合 って書いてあるけどprivateにする意味があるからprivateなんじゃないのかな。 参照したいならprivateにする意味がないって事なので、 publicにするかアクセサメソッド作ればいいのでは。 まあ後者がいいと思う。
仕様がワカランからアレだけど、Enemy同士の当たり判定は必要ないのかな。 後、これも仕様がワカランからあれだけど Direction(方向)の情報とか必要ないのかな。
シューティングだとそれらのことあまりやらないんじゃないか 無駄にそういうの増やすと負荷増やすだけだし ゲームによってはそういうこともやるだろうが
635 :
名前は開発中のものです。 :2009/06/29(月) 23:41:07 ID:0tScVOcn
Enemy同士もPlayerと同じ方法で判定すればよくないか?
playerとenemyなら1対多だけど、enemyとenemyだと多対多になって 判定回数が飛躍的に増えるって事でしょう。
そもそも何でprivateなのか分かってんのかと 理屈がわかんなきゃ全部publicにしてもstaticにしてもいいじゃないかって話になる クラスの意味をまず勉強した方がいい
GraphLock と GraphUnLock って以前はリファレンスに載ってたと思うんだが、見つからない。 サンプルが見たかったんだけど、以前のリファレンスってもう見れないのか。 インターネットアーカイブはダメだった。
640 :
名前は開発中のものです。 :2009/06/30(火) 13:51:06 ID:A8eMVGin
タヒチで日本の即席めん大人気
リゾート地として知られる南太平洋のタヒチ(仏領ポリネシア)で、たつの市の食品メーカー「イトメン」が製造するインスタントラーメンが売り上げを伸ばしている。
ここ10年で輸出量が倍増しているほか、現地商社の依頼で2年前からカップめんの販売も始めるなどファンを増やしている。
イトメンによると、タヒチへの輸出量は1998年が155万食だったが、2008年には356万食に倍増。
神戸税関によると、神戸港の即席めんの輸出量は07、08年と連続で全国一。
うちタヒチへの輸出は08年が303トンで、同税関は「タヒチ向けはほとんどがイトメンの製品」という。
イトメンの即席めんがタヒチへ渡るようになったのは40年ほど前で、神戸の貿易会社がタヒチに住む中国人向けに輸出したのが始まりという。
タヒチには118の島に23万人が住む。今はシェア6割ほどを占め、イトメンが直接輸出している。
即席めんは、国ごとの味覚に合わせるケースが多く、現地生産が主流。
同社は日本で販売している「チャンポンめん」と味は同じで、パッケージを変え「ALL-IN-ONE」の商品名で販売しているが、現地でも受け入れられている。
人気が高い理由について、同社の伊藤充弘社長(53)は「香港製などライバルの製品が少ないためでは」と分析。
タヒチで日本の旅行会社現地法人で10年間働く日野到さん(36)は「日本のラーメンは最も品質が良くて人気。よく売り切れている。
長年、安定して輸入が続いているイトメンの商品が定着している」という。
伊藤社長は「最近は原料の高騰で利益はほとんどないが、親しまれている味を届け続けたい」としている。
http://www.kobe-np.co.jp/news/keizai/0002072011.shtml 【グルメ】タヒチで日本の即席めん「イトメン」が人気
http://tsushima.2ch.net/test/read.cgi/newsplus/1246257826/ 【イトメン】 イトメンのチャンポン麺 【総合スレ】 Part2
http://gimpo.2ch.net/test/read.cgi/nissin/1185419295/
貴重な小麦粉をインスタントラーメンなんかに使うな馬鹿たれ。
ここはニュー速じゃないぞ
私がニュー速だ。ここをあけろ!
DXLibを使う場合、全体を int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpc, int nC){ while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ 〜 } } こう言う風に作れって本に書いてあったんですが この構造と本格的なwinプログラムの場合のウインドウズプロシージャとかとの関係がイマイチわからないのですが どういう風になってるんでしょうか?
>644 関係ないと思っておk
初めてDXライブラリ使った時、小難しいwinプログラムがなんでこんなツクールみたいになるのかと愕然としたよ
俺も最初WinMainではウインドウ作成とメッセージループしかしちゃいけないと思ってた 知人がタイマーイベント仕掛けてWM_TIMERがきたときにループ処理してたからそういうもんだと思って疑わなかった
BorlandC++BuilderやDelphiのソースを読むともっとビックリするよん。
落ち目会社だしどうでもいい
>>646 きちんと関数化、ライブラリ化すれば難しいゲームでも綺麗に書けるってこと
DXlibの機能には制限があるし、余計な機能もついているので、
最終的に自分で最適なライブラリを書くようになれるのがいいよ
SetMainWindowTextが未定義関数扱いされるんだがどういうことなの・・・ 他の関数は普通に使える
>>651 うちでは正常に動くが。ヘッダから消してしまったとか。
ステータスバーってどうやって付けれるのよ? おせーて
ファイルから再生する音楽のループ位置を設定することはできますか?
>>654 SetLoopPosSoundMemではだめなの?
>>655 ありがとうございます。すみません、説明不足でした。
PlayMusicでストリーム再生し、ループ位置を設定したいのです。
>>655 SetLoopPosSoundMemとSetCreateSoundDataTypeを使って解決しました。
ありがとうございました。
658 :
名前は開発中のものです。 :2009/07/08(水) 22:05:37 ID:qTICtjjx
CPU Core 2 Duo 2.66GHz RAM 4GB GPU GeForce 9600M GT VRAM 2GB OS Windows Vista 64Bit DxLibで作られたソフトをこいつで動かすと、始めは60fpsでなめらかにも関わらず、 しばらくすると30fpsになるのはなぜなんだ? ガクガクするならまだしも、ぴったり30fpsなんだ。 またしばらくすると治ったりもするし、なにかひとつの関数が原因になってたりするのかな?
ScreenFlip()を2回呼んでいるとか
Vistaのいたずらじゃないかな? うちも24か30で安定、フルスクリーンだと60fpsありがとうございます状態。
なんか最近どっかで見たような質問だな……。
ビデオカードとそのドライバと設定だな 60、30、24ってよく見る数字だし
60hzに同期して描画したとする (1) 1フレームの処理が1/60秒未満なら1秒間に60回描画できる (2) 1/60秒以上2/60秒未満なら30回描画できる つまり瞬間的には30か60のどちらかになる 1のケースと2のケースが混ざったとすると長期的には平均することで30と60の間の値になりうる しかし大抵の場合は1フレームの処理が1/60秒で収まるか、あるいは超えるかで30と60に分かれる と予想
ていうか垂直同期信号待ちをしてるのかしてないのかを先に明記してくれないと。
GPUの垂直同期をオフにしてもオンにしても結果が変わらず。 というか、GPUの設定をどう変えてもまったく同じ・・・
もともとDXライブラリ側でOFFにしてるんじゃないの?
画像を半透明で描写する方法ってDXライブラリにありますか?
リファレンスも読めんのか…
あるよ。リファレンスにある。 全部読んでそれでもわからなかったらまたおいで。
座標ってxyで行うから構造体でセットにして扱うのってなんか不都合ある?
無いよ。 bullet[i].locate.x = 320; とか多重に扱うと見た目が重く感じるぐらい。
全然ないから、POINT を使うと良いよ。
>>671-672 thx
多重に気をつけて、メンバ変数は極力そのクラス内で処理するようにしますわ
EnemyManager.Small.Flying.Bullet[i].Location.x = GameCanvas.TopLayer.ViewObject.Set(320); とかなら、ちょっとは考えろよwwとか思うけど。 普通に組んでる限りじゃ、そんな気にする必要はないかと。 どうしても気になるなら、POINTなりをpublicで継承すりゃ、 bullet[i].x=320にできるし、どうせゲームだからこれで問題無いでしょ。
アクセス権が気になるなら参照を返すアクセサ作ればいいしな bullet[i].x()=320; これくらいなら見た目もタイプ量も許容範囲だろ
あ、もちろんインライン展開される書き方前提でな
そういったセットになり易いものって他にどんなのがあるかな?
セットって?
たまにタスクが応答なしになるという原因不明のバグに悩まされ 再起動してみると普通に実行されるのは何だろう
>>679 何を言いたいのか分らんが・・・
(エスパー希望の相談なのか、只の雑談なのか、愚痴なのか?)
とりあえず、タスク がタスクマネージャーとかのタスク(application)の事なら、
単純にどっかが無限ループに嵌ったか、画面書き換えの部分を通らなくなったか(orキー入力の部分を・・・)
だろう。
とりあえず、printfを色んな所に仕込んでおいて、デバックを掛けるとかするのが基本。
怪しい所がどうみてもライブラリ側だったら、公式に書き込めばいいし、
そうでないなら、再現性を高めて、その変な挙動をここででも、公式ででも聞いてみればいい。
大概は、配列でindexが超えて・・・・とか、switchでbreak;が抜けてて・・・とか
if文の後に変なモノがあって、ifでの抜けだしが効かなくなってたりとか、
{}の対応が微妙にずれてて・・・とか、初期化してないのを使っていて、タイミング次第で・・・とか
(後は、WindowsUpdateしてなさ過ぎて、リターンが遅れてるのを応答なしに解釈されてるとかもあるか、)
>とりあえず、タスク がタスクマネージャーとかのタスク(application)の事なら、 その通り >単純にどっかが無限ループに嵌ったか、画面書き換えの部分を通らなくなったか(orキー入力の部分を・・・) >だろう。 そういった部分は見当たらなかった 何せOSを再起動させてそのプログラムを再び実行させたら何の問題もなく動いたのですからプログラムに原因があるとは思えないのですが
そういう現象が出てるのが君だけなんだから君のプログラムに問題があるか、
あるいは君だけが体験できるくらいレアな現象って事になるだろう?
調べる事ができるのは君だけなんだから
素直に
>>680 の忠告に従って、きちんと調べていけばいい。
「これで合ってるはず」なんて余計な「思い込み」はデバッグ作業の邪魔にしかならないぞ。
>>681 それだけの事で、プログラムに問題があるとは思えないって・・・・
とりあえず、
初期化なしでつかってる場合にはOS再起動とかで簡単に変わるし、
時間取得なんかをちゃんと処理してないと、
日にち跨ぎや時間跨ぎで、発生したりしなかったりする。
>>682 も言うとおり、思い込みよりも手を動かしてデバックしなぁ。
プログラムは書いた通りに動いても、思った通りには動くとは限らないんだからさぁ。
だってデバッグしたけど分んないんだもん まあ動くようになった訳だからそのまま何事もなかったかのように過ぎていくのだろう
forやwhileで使ってる変数の初期化忘れあたりが怪しいけどどうなんだろうな
それはないと思うがなあ その可能性のあるコードって、(実行時に処理を通ってるコードの中で) while( (!ProcessMessage()) && (!keybuf[KEY_INPUT_ESCAPE]) ) しかなかったんだが(変な書き方でスマソ) 確かに keybuf はグローバル変数にしてしまってるし char keybuf[256] = {0}; で初期化したつもりになってるけどどうなんか分らん まあ動くようになったし確認しようにももうできないからな、動くから まあ良しとして続けるしかないな
こうしてバグが量産され、ついにはうんともすんとも動かなくなりねあげる姿が
裏画面の内容をテクスチャにコピーする関数ってあったっけ?
「無いと思う」とかじゃなくて確かめないと。 プログラムに思い込みは絶対あかん。
だって動くようになったから確かめようがないじゃん この先動かなくなる可能性ないわけではないが そうなったところでこれ以上バグは見つからんだろうな、俺の力では
だからprintfとかで一つ一つ処理の中身を吐き出して見るんじゃん。 外見上動いてても、バグがあれば意図してないデータが含まれてる。
うーん、やっぱりバグがあるとはどうしても思えないし 多分printfとかで一つ一つ処理の中身を吐き出して見てもどの道今の俺の能力では バグを発見できるとは思えないから忠告はありがたいがこのままいくことにするわ 以前も同じようなこと何回かあったしそんときもちゃんと完成まで漕ぎ付けているし
693 :
名前は開発中のものです。 :2009/07/15(水) 01:17:22 ID:Pli3pE87
ID:wRlAP6qv ID:ouOmT7td お前さ、そんなスタンスなら、なんでわざわざここに書き込んだわけ?はじめから書き込むなよ。 なに、構って欲しかった?わざわざお前の書き込みに一生懸命考えてレスしてくれた 人達に失礼だと思わないの?
実際問題、再現性のないバグを修正するのは難しいよ。 プログラムを書いた本人に見当がつかないなら、他人の経験に頼るのも良いと思うよ。 自分がそんなバグにぶち当たったとしても根気だけで調べようとは思わないな。 時間が余ってるなら別だけど。 で、他人の立場から言うと、あれだけの情報で問題のありそうな点を指摘するのは無理だ。 アドバイスとしてはバグ発見を諦めるのではなく自分用バグリストを作ってそこに追加しろ。
何かヒント得られると思って… でアドバイス通りに考えてみたけど駄目だった
>>695 そうか、お疲れ。
コード晒す勇気があれば、案外デバックしてくれる人が居るとおもうけど…
(自分一人だと考えがなかなか間違いに気付きにくいからコードレビューは有効だと思う)
「アドバイス通りに考えてみた」ってのは、
もちろん、printfとかでデバック情報をポコポコ吐き出させたけど、バグらしき場所が見あたらなかった
って意味だよね。念のため。
ソースうpしろ 無理なら帰れ
最小のコードを切り出してる最中に問題が解決することって結構あるよね? 俺だけ?
あるある 意外とバグって見当つけてたとこ以外にあったりするもんなんだよなぁ
バグを直接見つけようとしないで、確実にそのバグを再現できるようにするのが第一歩
>>701 分かる分かるw
そしてバグを再現させるのは非プログラマに丸投げする俺
で少しずつ条件を変えてあたりをつけていく。
おまえら仕様書切らないから テストも作れないし そもそもバグなのか想定なのかも混乱するんだろ?
分け入っても分け入ってもバグの山
仕様書、製造終了してから書いた記憶しかないなぁ…
>>704 最終的にうまく動作するものが仕様です。
どだい、仕様書でバグが防げると思ってる法が異常。
仕様書の想定だろうが、結果駄目ならバグだろ!
個人製作だし仕様書なんて全部脳内の香港式です 仕様の段階でバグ出すレベルの人はちょっとヤバイ。
脳内でまとめようとして、てこずるものを 紙に書いてみたらあっさり解決ってのはよくあることだけどな。
そういえば話はずれるけど、「仕様を全てきっちり書いて、それを紙に印刷しておく のが重要なんです!」と力説する新人が入った時を思い出した
711 :
名前は開発中のものです。 :2009/07/16(木) 10:03:06 ID:qgWixxR7
人それぞれで、 仕様書がなければダメになる人とそうでない人がいる。 始めた時は正しい方向に向かっていたが、 出来上がった時には違った方向を向いている、 世の中にはそんな人も多くいる。 チームで進めるとき、意思の統一が重要で 依頼しても、出来上がりが違うものになるのは困り者。 人それぞれなので、きちんとできるひともいるので、そのような人は不要と言われる
もし、違うものが出来上がってきたら、 「言った、言わない」の問題になってしまうから あらかじめ、ちゃんと紙にして保存しておくって事だろう。 できるできないの問題じゃないよ。 自分のため、相手のための保険みたいなもんだ。
713 :
名前は開発中のものです。 :2009/07/16(木) 11:11:34 ID:qgWixxR7
掛け捨て保険ではない。 チームで行う時の基盤になる、開発ドキュメントとして 取り扱い説明書として、保守業務の基準として必須のものである。
コメント見ただけで仕様が把握できるようなソースが書けるようになりたい いつかは。
コメント書かなくても把握できるソースが理想かな。
どうも英語のコメントは読むのも書くのも苦手で……
悪ノリではっちゃけたコメント書いてるのは俺だけではないはず
>>715 ダウト
仕様はソースと答え合わせする為のもの
ソースみて内容がわかるのと、本来どうあるべきなのかは別問題
そうか個人製作の場合ととチーム製作の場合と仕様書と仕様と仕様バグとバグを はっきり切り分けないで話してるからこんなにカオスなのか
みんな自分の話してるだけだからな
メンバ関数でモジュール化するだけだよ、基本的には それにコメントは確かに大事だが 関数名をgetScreenFrameParSecondみたいにきちんと書けば、仕様が明らかにわかる クラス・変数名も同じ 例えばiteratorをitとか省略して書くのはダメ タイプ速度は速くなるが、後のコーディングで詰まるから、作業は全く速くなってない。むしろ遅くなる 省略しなければiteratorという言葉を知らない他人が見ても、ググれば意味がわかる あとは、日本語で名前つける人がいるけど ネットに和英辞書あるんだから使ってほしい 英語の勉強になるし国際化にも対応できる
そこまで欧米コンプレックス持ってないし…。 国外にソース晒すほど立派なもん作れるなんてうぬぼれてない。
自分で分かりやすいのが一番
趣味の範囲内だし態々・・・
熊々翻訳しなきゃわからないレベルの英単語は使わないかな
FileHandle ofh ( FileName, ">" ); とかは問題ないと思うけどな。宣言のクラス名で大体分かるし。 宣言が遠すぎて分からんような関数ならその時点で問題だし。
というか、「ローカルスコープの」識別名は短いのが主流な気がするんだけど。 定番の良書とかでも普通みんなそうだし、Linuxカーネルみたいな大物ソースでも そうだし。 結局、識別名だけで理解できる情報は限られるのも現実。そうでなければ、それこそ アプリケーションハンガリアンなんかを全識別名に徹底すれば最高なのかもしれない けど、実際は関数エントリにはしっかりした出入り仕様のコメントが欲しい訳で。 まぁ、スレ違いなんだけどね。 正直、D3DXのせいで、「扱いやすくする」という使命のラッパーライブラリの系統 は居場所を失ってるから、このスレの居場所も同様によく分からないんだよなぁ。
∩___∩ | ノ ヽ / ● ● | クマ知ってるか。 | ( _●_) ミ 出雲地方では、木と岩と水の在る場所を「熊々しい谷」と呼ぶ。 彡、 |∪| 、`\ 「熊々しい」とは、神々しいの意味だ。 / __ ヽノ /´> ) (___) / (_/ | / | /\ \ | / ) ) ∪ ( \ \_)
>>722 レベルの長文関数名を記述すると
引数がある場合とかに
複数行にわたってしまって
なんだか見づらくならない?
今まで見たソースだとgetScrFPS程度には略してるけど
おまえらどうなの?
略すと判んなくなる時以外は略してる。
目的や用途によって使い分けてる。
733 :
名前は開発中のものです。 :2009/07/17(金) 22:29:41 ID:PpX+kDe1
クラスの中に座標XとYをまとめてクラスか構造体にしておいて、他の関数などに渡すときに ひとつのGetPos()って関数で渡すにはどうしたらいいかな? 考えてみたんだけど、どうしても一つでいろいろなところで使える方法がみつからないんだよ。 まだプログラム経験が短いもんで。
構造体を返せばいいと思うけど、そういうことではない?
まあ状況によるけど。 基本Getは単一変数を返す方がいい。 内部の構造体のデータを返すのは間違っている。 その場合はとるのではなく、チェックしてもらう。 bool chk_XXXX (pos *dat); が正しい。 で、この関数はインラインであれば、スピード的には何の問題も無い。 考え方が逆。
補足、クラス内のデータの処理はそのクラスの関数で行う! これ基本中の基本
皆が何言ってるかさっぱりわかんないぜ! でもゲームは作れてるぜ!
FPSはそれ自体で意味がわかるから使うけどScrは無いわ
class A があって xが public なメンバの場合 A.xでアクセスするのと private の場合 getx(){return x;} でアクセスするのと速度変わらんのか
>>739 詳しい事はしらんが、常識的な範囲でコンパイルを考えれば、
最適化が普通だったら遅くなる理由は無いと思う。
最適化をしないなら、クラスから関数のアドレスに飛んで、
そこで値:xを取得して、それをどっかに格納な分
遅くなるんだろうけど・・・。
>>740 ちょっと違う
getx(){return x;} がクラスの中に書かれ、そのクラスがヘッダーファイルなら。
インライン展開されるので
aa = getx(){return x;}
||
aa = A.x と同じ
最適化は関係ない
あ、ちょっとまて、C++のみの話な、他の言語は知らん
それはヘッダに直接定義書いてるからinline付いてるだけじゃね
ソース側で定義でもinlineつけて展開できるなら同じじゃないっけか
後、クラス内での処理はインラインしてくれるのが普通だったきがする
メンバ関数内で別のメンバ関数呼び出して処理とか
まー、
>>736 か
インスタンスが確保されてる状態なら、参照を返せばいい。
class Foo {
Pos pos_;
public:
Pos& GetPos() { return pos_; }
const Pos& GetPos() const { return pos_; }
};
スコープの外側にインスタンスを返すなら、参照渡しじゃ無理なので、コンパイラの
NRVOに期待して、例えば以下のように書くことになる。
inline Pos GetPos() {
Pos result;
/* code */
return result;
}
NRVO非対応でRVOだけ対応のコンパイラだと、
inline Pos GetPos() {
/* code */
return Pos( /* code */ );
}
こういうコードじゃないと
>>741 の言うような最適化は掛からない。
コンパイラーメーカーもC++標準化委員会もNRVOが掛かるように頑張ってるはずだが、
実装状況はコンパイラによってまちまちなんで調べてくれ。多分検索すればすぐ分かる。
VC++なら2005からNRVO行けるっぽい。/O1くらいでもNRVOは掛かる模様。
プロファイラで後から最適化ってのも常道だけど、I/F設計段階の話はそうもいかないし
なぁ。
まぁ、俺なら基本的には参照渡し、リターンで解体される自動変数なら値渡しで返して、
後者がボトルネックになるならインライン化でたぶんNRVO発動でおk、って書く。で、
「この設計だと遅そうだしポインタ渡そう」って言われたら、実際どうなるか興味ある
んでベンチでも書いたり、ついでに↓みたいなのも一緒に見たりしながら相談する。
http://msdn.microsoft.com/en-us/library/ms364057 (VS.80).aspx
>>744 補足
スコープの外に「自動」インスタンスを返すなら、だな。
つーか、二つめと三つめは最初の質問のシチュエーションから逸脱してるな。すまん。
まぁでも、メンバ関数でもNRVOは重要なんで、仕組みは知っておいた方が。
746 :
名前は開発中のものです。 :2009/07/19(日) 05:29:35 ID:TXlg+NUw
//●ジャンぷ if(key & PAD_INPUT_B){ for(double t=0; t<10; t=t+0.1){ int vo = -60; int ay=10; jikidata.y = vo * t + 1/2 * ay * t*t + jikidata.y; WaitTimer( 1000 ); jikidata.ghandle = LoadGraph("media\\imgbb4792ea7ec6f3d_frame_0009.bmp"); } } DXライブラリを使ってアクションゲームのジャンプをプログラムしたいんですが これで実行すると、キャラが止まったり、動かなくなってしまうんですが、どこを改変すればいいんでしょうか?
WaitTimerは使っちゃだめれす><
749 :
名前は開発中のものです。 :2009/07/19(日) 21:11:12 ID:mJh1WCZZ
フラッシュマン
>>748 リアルタイム処理で使うのは駄目に決まってるな
フェードアウト後の待ち時間とかに使うのが正しい
でも個人的にはウェイト系の関数やら処理体系作って、それを使えばいいと思う
while(……){
//ここにwaitから切り放したい処理を書く
//例えば、ゲームは止まっても風景は動かしたい
//処理ごとにwaitを分ければさらに色々なことができる
if(waitFlag==FALSE){
//ここにwait前にやりたい処理を書く
//waitTime、waitFlagは本来条件式で設定するのが望ましい
waitTime=1500;//1500ミリ秒=1.5秒
waitFlag=TRUE;
}else{
if(1ミリ秒経過したら){
waitTime--;
}
if(waitTime==0){//1.5秒経った
waitFlag==FALSE;
}else{
//waitTime=0未満;を描いたな?と怒る
//エラーフラグを大量に埋めるのは開発の最適化とアンチートに役立つ
}
}
}
こんな
最後のとこはelse if(waitTime<0)だた
ジャンプするたびに画像をロードしまくってどうする
>>750 これならどの環境でもキッチリ結果が出るね
カウンタ回すしかやったことないから参考になるわ
だけどアクションとかだと遅延おきてカクカクにならないかな
同じフォルダ内にあるTTFフォントを使って文字列描画したいんですけどそれはDXライブラリでできますか? フォントのファイル名を指定して読み込みするような関数が見つからなくてどうすればいいか困ってるんですが
なんかソレっぽいサンプルどっかで見かけたような気が……
ごめん適当なこと言った DXライブラリでは出来ないような気がする でもフォントファイルを一時的に開くプログラムがあれば通常のフォントと同じように 名前の指定だけで使えるはず……
757 :
754 :2009/07/23(木) 02:35:05 ID:M1f3xhTA
ありがとう!!探してみて解決したよ!! 結果はWin32APIのAddFontResourceEx関数を使えば一時的にTTFファイルからフォントリストに登録できるみたい 第二引数に0x10(FR_PRIVATE)を渡せばそのプロセスだけで使えるようになるぽ 使い終えたらRemoveFontResourceExで開放する必要もあるみたい。登録時とまったく同じ引数で呼び出す必要あり AddFontResourceEx("hoge.ttf", 0x10, 0); // これでhogeフォントを登録。DxLibのEnumFontNameでも表示されるはず。 RemoveFontResourceEx("hoge.ttf", 0x10, 0); // 削除。引数を↑と同じにしないといけないらしい いくらDxLib関係でググっても見つからなかったので少々冗長気味に解説してみたよ 正直この機能はDxLibにラップされてても違和感無いと思うんだけど
確かに自動対応してもいいレベルではある
暗転ってどうやってやってる?
普通に画像を表示して、その上にかぶせるように真っ黒な画像を少しずつ濃くしながら表示。 完全に濃くなったら、表示する画像を切り替える。 真っ黒な画像を少しずつ薄くしながら表示する。完全に薄くなったら、以後、真っ黒な画像は表示しない。 これでいいと思う。
SetDrawBlendModeとDrawBoxでやってるな。
これ一旦止めた音楽止めた場所から再開させることできないのか
できるけど Dxlib.h内を、サウンドハンドルの再生位置で検索
ありがとうございます やってみました PlaySoundMem でやってるときは GetSoundCurrentPosition で取得すればいいのかな でやってみましたが GetSoundCurrentPosition がいくら再生してるときでも0しか返ってこないのですが ちゃんと引数に正しい SoundHandle 入れてますよ
ごめん、検証してなかった PlaySoundMemのTopPositionFlagを0にすれば 取りあえずは途中から再生できるはず
ありがとうございました、できました
DXライブラリ卒でD3D9使ってるけど、久々にDXライブラリ時代のソース引っ張り出して ちょっと懐かしかった。pchも使ってなかったんだなぁとか。 つーかpch使ってない奴も多そうだから勝手に手順説明するぜ。 1. プロジェクト→新しい項目の追加→ヘッダーファイルでstdafx.hをプロジェクトに追加 2. プロジェクト→新しい項目の追加→C++ファイルでstdafx.cppをプロジェクトに追加 3. DxLib.hや標準ライブラリなど、自作でない巨大ヘッダのinclude文を*.cppから全部削除して、 代わりにstdafx.hの中に全部突っ込む(自作ヘッダは普通に*.cppで各自includeする方がいい) /* stdafx.hの例 */ #pragma once #include <DxLib.h> #include <string> using std::string; /* ここまで */ 4. 全ての*.cppの最初に#include "stdafx.h"を書く(コメントは前に入れてもおk) ちなみにstdafx.cppは、#include "stdafx.h"の一行だけでおk 5. ソリューションエクスプローラでプロジェクト名を右クリックしてプロパティを開き、左上の 構成を「すべての構成」にして、構成プロパティ→C/C++→プリコンパイル済みヘッダー→ プリコンパイル済みヘッダーの作成/使用を「プリコンパイル済みヘッダーファイルを使用する (/Yu)」に変更する 6. ソリューションエクスプローラで「stdafx.cpp」を右クリックしてプロパティを開き、左上の 構成を「すべての構成」にして、構成プロパティ→C/C++→プリコンパイル済みヘッダー→ プリコンパイル済みヘッダーの作成/使用を「プリコンパイル済みヘッダーファイルを作成する (/Yc)」に変更する これで、stdafx.hを変更する時以外は、ビルド速度がかなり劇的に上がるはず。 大した作業にはならないはずだから一度試すといい。
ああ、気付きにくいかもしれないことを補足。 自作ヘッダから<string>とか<math.h>とか使いたい場合も、「必ず全ての*.cppの最初で stdafx.hがインクルードされる」という規則だから、結局は自作ヘッダがインクルードされる 時点ではstdafx.hが既に読み込み済みになってる。 なので、自作ヘッダに#include <string>とか書く必要も無し。自作ヘッダで使いたい標準の ライブラリなんかのincludeも、全部stdafx.hに逃がせばおk。
これは便利そうですね デメリットとかはありますか?
今の俺には何のことだかさっぱりだがメモっておく
デメリットは思い当たらないなぁ。 「使いたい外部ライブラリのヘッダを全部何も考えずにstdafx.hに入れまくれ」 「全てのcppファイルの頭でstdafx.hをインクルードしろ」 ってルールが縛りといえば縛りだけど、むしろ楽になるだけだと思う。コンパイルも 別次元に速くなるし。 原理的には、stdafx.hの中身をコンパイルし終わったとこでいったん止めちゃって、 中間情報として拡張子pchのファイルに保存しておき、*.cppをコンパイルする時に その情報を使い回して、#include "stdafx.h"まで読み飛ばして、それ以降のソース だけコンパイルするイメージ。実際に内部がどう動いてるかは知らないけど。 なので、cppの頭で#include "stdafx.h"を入れ忘れると、 「プリコンパイル済みヘッダーの検索中に予期せぬ EOF を検出しました」 とか言われる。 stdafx.hの中には、C++のソースなら何書いても多分平気だから、大抵の使い方には 対応できると思われ。あまり頻繁に書き換えると、そのたびにpch作り直しで効果が 薄まるけど、自作ヘッダでも「更新少ない」「かなり色々なソースから参照される」 みたいな奴はstdafx.hに入れちゃってもいいと思う。
772 :
名前は開発中のものです。 :2009/07/25(土) 15:25:58 ID:3qZ+q5uI
当たり判定はこうすればいい。 プレイヤーキャラクターを移動させたければこうすればいい。 といった部品部品は作れるけど、いざゲーム自体を作ろうとなったら全然作れないんだ。 いったいどうしたらいいのかな・・・?
その部品を組み立てればゲームになるはずなんだが 一体何が問題なんだ? それを言わずして質問されてもわかるはずがない。
>>772 とりあえず目標を決めてはどうか。
ただし、あまり大作でも作れなきゃ意味がないので、
初期の携帯電話用ゲームや、初期のファミコン、インベーダゲーム、倉庫番あたりを目指す。
矢印キーだけ、せいぜいそこにボタン1個くらいで遊べるゲームが楽でいい。
目標が決まったら、それを「部品」に分解する。
うまく部品単位になればお前さんの勝利。
綺麗な部品作りの楽しさとゲーム作りの楽しさは、何というかちょうど90度くらい ずれた方向性がある。両方うまい人はすごくいい。 最初の一歩はとにかく単純に、ゲーム内容どうでもいいから一本のゲームとして 成り立ってる物を作る、つーこと。極端な話、全部WinMain()に入ってても一向に 構わない。(綺麗な部品作りに慣れてるならそうはならないだろうが) 部品は必要性を実感してから作る方が最適になりやすい。いわゆるシーズじゃなく ニーズで作る。先に需要を予測して部品を作る、ってのはほどほどにすべき。 で、「クソゲー作ってもなぁ」と思うなら、いっそ最初から真面目に本気ゲーを 作り始めてしまっても全然問題ない。
個々の部品の作り方が分かっていても、それらを全部組み合わせて、うまく動くようにするのは結構大変。 特にシーンやリソースの管理が入ってくるとかなり面倒になる。 そういう点ではやっぱり最初は1面のみの単純なゲームから始めた方がいいね。 プログラムが大きくなればなるほどバグ取りも大変になるから、最初は小規模から始めた方がいい。 自分はいつも最初からあれこれ入れようとして墓穴を掘ってる。
プログラムを書く能力とゲームを組み立てる能力は、全くの別物 紙にステータスを書いて遊ぶとか、人形をいじって遊ぶとか そういうアナログな手法でイメージを立てて設計する 何も考えずにプログラムを先に書くのは意味がない。 ゲームを考える(妄想する)、ゲームを作る、ゲームを遊ぶ この3つのどれが欠けてもうまくいかない まず面白いシステムや世界観を考える 次にプログラム、シナリオ、絵、音楽などで形にする 最後に完成品を遊び倒して面白いゲームに近付ける ゲームは工業製品だから、作り手の職人気質がもろに出るよ
>>772 は単に大枠の設計が分からないとかそういうことなんじゃね?
>>776 のいうシーン管理とかそういう骨組みの構造とか
stdafx.hにいれた上で、そのソースに必要なヘッダはあえて書くソースに書くようにしてる
俺は何も考えずにいきなりプログラム作るぞ。 特に最初のうちは、あんまり考えないほうがいいと思うんだけどな。 緻密に設計していくのは、ミニゲームを何本か完成させた後のほうがいいと思う。
俺は「これできるかな? ……できた。んじゃこれはできるかな……? よしできた」とかやってるうちに 肥大化してゲームになってる。
俺は「これできるかな? ……できた。んじゃこれはできるかな……? よしできた」とかやってるうちに 肥大化してまとまらなくなってやめる。
俺は「これできるかな? ……できない。んじゃこれはできるかな……? できない……」とかやってるうちに 肥大化することなく寝る。
784 :
名前は開発中のものです。 :2009/07/27(月) 01:20:08 ID:VJq6W4rL
昔はコードが汚いだとか構造が嫌だとかの細かいことが気にならなかった 今はゲームが完成しない
習作はできるが完成はできん
> 「○ ○の作り方」という本を読んで「この本に××が足りない」と考え、 > そこで今度は××に冠する解説をよみ「これには△△が抜けている」という印象をもち、 > そしてなかなか自分のゲームが完成しない、というパターンに陥った人は少なくないでしょう。 > さまざまな技術書や解説書、入門書を読みつくし、最先端技術に精通しているはずなのに > 自作アプリケーションがほとんど作れないというのは、決して珍しくありません。
そういうのを「頭でっかち」というんだな。
どこの引用なんだ
本を読めば作れると考えるのが間違い
昔どっかのゲームクリエイターが「やってみるのが一番勉強になる」的なこと言ってたから 俺はそれを胸に頑張ったよ…。
男は度胸 何でも試してみるもんさ
女は豊胸?
795 :
名前は開発中のものです。 :2009/07/28(火) 02:18:15 ID:0RhUYUoP
股だな
DXライブラリPortable、次のバージョン来ないかな 3Dポリゴン描画したいです……
そういやDX3Dってどれくらいできたのかな?
>>797 逃げたんじゃないか?
大学中退するやつだし
DX3DってD3DXと紛らわしいな。 3D描画をDXライブラリみたいに単純化するのは無理。3D描画のフレームワークは D3DXで十分。それ以上やるとライブラリの独自色が付く。 2DもD3DXSpriteで構わないし、ちょっと調べればテクスチャにαの付いた板ポリを D3DXで描画する方法はいくらでも出てくるけど。 DirectX6はDreamcast向け、DirectX8はXbox向けに作り直されてる訳で、そのまま でも十分行けるライブラリ。DXライブラリの最大の意義は、WinMainのすっきり感 だと思う。
本家の名前の紛らわしさに比べたら… DXライブラリでも使えよ!って言われて固有名詞だとは夢にも思わず なかなか存在に気付けなかった俺
3Dなんかいくら敷居を下げたところでDXライブラリしか使えないような子には扱えないよ ゲームフレームワークみたいな方向に簡単にするなら別だけども
あの・・・ 流れを断ち切った横レスなんですが、 C言語+dxlibで作ったプログラムをC++のクラスってのを使って まとめようと思い、メインループを書いてみたんですが、 書き方があっているのかすごく不安なのでお聞きしたいと思いました。 もし、スレチならいいスレ教えて・・・ よし!見せてみろ!ならソース張る。
DXライブラリに親でも殺されたのか
805 :
802 :2009/07/28(火) 21:52:18 ID:C3k1GCCB
ワーイ ID GCCってw #include "GV.h" int WINAPI WinMain( HINSTANCE hI,HINSTANCE hP, LPSTR lpC,int nC ) { ChangeWindowMode(TRUE); if(DxLib_Init() == -1) return -1; //↓このあたりがめっちゃ不安なのですが。 Flame* T = new Flame; // SetDrawScreen(DX_SCREEN_BACK); //MainLoop()内で処理を書いてます while(!(ProcessMessage()) && !(CheckHitKey(KEY_INPUT_ESCAPE)) && (T -> MainLoop()) && !(ScreenFlip()) && !(ClsDrawScreen())); // DxLib_End(); return 0; } ヘッダファイルも見てもらえるのなら・・・・☆彡ってレスしてくらさい
それだけならそんなにおかしいところはないと思う 細かいどうでもいいことを突っ込ませてもらうと, FlameじゃなくてFrame あと大文字一字の変数名はやめてくれ紛らわしい
807 :
801 :2009/07/28(火) 22:09:21 ID:C3k1GCCB
フレイム・・・フレーム・・・ 一文字違いが大違いでした・・・ 参考にした本(セガ本?)にそういう記述があったのでつい (Tの件は) T* <=この変数を使う場合 T->A T->B とか、 for(int i=0;i<1000;i++){ T-> X[i] } みたいに変数の中身をwhileの中で更新しまくっても問題ないですか?
ゲームプログラマーになる前に〜ってタイトルの本か
そうです。 ちなみに2章を読み始めてから進まないまま二ヶ月目
>>807 ダメダメ
それならCの構造体と変わらない
クラスの外からメンバ変数にアクセスするのは避ける
クラスっていうのは,外からはボタンを押すだけで中で勝手に処理してくれる
便利な機械みたいな感じ(そういう風に作るのが理想)
先にEffectiveC++とデザインパターンの本読むべき
クラスを利用したこともないのにいきなり作れるわけがない ためしに他の人が作ったC++のクラスライブラリを触ってみればいいんじゃない ゲームエンジンならSeleneとか 英語大丈夫ならIrrlichtなんかも簡潔でおすすめ どういう風にクラスを使えばいいのかわかるよ
813 :
802 :2009/07/28(火) 22:29:42 ID:C3k1GCCB
なるほど。。 本高い・・・。 すでに 14才から・・・、 OS自作・・・ やさしいC・・・ よくわかるC・・・ IP! Cプログラミング講座、 アルゴリズムマニアックス、 はじめてのアルゴリズム入門、 とかの本を買っては進めないところがあって止まるを繰り返してもう資金が・・・ 来月余裕があったら買ってみます。
買う前に一冊読みきれwww それか図書館だな
815 :
801 :2009/07/28(火) 22:35:44 ID:C3k1GCCB
これだけ本読んだらもしかしたらオレゲーム作れるんじゃね? と勘違いして作り始めたのさ! もう・・・タイムリミットがちかずいている・・・・・・ やつが・・・・来る!
マクドに注文する側がバイトのシフトとかパンズの在庫を気にしちゃ駄目だぜ
817 :
802 :2009/07/28(火) 22:41:24 ID:C3k1GCCB
>>815 そういうことなのか!
なんかよくわかった気がしました。
クラスの中で処理を完結すればいい感じになれるってことですね♪
アレ?ッてことは今書いるプログラムは・・・・
すまん、面白そうなんで↑の記事をちょっと読んでみたが、初心者でWindows環境だと 素直に読めるもんじゃないかも。 ある程度「ふんふんそんなもんか」って飛ばし読みするには悪くないとは思うけど、 真面目にサンプルコードを走らせたりするタイプだと微妙にきつそう。
あんまり低レベルなことは気にしなくていいと思うよ オブジェクト指向をちゃんとやりたかったらJavaのような 思いっきり抽象的な世界でリフレッシュした方がいいかもしれない ゲーム作るのだって簡単
えっと・・・ 関数を呼び出したときには元の場所に帰ってくるための情報が どこかよくわからないない場所に スタックの構造をした形でつまれているんだよ、ってこと?
しかしゲームを作るのにそれほど必要ない知識なのであった
java・・・・ とりあえずおいらゲームを作って見るよ! クラスの中でクラスを宣言したりnewする方法がまったく理解出来ないけど。 時間切れなので・・・ノシ ご指導ありがとうございました!
さて、そろそろD言語に手を出そうか…
そして一向にゲームが完成しない罠 勉強もいいけど取り敢えずサクッと作った方がよいかも
上から降ってくる「モノ」を、ただひたすら画面下部で避けるだけのゲームとか、そういうの?
あら?? ニコニコ動画にうpしたのならあるけど・・・・ それよりヘッダファイル見る?
見てあげないこともない
つーか、やろうとしてることから考えると、ちゃんとメモリの意味が分かってないと トンチンカンになる。 余計なことやろうとせず、意味の分かってる仕様だけ使っていればいい。いわゆる better CとしてのC++。newとか罠満載なものにやたらと触らない。
俺は昔アセンブラかじったことあったからメモリの意味はある程度わかってるつもりだったが、 最近までポインタが理解できずに使えなかった……。 どっかのサイトで「int *p」は「int* p」だって書いてあるのを読んでやっと少しだけわかった気がした。 「なんで *p で宣言してるのに使うのは p なんだ???」とずっと疑問だった。 Cって俺にはわかりづら過ぎる……。わかる奴凄い。
ポインタなんて最初あまり分からずに大分年月経ったらやっと分かり始めた いろいろ試行錯誤とか苦労しないと分からないのでは 話変わるがちょっと上のレスに関連することだが俺結構メンバ公開にして外からアクセスしてた 何かアクセサ使うとその分遅くなるような気がしてしまうんだよなあ
ぶっちゃけアセンブラが分かってれば、ソフトウェアレベルの出来事なら一番下の構造 から透けて見えるから、ポインタなんかは概念も挙動も一発で飲み込める。 下の構造が見えないと、どんな処理が速いとか遅いとか効率いいとか悪いとかは経験の 繰り返しで飲み込むしか無いけど、下から見えていれば論理的に自然に飲み込める。 だが、アセンブラを理解する段階での苦労が大きいし、今のご時世でどんだけ報われる かは自信ないからお勧めもしない。 とは言っても、昔は「まずアセンブラで」とか「BASICかアセンブラしか開発環境は ありません」とかが普通だったから、そこまで難しいもんでも何でもないけどな。
アセンブリ言語自体はそらもう単純なもんだからな ただ今のプログラミング環境に慣れ親しんでると、ちょっとした事すら書くのが面倒ってだけで
newとかdeleteとか 必要性がよくわからなくて結局殆ど使っていない。 使った方がカッコいいんだろうけど
動的に確保するときだけ使ってる
俺も必要性よく分らなかった時は使わずにやってた 使い方覚えたら結構便利だ すぐでなくともそのうち覚えればいいんじゃないか
使わないでなんとかできてると 覚えようとしないんだよなぁ……。 プログラム言語の解説サイトとかで命令の説明とかはいくらでも読めるけど、 「ゲームを作る際にこうやって使ったら便利!」とかまで書いてある事ないじゃん? だから「ふーん」で終わっちゃうんだよね……。 いや俺が不勉強なのはわかってるんだが。
必要になったときに学ばないと覚えないんだよなぁ…… ポインタもメモリの確保もよく分からなかったけど、 一度必要になってから調べなおしたら結構使いこなせるようになった
俺もテンプレート使う気なかったけどある時どうしても使う必要に駆られて使ってみたらすんなりいって便利だったなあ まあ使わないでいけるんならいいんじゃまいか
C++は文法習得〜良いコーディングの間が長すぎる いろいろ覚えるとC++のほうがゲーム作りやすく感じるんだけどな
Javaだと手軽にクラス使えるから結構細かいこともクラス使って実装したりするけど C++はクラスが使いにくくて返って面倒になったりするからつい細かいことはC風に書いてしまう
STLはすげー便利
845 :
843 :2009/07/29(水) 13:17:37 ID:B4ng0Zvn
いや出来合いのクラスを使うのはいいんだけど 作るのがめんどくさいんだよね
そもそもJavaはクラス使わずに書けないのでは
そりゃもちろんそうだけど,「すべての変数や関数がクラス内に収められている必要がある」 というだけのことであって,クラスを単なる名前空間と考えるならCと変わらん クラス使ったからってオブジェクト指向になるわけじゃない
まあ、intだってクラスだし、C++は設計的に変数は全部クラスっちゃクラス さまざまな動きするものをまとめて管理するにはクラス使う方がラクだと思う シューティングの弾とかRPGのNPCとか。 というか俺はクラス使った半オブジェクト指向でしかゲーム作れなかったりする
JAVAでひとつのクラスの中に全ての処理を 手続き型で書いちゃうプログラマを思い出した。
ああ、俺がやりそうだな、そういう事。
>>848 >まあ、intだってクラスだし
おいおいそれはJavaの事を言ってるんだろうな?
C++でのintはコンストラクタもデストラクタも持たないPODだが
Javaのintはプリミティブ・・・
>>852 すまん
Javaの事>Javaのintegerクラスの事
で
Javaでもintはクラスではなくプリミティブな値型 むしろJavaのほうがクラスとプリミティブ型の間に明確な振る舞いの違いがある intをクラスの一種(正しくは構造体)として扱うのは.NETだな(C#やVB.NET)
Rubyもね
あれ?違ったっけ? と思ったら C++では「intにもコンストラクタとデストラクタがある」ってのを間違えて覚えてたみたい…… 恥ずかしい///
857 :
名前は開発中のものです。 :2009/07/29(水) 18:42:39 ID:PJW2UirX
>>857 まてまてまて。流石にそれは話にならんぞ。
料理が出来ないって人に、
「出汁とかその辺無視してもいいから、とりあえずお味噌汁から作ってみようか」
ってアドバイスして、無理って言われたようなもの。
教えて偉い人 爆発とか衝撃波みたいなエフェクトを管理するクラスを作ったのよ メンバ的にはコンストラクタとデストラクタと描画中かどうかのフラグ管理と実際に描画する関数といった具合 コンストラクタでエフェクト用の画像をメモリに読み込んでるんだけど このクラスのオブジェクトを作る度にロードされるのが気持ち悪くてしかたない 画像リソースを読むところだけ外に出せないだろうか
前もって画像を読んでおいて、そのグラフィックハンドルを コンストラクタでクラス内の変数に代入すればいいんじゃないの? グラフィックハンドルってただの数値だし
クラスAのコンストラクタで画像を読んで、 クラスBのコンストラクタでそのグラフィックハンドルを得るようにした場合、 どちらのコンストラクタが先に呼び出されるか分かりませんが問題ないですか
その場合クラスAは動的に確保しとくべきじゃないの
// あらかじめ画像を読み込んでおく Image *image = new Image("effect.png"); // 複数のインスタンスでハンドルを使いまわす Effect *explode1 = new Effect(image->handle); Effect *explode2 = new Effect(image->handle);
どこでdeleteするんだ?
画像管理するクラス作っておいて以前ロードしたものと同じものがあったらそれ使いまわす
shared_ptrで画像を共有する
画像管理クラスなんて態々作らずメイン処理のクラスにハンドル持たしてるわ俺 そっからオブジェクトクラスに渡すのはそのハンドルのポインタにしてる そうすれば途中でウィン→フルに変えるときとかもそのメインの画像読み込みメソッド呼び直すだけで済む
868 :
名前は開発中のものです。 :2009/07/30(木) 12:04:22 ID:OvoMaJfI
ハンドラをスタティックにしちゃだめなのか?
上げちまったすまね むしろグローバルでハンドラを作れってことか 再利用性が皆無になるが
コンストラクタで画像を読み込み+デストラクタで開放するだけのクラスImageを そのステージで必要ならshared_ptrで読み込む エフェクトを実際に使う箇所ではそのshared_ptrをコピーして使う ステージを通して読み込みは1回だけで、コピーもshared_ptrのコピーだけですむから軽い しかもステージが終わったら勝手に安全に開放される 何よりコードがすごい簡単で見やすくなる ってじっちゃがいってたけど、俺GUIのゲームまだ作ったこと無いからわからねーわ
>>870 とかを見るとさらに、
class ImagePool : noncopyable {
typedef shared_ptr<Image> ImageSP;
typedef unordered_map< wstring, ImageSP > ImageHash;
ImageHash ih_;
public:
ImageSP get( wstring name ) {
ImageHash::iterator it = ih_.find(name);
if ( it == ImageHash.end() ) {
it = ( ih_.insert( make_pair( name, ImageSP( new Image(name) ) ) ) ).first;
}
return it->second;
}
void clear() { ih_.clear(); }
};
みたいな感じのも書きたくなるな。パフォーマンスどうなるかはシラネ。
ああ、もちろんステージの頭で必要そうなイメージはget()しまくっておくんだけどな。 ステージ始まってるのにいちいち止まってたらうぜーし。
どうせステージ読み込むときに何回か呼ぶだけだろ そんなもんにパフォーマンスもクソもあるかよ
参照時のパフォーマンスだぜ まぁhash検索のとこが重いだけだから、何度も何度も何度も何度もshared_ptr拾い直す ようなアホなことをしなきゃ問題無いだろうけど つーかぶっちゃけ超絶やっつけだから先に言い訳で書いた>パフォ
class effect { private: int x,y,kasokudo,flag,type,r,g,b,xt,yt; int static swgraph,slgraph,slgraph2,slgraph3,vcgraph,ptgraph,ptgraph2; double angle,timer,spread; public: effect(){} Load_resorce() (中略) ~effect(){} }; int effect::swgraph=0; int effect::slgraph=0; int effect::slgraph2=0; int effect::slgraph3=0; int effect::vcgraph=0; int effect::ptgraph=0; int effect::ptgraph2=0; 結局こんな解決に落ち着いたよ ありがとう 無理に外へ出さないでヘッダと画像ファイルだけ移植すれば使いまわせる方がいいかなと 画像ロードするメソッドを1回だけ呼ぶようにしてスタティックなハンドラへぬっこむ感じで
ウィンドウとフルスクリーンの切り替えって、設定と読み込んだもの全部どこかに記録しておいて、切り替えた後に読み直さないといけないの?
メモリに読み込んでたものは切り替えで開放しちゃうんじゃなかったっけ? 呼びなおすようにはしてる
画像の情報とハンドルをラップするクラスを作るのがスマートかなあ でもそういうことしだすと何のためにDXライブラリ使ってるのかいまいち分からなくなってくる どうせラップするんだから中身は別に複雑でもいいよねみたいな
グラフィックを読み込む処理はひとまとめにしてる。 グラフィックを読み込んだ時にエラーだと-1が返ってくるそうだから、 グラフィックハンドルに-1はありえないって事で 各グラフィックハンドルの初期値は-1にしておいて、 -1でないやつだけを読み直すとかやってるな。
ProcessMessageの返すエラーと×印を押した時の終了メッセージを見分ける方法 あるいは、右上の×印をクリックできないようにする方法はありますかね?
×をクリックできないようにするのはあまりよろしくないんじゃないか
クリックできなくさせる事になんの意味があるのかわからん。
閉じるボタンは GetWindowUserCloseFlag で取得できるかも
サンクス なんとかなりそうです
GetWindowUserCloseFlagってエラーが起こった時の返り値ってわかりますか?
エラーって?
>>888 だいたいほかの関数だと成功:0、エラー:-1を返してるじゃないですか?
そいうのがこれにも無いのかなとおもって
TRUEかFALSEか取得して返すのにエラーが出るとは思えないけど。 でも一応DxLibは関数の共通規約が-1=エラーぽいから-1だけ特別扱いでいいと思うよ
エラーが起きない関数だってあるんだから、余計な処理はしなくていい。
GetWindowUserCloseFlagってエラー起きないの? ドキュメントに載ってない関数だから知らないんだけど ソース見る気はしないし
暗号化した画像ファイルからDrawGraphで描画するまでの手順って ファイルから読み込み複合化した色情報を配列にセット →MakeARGB8ColorSoftImageなどでSoftImageのメモリ確保 →DrawPixelSoftImageなどで配列からSoftImageに書き込む →CreateGraphFromSoftImageなどでグラフィックハンドルを作成 →DeleteSoftImageでメモリ開放 →DrawGraphとかで描画 でおk?
自分も用意したフォントが使いたくなったので
>>757 の方法を試してみたんだけど、
開放に成功しないんだよなぁ……
仕様上プログラムが終了すると開放されるみたいだし、大丈夫なのかなコレ
895 :
894 :2009/08/03(月) 18:43:55 ID:Iq3WkgiH
うわー引数ミスってただけでした…… こめんなさい
おまいら名前空間ってどうしてる? 微妙にグローバルなのが邪魔くさいんだが、Dxライブラリのソースをまるっと書き換えるしかない?
WIN98前後にプログラミングやってみたくなって、 とりあえずCだけ独学してすぐにDirectX見て 挫折した自分には今更ながら、ピッタリじゃないか。 実際の所はオブジェクトで書いていけないと、ツラいの?
さぁ? 俺はオブジェクトが何かも知らないが DXライブラリのおかげでゲームは作れてる。
main.cppとヘッダファイルだけでゲーム作ってる俺もいるし
何か途中でフル⇔ウィンドウ変えれるようにしたらフルにした時に画面がチラつくんだが 画像を読み直すだけでは駄目なのか
と思ったら事故解決した SetDrawScreen( DX_SCREEN_BACK ) ;死直さないと駄目なのか
>>897 ちょっと勉強すればいいだけのことを避けて
ずいぶんと無駄に自分の幅を狭めてると思わない?
みんなDxLibのラッパークラスとか作っちゃったりするの?
>>904 ラッパーというか、あのまんまじゃゲーム作りに面倒だから、
あれにもうちょっと色々と処理類を追加して、作りやすくはしてる。
ラッパを作らずに、ゲームを作れるのだろうか。
device->DrawImage((Image*)image); みたいな? さすがにこんなラッパーが必要になるようなら他のC++用のライブラリ使った方がいいと思うよ
ゲームなんてラッパみたいなもんだ
そんなことせんでもゲーム作れるようにするのがDXライブラリが目指す所だと思うし
そんなことしたいならDirectX覚えろっていう
併!用!
誰がラップ歌えと。
うまいな
>>911 は、その才能を別のところに生かすべきだったと思う
ところで、あえてゲームのジャンルを指定せずに聞くが
ChangeFontType( この辺とか ) ;
ChangeFont( "この辺て" ) ;
何入れてる?
ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE ) ;
ChangeFont( "MS P明朝" ) ;
とかだと、どうにも汚い
メイリオとかオーサカつかえりゃいいんだろうけど
640x480のwindowモードで1秒に60回メインループを回してClearDrawScreenとScreenFlipするだけのプログラム 書いたらCPU使用率が20%超えてるんだけどこんなもん?WaitTimer(10);は入れてます。
>>915 >>757 使ってBDF M+やVL Gothic使うと汚くはないしライセンス的なものもきれいで好きです
>>916 そんなものじゃない?自分の環境でも、だいたい20%前後で推移してるし。
ScreenFlipには、アイドリングループもやってるような事を
>>70-95 当りに書いてるし
きっと大体そんな感触。
だから、多少負荷を掛けたループを入れても、いきなり100%とかにはならないし。
919 :
名前は開発中のものです。 :2009/08/05(水) 05:21:50 ID:Nty2bj+r
A:あるXというパソゲーがあったとして、そのゲームをDXライブラリで再現したとしたら どっちの方が処理速度が速い? 管:それはおそらくオリジナルのゲームになるでしょう。 しかしそれは仕方ありません。DXライブラリは DirectX を意識しないでプログラムを 組めるように出来ているので、どうしても DirectX を意識して、DirectX にとって最適な 方法を念頭にいれて作られたソフトには敵いません。 ですが、それは DirectX と密接に関わらないと出来ない表現や処理が出きるか出来 ないか程度の違いで、処理速度的には目を凝らさない限りわからない程の差だと 思います。 これみて思ったが前に hot スープ なんとかってベーシックみたいなやつ使ったことあるけど あの処理の遅さには萎えた
HSPのことかあああああああああ
そもそも比較対象とするほうがおかしくないか。
HSPはインタプリタだし 過去にGameMaker使ってた俺はC++に乗り換えて処理の早さに感動した 弾10000個出しても一切処理落ちなしとか
家庭用ゲーム機ってCPU使用率どのくらいなの
>>923 ゲームによる
PS2の後期作品は常に100%近いものも多いと思う
メイリオはXPならダウンロード可能になってるから、
・XP以上でやれ
・メイリオ自分で落とせ
と割り切った動作環境なら使えなくもない
まぁ、そこまでするより
>>917 がベターな気はする
>>919 初期化に関してはDXライブラリの方が遅い
なぜなら使わない機能まで実装してしまうから
初期化のプロセスさえ我慢してしまえば、DirectXを使っている以上、ほとんど処理に差は出ない
初期化も他のライブラリに比べればかなり早くないか? 初期化→モデル読み込み→表示ってプログラム組んでるけど 起動から表示まで1秒も掛からないぞ
え?
クライアントがウィンドウのタイトルバーをつかむとかして処理が停止したことを判別する方法はある?
アクティブかどうか判定する関数があったような
>>929 もし直接DxLibのAPIになかったとしても、
最悪隠れAPIのSetHookWinProcを使っていけちゃうのであきらめずに頑張ってください
フルスクリーンにすればいいのに
フルスクリーン・ウィンドウの切り替え時って画像はDeleteGraphする必要なし?
>>932 でもやっぱウィンドウのほうがやりやすいゲームとかあるよ
グラフィックハンドルが有効かどうかを調べるにはどうすればいいんだろう GetGraphSizeしてエラーだったら無効なハンドル?
消したら-1を入れておくとか
・アンインストーラー必須になる可能性がありそう ・ユーザーから見たら普通に気持ち悪い ・コマンドプロンプトからコピー余裕でした
というわけで素直にDxEncodeしてSetDXArchiveKeyString使え
よく考えたらvistaじゃ意味ないしやっぱり駄目かな 面白そうだったんだけど……
DxEncodeって安全なの?
ゲームのデータの暗号化なんてのは、玄関の鍵を植木鉢に隠す程度のもの。どうせ 何をやっても安全じゃないから諦めが肝心。ネトゲの通信も同じ。 ちなみに銀行やネットショッピングなんかの暗号は別物で、「解読方法は理論的に 鯖にしか分からない(に等しい)」という仕様だから安全に使える。 ゲームの暗号化が脆弱なのは、クライアント側が解けなきゃ仕様上どうしようも ないから。どう解くかを解析すればそれで終了。ただ、一般人には無理だから、 誰かがツールでも配らない限り一般人は見ることができません、ってだけ。
使用してるデータよりもセーブデータの暗号化の方が大事だよな
そうかー まあなんにしろ俺が自分で作るよりかは安全だろうな・・・
逆に、広く使われてるライブラリはツールが作られやすいから、自作した方が安全な 可能性もあるけどな。 まぁどっちにしろ、本気出せばすぐ解けるから。市販ゲームのデータ抜き出しツール なんてごろごろしてるだろ。商売でやっててもあんなもんだ。 要するに、そんな労力があれば他に割いた方がいい。
>>942 それこそネトゲでもない限りどうでもいいかとw
セーブデータメモ帳で開いてみてチラチラ生データが見えたり、 適当に文字書き込むだけで要素全開放とかできちゃうと萎えるのは俺だけ?
ふつうそんなことしないし
小説って実はいきなりオチから読むことができる
>>946 そんなのやるヤツの勝手だし。
それによって他人に迷惑かけるのでなければどうでもいい。
つーかテキストでセーブデータ作るなよw
原点回帰してセーブ無しのゲームを作ればおk
暗号化なんてしなくてもチェックサムつけとけばいいじゃん。
チーとされてもいいゲーム作るとかな
ちょいごめん。 DXライブラリで作ったゲームって、DirectX9.0以上ないと動かないよね?
>>953 ムービー機能使わない限りは7.0a以降でおk
>>954 mjd? ありがとう、助かった。完全に9.0いるって思いこんでたわ。
98ででも動かすつもりなのか
ファイルをロードするときにパスに代数使えたりしないだろうか キャラクター名の画像を開くとか
ちょっとゲームは置いといて文字列操作勉強してみよう
こんなかんじで いいんだろか ほんとに? char Filename[20]=hoge file_hundl = fopen( Filename , "rb" ) ;
こうなんじゃないの? char Filename[20]="hoge.ext"; FILE *file_hundl = fopen( Filename , "rb" ) ; // ファイル名が hoge.ext のファイルをバイナリ読み込みモードで開く
>>959 2chにどれだけ書いてもコンパイル通らないぜ。
実際に書いて動かしてみたら?
なるほどポインタを指定しなきゃだめなのか コンパイル通ったぜ!ありがとう 必要ないかもだけどフィードバック char Filename[20]={"hoge\\piyo.ext"}; File *hndl=fopen(Filename,rb)
まもなくここは 乂1000取り合戦場乂 となります。 \∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,, /三√ ゚Д゚) / \____________ ,,、,、,,, /三/| ゚U゚|\ ,,、,、,,, ,,、,、,,, ,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/ //三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ∪ ∪ ( ) ( ) ( ) ) ,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ,,、,、,,, ( ) ( ) ( ) ( )
さすがにここじゃなくてC言語の超初心者向けのスレに行くべきだなぁ。
FileRead_openで使いたかったの できればいらんAPI読みたくないなと
勉強したくないだけだろ? パスの文字列を直接いじればどうとでもなる Cの標準ライブラリを使うだけだから使用を避ける意味は全く無い
ぶっちゃけC言語として致命的にまともに書けてない。C言語そのものを勉強しなきゃ いけない段階。 あまり初心者を無碍にしたくないが、C言語そのものの取り扱いが全然駄目となると、 ライブラリを語るスレとしては対象外。
プログラムって、調べて書いてコンパイル通らなかったら直して…… を繰り返して覚えるもんだと思うんだけどなぁ 勉強っていうと知識だけ集める感覚があって言語習得とはなんか違う気が。
きっと、
>>968 は教科書や参考書を一度読めば全部覚えられた天才だからそう思うだけだよ。
普通、大学受験だって、教科書や参考書を読んで、問題集をやって
間違ったら、もう一度参考書読んで、間違わなくなるまでやって、知識を身につけていくもんだ。
プログラミング言語も自然言語も数学も社会も美術も学習過程はそんな感じで、みんな一緒っしょ。
文法くらい間違えずに書いてほしいんだが そうでなくても、明らかにバグの原因になるような考えの足りないコード書く奴多いのに
971 :
名前は開発中のものです。 :2009/08/09(日) 06:41:01 ID:yY5+Xf3s
よく ; を忘れてコンパイラに怒られます
面倒だからstd::stringとかboost::formatとか使っちゃうよ そりゃsprintfだろうがsnprintfだろうがstrcatだろうが、絶対必要なら書くけどさぁ… PCでそこまで切迫すること無いしなぁ
なに話してるんだ?
>>757 のほう方法で読み込んだフォントをプロジェクト内全域で使いたい場合
何かスマートな方法ないものだろうか
フォントのハンドルをグローバルに定義するとかしかないかな
俺はそのままフォントハンドルをグローバルにして使ってる 文字表示多用するゲームだと、どうせフォント開放するのは終了時になるしね
絶対に破棄し忘れるから複数のハンドル作るとかは避けたいしね やっぱりグローバルで宣言しちゃうのが一番か
下手にシングルトンとかやると逆にマルチスレッドでこけたりするしな。 使いすぎなければグローバルはシンプルで軽くて便利。罠もあるけど。 一番の罠は、RAIIによるAPI隠蔽と相性悪いとこだな。
なんという気持ち悪いインデント DxLib_Initを使う前にGetColor使っちゃだめだ
できました ありがとうございました
コンパイル通ることにびっくりした俺ガイル
ところで
>>21 のテンプレで次スレ立ててきていい?
個人的にはスレタイとテンプレのDXの表記を公式と同じ全角にしたいんだけど
俺は半角のままがいいなぁ。 検索する時、アルファベットは大抵半角で検索するから。
俺も半角がいい
半角に一票
んじゃそのままで立ててきます
【DXライブラリ】【DxLib】とかつけるのはどう?
スレタイ長くなりすぎるし、 そこまで全角にこだわる必要なかろう。
乙
char name[100]; strcpy(name,"日本語でおk"); DrawFormatStringToHandle(100,210,cr,FontHundle,"%d",name);//crの値は割愛 とやると数字の羅列が出てしまう 半角文字を指定しても数字が出てしまうんだが何故だかわかるだろうか
%d
ぶっちゃけC言語として致命的にまともに書けてない。C言語そのものを勉強しなきゃ いけない段階。 あまり初心者を無碍にしたくないが、C言語そのものの取り扱いが全然駄目となると、 ライブラリを語るスレとしては対象外。
すまね、自己解決した パラメタの指定がまちがってんだな %dじゃないじゃないか 見なかったことにしてくれ
2分でレスがつくとかはやすぎるだろjk ありがとうorz
Hundle
handleじゃね?
いい加減、スレ違いだから。DXライブラリと全然関係ないじゃん。 頼むから、この流れは次スレにもちこさんでくれ。
自治厨カッコいいです^^
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。