無料で俺がRPGを作れるようにするスレ
■ このスレッドは過去ログ倉庫に格納されています
僕もアプリを作れるようにご指導ください。 今作りたいと思ってるのは ┃ ┃━━ ○┃ ┃ ┃ ┃ ━━┃ ┃━ ━━┃ ┃ ┃ ┃ ┃ 罫線の隙間を○が通り抜けて行き、スコアを競うエンドレスゲームです。 どなたか協力お願いできませんか? >>3 十分理解可能です。 ・・・が、私には作る技術はありません・・・(ゴメンナサイ) >3 ○の動作 壁に当たると、死ぬ 壁の隙間を抜けると、ボーナス得点 右と左にはいけない やってることは、ブロック崩しゲームとほとんど同じ。 ブロック崩しはブロックに当たるとブロックが壊れる。 そのゲームはブロックに当たると○が壊れる。 まずはブロック崩しをつくれるようになるべし。 そして、ブロック崩しを作りたいのであれば、オススメは DelphiやHSP >>8 Delphiって何ですか?それとアプリ作成講座みたいなページあったら 紹介してください。(その前にどのソフトでアプリを作っていいかも・・) ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ ☆★ 送料激安! スピード発送! 商品豊富! ★☆ http://www.get-dvd.com ☆★ 激安DVDショップ 「GETDVDドットコム」 ★☆ http://www.get-dvd.com ☆★ 今すぐアクセス Let’s Go! 急げ! ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ >>9 Borlandの開発ツールというか言語というか.... VBよりはイイかと >>11 えーとHSPという方で基本を学んできました。でもゲームを作るような感じ じゃなかったです。何か説明してるページ無いでしょうか? >>13 探したんですけど、よく分からなくて(汗) >12 ゲームを作成するテクニックに関しては、 googleで探そう。 3さんの言ってるようなゲームなら、プログラミングを始めてすぐできるさ。 数学の知識も使わないし、オブジェクト指向とかポインタとかの知識も 全く必要ないし。 >>17 JaveScriptはきいたことがあるのですが、ちょっと分からないので 説明お願いできますか?それとドコモで専用作成ツールをDLしようとしたら DLできませんでした。 >>3 あ、結構具体的な目標もあるし、本買った方が早いかも。 プログラム関連の書籍とツールにかかるお金ぐらいは出したほうがはやいよ。 それと、もしかしてimode? まず、PC買わないと駄目だよ。 HSPでゲームくらい作れるようになってたら、だいたい他の言語にも割とすんなり入っていけると思うよ。 だからもうすこしHSPをがむばってからVBやDelphiに入れば。 でも俺Delphiではソフトしかつくったことないな でもきをつけるのは、HSPはかなり変数の面でお手軽だから、Cやパールとか他言語に入ったとき、勘違いしないことだな。 ゲーム作るときは、まず最初はブロック崩しとか テトリスみたいな単純で、複雑な処理を必要としないようなゲームを作るべき。 そういうのができたら、シューティングゲームや簡単なアクションを作ろう。 シューティングやアクションも、プログラム自体は難しくない。 でもやっぱり picload "〜jpg"みたいな文章書けるようにならないとだめですよね? >25 その程度はかけないとダメだけど そのくらいなら小学生でも出来るから問題無しですな。 >>27 ということは書けないとアプリは作れませんか? >28 そりゃゲームだし、画像の表示程度は出来ないと話にならないでしょ。 画像表示しないゲームってものすごくつまらなそうなんだけど・・・ こんばんわ。ちょうどPCの調子がよくなったのでドコモでDoJa3,0をDLしました。 setup.exeをダブクリしてインストしようとしたのですが、JAVAなんとかっていうのが DLされてませんと出ました。コレはいったい・・? JDKというソフトをDLしたいのですが、英語ばかりで分かりません。 どなたか誘導?してくれませんか? >>35 ttp://java.sun.com/j2se/1.3/ja/ 思いっきり日本語だが・・・ >>3 ところでiアプリを作るんですか? 覚えることが多いなど敷居が高く、言語はJavaに限定されます。 >>36 右上にあるJ2SETM v1.3.1_08 のダウンロードというのをクリックすると 全て英語になります。 >>37 はい!作ります。でもJDKがDLできなくて・・ アダルトDVDが 最短でご注文いただいた翌日にお届け! http://www.dvd-exp.com 開店セール1枚 500円より http://www.vesta.dti.ne.jp/ ~hi-lite/sample.html サンプルキキキキタタタタ━━━((゚(゚∀゚)゚))━━━!!!!サンプル >>29 ,36 お前らなんでこんな馬鹿に親切ですか? >JAVAなんとかっていうのがDLされてませんと出ました。 >コレはいったい・・? こ れ じ ゃ 無 理 だ ろ でも普通に>>3 みたいなゲームはおもしろそう。 誰か作って! キキキタタタタ━━━((゜(゜∀゜)゜))━━━!!!! http://link.iclub.to/adalt/ 時間があれば作りたいんだがな なあ俺が作れるかはわからんが >>52 まじ頼む。>>3 のアイディアは結構いいと思う。 じゃあ俺と協力して誰か作らないか? まぁ俺はソースかけないから画像担当になるだろうけど・・・ とりあえずキャラのドット画作ってみたから見てみてくれ。 http://machiuke.netfirms.com/files/1180.bmp それと背景(マップかな)は解像度いくつで書けばいいと思う? 一応505対応にしたいんだけど、まず503のアプリを作ってから マップを拡大すればいいと思うんだけど、そこらへんどう? キャラは24*24で書いてみた。 ☆★ 新商品 ゾク・ゾク 入荷!! 急げ〜!! ☆★☆ ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ ☆★ 送料激安! スピード発送! 商品豊富! ★☆ http://www.get-dvd.com ☆★ 激安DVDショップ 「GETDVDドットコム」 ★☆ http://www.get-dvd.com ☆★ 今すぐアクセス Let’s Go! 急げ! ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ えーと携帯用に作るのか? 携帯だと何で作れるの?Java? 自分的にはHSPでやってみたいと思っていたんだが・・・ >>62 HSPじゃ無理って言われたんだけど、どうなんだろ?? とりあえず環境はdocomoのDaJa3,0とJDK(だっけ?)をDLするらしい。 他のところで話す?専用板作って。 いやーちょっと待ってくれ 今は忙しいんだ 水曜まで待ってくれ・・・ >>65 やるときはhttp://www.hamq.jp/i.cfm?i=punch2 に来て。 んでメールはk_pom_pon@inter7.jpにして!別に捨てアドだからな。 >>64 水曜日キタ━━━━━(゚∀゚)━━━━━!! いよう さてHSPでちょこっと作っている途中だがなんかむずい 一応これを実行して見てくれ ttp://henachoko.homeip.net/uploader/updata/20030806123051.zip あとDaJa3.0とかいうやつはwin98じゃ動くのかわかんねーし 俺はドコモじゃないから実機での動作がわからんので止めるか ってところだがどうする? Delphiで円とか線とか描画するクラスおしえてくれ。 >>70 レス送れてスマン。 やってみたけど、針の数が少ない気がする。 でもかなり(・∀・)イイ!!感じかも。作れそう? ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ ☆★☆★☆★ 新商品 ゾク・ゾク 入荷 ☆★☆★☆ ★☆ ☆★ 送料激安!! 送料激安!! 送料激安!! ★☆ http://www.get-dvd.com ☆★ 激安アダルトDVDショップ ★☆ お買い得!! 1枚500円〜 急げ! ☆★ インターネット初!「きたぐに割引」 ★☆ 北海道・東北の皆様は送料も激安! ☆★ http://www.get-dvd.com ★☆ スピード発送! ☆★ http://www.get-dvd.com ★☆ 商品が豊富! ☆★ http://www.get-dvd.com ★☆ ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ >>74 じゃあ一応画面サイズは240*240でいきます 針の数は簡単に増やせるんだが 主人公を表示するのがなぜかできねー もうちょっと勉強してみます なんか思ったよりできた・・・ ttp://henachoko.homeip.net/uploader/updata/20030806235600.zip あとは針がどこに出てくるか、速さはどうするか、 当たり判定、得点とかそのへん すごいっすよ!なんか完成しそうっすね(゜Д゜)ポカーソ あとはダメージ判定とキャラの周りの透過(黄緑の部分) ところで画像読み込むとき、ファイル形式何で読み込んでます? あれ、黄緑の部分消せないかな??gifは読み込めないの? なんかgifはできるのかわからない 一応当たり判定まで微妙だができた ttp://henachoko.homeip.net/uploader/updata/20030807135226.zip GAMEOVERの後 下を押すと再開する・・・ HSPで作ったのは携帯じゃできないよ あとやってみたけど、感覚が狭すぎてジエンが通る隙間ない。 じゃあさ、docomoで配信されてるアプリ作成ツールで作ろうよ! 配置はどんなのがいいのかわからん アプリ作成ツールってどんな感じで作るのかわからん 書き方が載ってるサイト見つけてくれれば考えるかも if key=1:x-1 if key=2:y-1 if key=4:x+1 if key=8:y+1 if key=3:x-1:y-1 if key=12:x+1:y+1 if key=9:x-1:y+1 if key=6:y-1:x+1 主人公が自在に動くのがいい、と思う >>92 一応上下左右に動けるようにしますた ttp://henachoko.homeip.net/uploader/updata/20030807164425.zip >>91 なんか難しい感じだ それで作ろうとすると時間がかなりかかること必死 配置はまだ適当 ほぼ完成 ttp://henachoko.homeip.net/uploader/updata/20030807174820.zip 今のところの仕様 動きは上下左右 当たり判定は少し大きめなので当たってねーよってことがあるかと スコアが200増えるたびにレベルが1増えスピードが上がる GAMEOVERの時に下を押すとゲーム再開・・・ 罠の配置は一定パターン あんまりよくない こんなところか・・・ なんか改善してほしいことがあったらヨロ とくに罠の配置だが左上から右下にX座標、Y座標で x=10,20,30,40,・・・ y=20,10,40,30,・・・ と書くと(10,20) (20,10) (30,40) (40,30) ・・・ の位置になる訳だが なんかいい配置考えてくれ 疲れたので長期休暇をとります 改造して他のも作ってみますた ttp://henachoko.homeip.net/uploader/updata/20030808113255.zip 操作は上下左右に動けて メガネを取ると点数が上がる ●に当たらないようによける 200点ごとにスピードが上がる かなりバグがある感じ (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン 3さんのレスが38以後ないですけど、 JDKは結局ダウンロードできたんでしょうか? >>38 >右上にあるJ2SETM v1.3.1_08 のダウンロードというのをクリックすると >全て英語になります。 まさかEnglish英語版ってリンク押してないよね? ダウンロードするときのライセンスの同意を求めるページは英文だけどね。 現在の最新はVersion 1.4.1のようですね。 下のダウンロードページのJ2SE v 1.4.1_05 のダウンロードという項目の Windows (各国語、米国語を含む)のSDKのダウンロードをクリックして http://java.sun.com/j2se/1.4.1/ja/download.html ライセンスに関する英文ページが表示されるので、そこでACCEPTボタンを クリックしてDownload j2sdk-1_4_1_05-windows-i586.exeをクリックすれば ダウンロードがはじまると思います。 インストールに関しては下のリンク先にあるインストールガイドを参考にしてみてね。 http://java.sun.com/j2se/1.4.1/ja/install.html -----再利用----- 今からここは 俺がRPG作るのを見守るスレ になりますた。 開発環境:ボーランドc++5.5コンパイラー(無料のヤツ) c++はよく分からんが、cはマッタク分からん程度のスキルです。 絵のつけ方がよく分からんのでコンソール 目標が初代ドラクエ。 #include <iostream> #include <string> #include <ctime> using namespace std; void myhelp(){ cout<<"wで上移動、dで右移動、aで左移動、xで下移動"<<endl; cout<<"sで話す、qで座標表示、fで終了"<<endl; } void myenc(){ //魔物とエンカウントさせる関数 int b; srand((unsigned)time(NULL)); b=rand()%10; //10分の1で魔物と出会う if(b==4){ //4なのは特に意味ない cout<<"魔物がいる"<<endl; } } void mygo(string myit){ cout<<myit<<"へ進んだ。"<<endl; myenc(); } int main(){ string n; //nに押したキーを代入 string myit; //四方向表示 int x,y; //xが横軸、yが縦軸の座標 x=0;y=0; //初期値(0,0) cout<<"ドラクエっぽいRPG"<<endl; myhelp(); while(1){ cin>>n; if(n=="w"){ x++; //キーを押したら、移動先の座標取得 if(x==2){ //立入禁止区域の座標を入力、複数可 //移動先が立入禁止なら行き止まり x--; //進めないはずなので、1引いて座標あわせとく cout<<"行き止まりだ。"<<endl; } else{ myit="上"; mygo(myit); } } else if(n=="d"){ y++; if(y==2){ y--; cout<<"行き止まりだ。"<<endl; } else{ myit="右"; mygo(myit); } } else if(n=="a"){ y--; if(y==-2){ y++; cout<<"行き止まりだ。"<<endl; } else{ myit="左"; mygo(myit); } } else if(n=="x"){ x--; if(x==-2){ x++; cout<<"行き止まりだ。"<<endl; } else{ myit="下"; mygo(myit); } } else if(n=="s"){ cout<<"その方向には誰もいない。"<<endl; } else if(n=="f"){ cout<<"ゲームを終わります。"<<endl; break; } else{ myhelp(); } } }; 課題はNPC作ることとAPI。本屋にAPIの本置いてないんだが・・・ うpろだ誰か教えてクレクレ 俺もドラクエ風RPG作りたいので参考にさせてください 自分も同じコンパイラでやりたいと思っています うpろだ ttp://gamdev.org/up/upload.php コピペミスとか修正バージョン ttp://gamdev.org/up/img/232.lzh APIの解説サイト行っても、CかVC++基準で書かれてていまいち理解しにくい。 とりあえず一週間をめどにコンソール卒業しようと思う >>103 マターリがんばりませう >>105 釣りじゃないです。 なぜ釣りだと思ったんですか? ドラクエタイプのRPG(Windows用/ソース付) http://www.sm.rim.or.jp/ ~shishido/rpgp.html スクロール処理とかゲームシステムなどの解説もあり。 >>107 ありがとうございます。 ざっと見てみたんですが、APIの命令語と思われるものだらけで手に負えません。 今まで作った物がマッタク使えなくなりそうな悪寒 まだビットマップを表示させるのにてこずってる段階なんで、 そのくらいのクオリティになるのはかなり先になりそうです。 >>108 >ざっと見てみたんですが、APIの命令語と思われるものだらけで手に負えません。 まあ、「ウインドウ上にグラフィックを表示する」タイプのゲームなら、 当然「APIの命令語と思われるものだらけ」になるわなw でも、APIは 使い方自体はそれほど難しくない(どこにウインドウを出して、どれだけ の大きさのビットマップを作りどこにビットマップを描画するか、とか の指定をするだけ)から、少しずつ慣れていけば大丈夫。 まず、「ウインドウをだす」だけのプログラムを作って、そのウインドウ に適当な色で点を打つ、というあたりからやってみる(これでウインドウ の出し方とそのウインドウに何かを描く方法がわかる)とよいかも。これ ができれば、あとはビットマップを作って絵を出すことも簡単にできるよ うになる。 毎回うpろだに頼るのも気が引けるので、サイトスペース借りてみた。 http://www.geocities.co.jp/SiliconValley-Bay/2736/bb1.txt やっとwindowsアプリの入り口に来れたが、ゲームとは呼べない物になってしまった。 ウィンドウプロシージャにコンソール版のキー取得イベントを詰め込んでみたんだが、 マップスクロールのことも考えると、後で書き直すことになりそう >>109 命令語(関数?)と、それに付属する引数の種類と数が多いんで、 記憶力のない漏れにはAPIは天敵です。 次はウィンドウ上にドットを表示してみます。 >>110 WinAPIはよく使う命令だけ覚えればおk。 大体どんな機能があるかを覚えといて、使いたいときは本なんかで調べる。 それを繰り返せばいつのまにか覚えてる。 >>111 だいたいの流れが理解できてきたんで、その方向で逝ってみます。 スクリプトなのにコンパイル必要なのと、謎の言語であるという点で リソース・スクリプトが理解できないんですが、これは放置でもいいのでしょうか? これが分からなくてビットマップが表示できないです・・・ >>112 リソースから読むんじゃなくて、最初はまず「自分で作ったビットマップ」 を表示する処理を書いてみた方がよいよ。 >>113 自分で作ったビットマップというのは、こういうのでしょうか?↓ http://www.geocities.co.jp/SiliconValley-Bay/2736/c.txt それとも、リソーススクリプトなしでビットマップ表示ができるということでしょうか? とりあえず上の方法で簡単なゲームから作ってみようかと思う今日この頃。 ×ビットマップ表示ができるということでしょうか? ○ペイントで描いた絵を表示できるということでしょうか? やっと絵が表示できた。 でもマップチップの並べ方が分からん。 ひたすらBitBltするしかないのだろうか・・ なんか日記みたいなのでRPG作ってる人どんどん参加してください(´・ω・`) (ツクール除く) ってことであげ >98,119 わたしはJavaスレでまったり製作ちゅう。 がんばろうね♪ >>98 ゲーム作りの解説してるサイトとか見てる? 検索すればいろいろあるから見た方が良いよ。 あといきなりRPGは厳しいので、簡単なのから作った方が良いよ。 マップチップはループさせて表示すれば。 人がキターー >>119 ,>>120 言語違うけどがんばりましょう どうでもいいけど、この板ってけっこう過疎化してますね・・ >>121 ブックはしてあるんですが、まだあまり見てないです。 directX使っているところが多いので、先にAPI解説サイトかなあ、と。 簡単なのというと、パックマンとかですかね? forを二重にしたら敷き詰まったんですが、これだと好きな場所に 好きなマップチップを置けないような気がするんです >98サン そうですねー。けっこう人少ないですよね。 でも、個人的にはまったりしてていいかな、と思います。 ちなみにわたしも今マップ関係を製作ちゅう。微妙に音楽に浮気ちゅうだけど。 Javaスレも再利用中(占拠中?)。 みんなまったりがんばりましょー! >>98 Cで作るとなると覚えることが沢山あって大変だよ… HSPとかやってみたら? Cと比べてすげー簡単だし、画像処理関係のAPI揃ってるし。 考え方ってのは一緒だから無駄にはならんよ。 >>123 あんたスゲェよ・・・ 俺もマップ製作中だけど、マップを並べるプログラムで手こずってる orz >>124 他の言語にしたほうが楽なんだろうな、ってのは薄々感づいてるんですが、 ゲームを作ること自体が目的ではないので、もうしばらくはこのまま行ってみようかと。 > forを二重にしたら敷き詰まったんですが、これだと好きな場所に > 好きなマップチップを置けないような気がするんです そりゃあforの中で同じマップチップ置く処理しかしなければそうなるさ 例えば2次元配列使ってマップデータを格納しておいて、forの中ではその情報を元にマップチップを描画するとかしないと。 HSPでやってみれば?とかいった人間だが 俺も参加させてもらう。 一応今はHSPで作ってる。 まだゲーム作ったことがないので、あんま役には立てんが お互い完成までがんばってみよう。 ちっちゃいRPG作成中…… http://henachoko.homeip.net/uploader/updata/20040219105932.zip ここにHSPだけどマップ表示のサンプルアップした。 map_sam.asがソース。 map_sam.exeが実行ファイル。 終了はウィンドウのXボタンで。 map.bmpが使ったマップチップ。 動かんかったら言って。 >>126 ちょっとやってみたんですが、まだ理解不足でコンパイル時にエラー10個くらいでますた。 今はとりあえずBitBltしまくっておいて、マップスクロール時に問題が出てきたら それでやってみます。 >>127 がんがりませう。 マップは出たんですが、動かないです。ソース見た感じだと、もとから動かない仕様でしょうか? 98もゲムを実行するには何のランタイムが必要ですか? >>128 好きな場所にマップチップが置けないってのは解決したの? >>128 ああ、マップ表示のサンプルですよ。 動かない、というかキャラクター表示はまだ。 一応マップ表示の原理をHSPで書いてみたんだけど。 >>126 の言ってることをやってます。 >>129 ランタイムいらないです。コンパイラが必要です。 まだゲームといえない段階なので、もうちょっとできたらexeでうpします。 >>130 好きな場所に置くこと自体はできたんですが、今のまま作っていくと、 マップが大きくなったときに死ねそうです。↓ http://www.geocities.co.jp/SiliconValley-Bay/2736/vvv.txt >>126 氏の方法で挫折したのが↓ エラーイパーイ http://www.geocities.co.jp/SiliconValley-Bay/2736/vvv1.txt >>131 bmpファイル一つからマップチップ4つ取り出す方法もあるんですね。 bmpファイルを4つに分けるより効率がいいんでしょうか? >>132 そりゃaryはintなんだから、HBITMAPつっこもうとすればエラー出るだろう。 この場合で言えば、ary[x][y]にはhBitmapのインデックスだけ入れるべきかと。 まあこのマップ構成ならば、 int ary[3][3] = {0, 0, 0, 0, 1, 2, 0, 0, 0}; としておいて、描画する時は SelectObject(hBuffer , hBitmap[ary[map_x][map_y]]); とするのが正しいかと。 マップデータがでかくなってきたら、データをファイルに移してそこから読み込ませるようにすればさらに一歩前進。 あとせっかく配列を使ってるんだから、読み込みとか解放でも一個ずつやらんでループ使った方がいいんでは? for(int i=0;i<3;i++) DeleteObject(hBitmap[i]); ちう感じで。 >>132 基本的には、一つの場所(街なら街、洞窟なら洞窟)のチップは全て 一つにまとめるのが普通だと思いますよ。 読み込むときに、「ファイルを探してー>読み込む」という手順を踏むわけですから、 一つにまとめておけば、一回探せば後は読み込むだけです。 >>133 ありがとうございます!できますた! >マップデータがでかくなってきたら、データをファイルに移して これはdllというのでしょうか?まだ全然やってない分野です。 >>134 さっそく真似しようとしたんですが、絵をまとめるとソースが長くなる、 ソースまとめると絵がまとめられない、という状況になってます・・ いろいろ問題が出てきてしまったけど、前半最大の山場と思われる マップスクロール実装にとりかかってみます。 >>135 >>マップデータがでかくなってきたら、データをファイルに移して >これはdllというのでしょうか?まだ全然やってない分野です。 普通にマップ構造を記述したファイルを読み込むだけだと思うんだけど、 そうしないとマップをちょっといじるだけで再コンパイルせにゃならんし。 >>136 リソースからは読み込めたんですが、デメリットしかないので、これではないですよね・・ xxx.txtから読み込めるとしたら、メリットがかなりありそうなんで、もうちょっと調べてみます。 なめらかスクロールは処理が多そうなので、まずは キーを押したら1マス(32ドット)瞬間移動プログラム↓ http://www.geocities.co.jp/SiliconValley-Bay/2736/vvv4.txt goto使ってしまった orz >xxx.txtから読み込めるとしたら、メリットがかなりありそうなんで、もうちょっと調べてみます。 fopenやfgetsを使ってファイルを操作したことないのか…? InvalidateRectしてるなら明示的にWM_PAINTにジャンプしなくても次のメッセージループでWM_PAINT呼び出してくれると思うが・・・ もしやるとしても、gotoじゃなくcase WM_KEYDOWNの下にcase WM_PAINTをおいといて、breakを書かない、という風にした方がいいんじゃないかな。 >>138 ファイル操作はゲームに関係なさそうだったので、ほとんど勉強してないです。 fopenというのを調べて出直してきます。 >>139 今、gotoなしでやってみたんですが、不正終了?みたいになりました。 >gotoじゃなくcase WM_KEYDOWNの下にcase WM_PAINTをおいといて こっちでは大丈夫でした。 caseって全部並列なものかと思ってたんですが、順番関係あるんですね >>140 goto抜いたらbreakつけなきゃダメよ(;´Д`) breakつけないと、次のcaseラベルが実行されるから、この場合だとWM_CREATEが実行されてまう。 不正終了は多分そのせいかと >ファイル操作はゲームに関係なさそう データファイルがないゲームなんてそうそうないと思うが・・・ 最低でもセーブデータとか作るためにはファイル操作は不可欠だろう >>137 >リソースからは読み込めたんですが、デメリットしかないので、これではないですよね・・ いや最終的には、画像などのデータはリソースにまとめたほうが良いよ。 ただしバイナリのリソースね。画像なら、RGBデータの形で持つ、とか。 画像については、RGB配列(DIB)の扱いを練習しておいたほうが良いかも。 キャラクタの透過描画や画面の特殊効果などさまざまな場面で必要になって くる。 >>141 あ、なんとなく理解しました。break;の代わりにreturn 0;でもいいってことですね。 >>142 作り始めた当初は、セーブが必要になるほど長いゲームは作れない気がしてたので。 いざとなったら ふっかつのじゅもん にすればファイル操作いらないな、とか思ってました。 >>143 まだシナリオとか考えてないんで、データベースの半分は手抜きです。になりそう・・ >>144 ぱっと見で難しそうだったんで、まだほとんどやってないですが、ちょっとずつやってみます。 >>145 この場合はreturn 0;でも動くけど、出来る限りbreakは書くクセをつけるべきだと思う。 一つのbmpファイルをウィンドウに複数表示はできるのですが、 複数のbmpファイルを表示させようとするとメモリ不足とか言われます マカーのくせに口出ししてごめんね。 WinのAPIはほとんど触ったことないから半分カンなんだけど。 DrawMapの話だけど、せっかく定義してるのにMaparyをつかってないんじゃない? icは4になってると思うから、添え字が範囲外なんじゃないかしら。 StretchDIBits(hdc , 32*map_x , 32*map_y , iWidth[Mapary[y][x]],(以下同) みたいにしたかったんじゃないの? というか、各BMPのサイズが同じなんだから、わざわざ画像からサイズ取得しないでも StretchDIBits(hdc , 32*map_x , 32*map_y , 32, 32, 0, 0, 32, 32, lpPixel[Mapary[y][x]](以下略) と書いちゃえばいいような気がする。 そんなカンジでがんばれ〜。 わたしは当分応援モード。 >>153 いきなりRPGは無謀スギかも。 でもがんばってるみたいだから応援するよ。 ちょっと今時間無いんで、時間出来たらマップ表示を HSPからCに書き直したものをアップするよ。 まあ、そのときには解決してるかもしれんが… >>154 >というか、各BMPのサイズが同じなんだから、わざわざ画像からサイズ取得しないでも >StretchDIBits(hdc , 32*map_x , 32*map_y , 32, 32, 0, 0, 32, 32, lpPixel[Mapary[y][x]](以下略) >と書いちゃえばいいような気がする。 あんまり定数はプログラム中には入れない方がいいと… 小規模ならマクロでも良いかもしれんが、constとかやるのがいいのでは? ここはBMPからサイズ取得が一番良いかもしれんね。 >>154 混乱してて、Mapary使うの忘れてました。 問題点を分かりやすくするために、StretchDIBitsの部分はとりあえず定数にしてみます。 >>155 javascriptで簡単なゲームは作ったことがあるんですが、C/C++でプログラム組むのは 初めてなんで、かなり無謀だとは思ってます。 マップ表示はたぶんできるんですが、その前に複数のbmpファイルを読み込むことが できないんです。 デバッガ使ってみたところ、問題点らしきところは発見できたものの、なぜだめなののかが 分からない・・・ >>156 BMPの読み込み(BMPからのDIB作成)は、マップチップなら「ビットマップ の大きさ」を決めておくと楽。そうすれば自動的にBMPに格納されている DIBピクセル列の大きさも特定できるから、ただ「ピクセル列までのオフ セットから決まったバイト数読み込む」だけの処理になるからね。 1枚のBMPからDIBを作成できるようになったら、BMPも「マップチップを縦 に並べたビットマップ」にしておけば、一枚のビットマップから連続して 読み込める(24ビットで横幅が4の倍数なら、横幅×高さ×3バイトずつ 区切って読んでいけばよい)。ただし、この場合はDIBの座標系に注意。 >>157 一週間悩んでたのに、一瞬でできますた。 http://www.geocities.co.jp/SiliconValley-Bay/2736/zz31.txt 複数ファイルが読み込めないと何かが困るような気がしてたんですが、 ドラクエのようなものなら、困ることないですね。 DIB版矢印キー押すと32ドット移動ウェイトつき http://www.geocities.co.jp/SiliconValley-Bay/2736/zz32.txt Sleep中は全ての処理が止まるのかと思っていたら、その間入力した キーを記憶しているらしく、Sleep中のキー入力が反映されてしまう。 >>159 タイマー使ってみたら? 自前でフラグ用意してtimeGetTimeではかっても良いだろうけど timeGetTime使ってみました。 http://www.geocities.co.jp/SiliconValley-Bay/2736/zz35.txt まだキーが記憶されてしまいます。 MSDN調べてみたら、 The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState. なので、GetAsyncKeyStateを使うこと自体をやめるか、いったん破棄しないといけなかったみたいです 瞬間移動完成。 http://www.geocities.co.jp/SiliconValley-Bay/2736/zz36.txt 微妙にゲームらしきものになってきた。 GetAsyncKeyStateのほうがゲームに適しているとどこかで見たけれど、 押したキーを勝手に記録してしまうため、使いこなせなかった。 次はキーを押したら16ドット移動を2回繰り返すものを作ろうと思う。 すでにDIB使ってるので、たぶん簡単にできるような気がする 自分も2月の最初くらいからAPI始めた者です。 使用言語はCで、今のところテトリスとかボンバーマンもどきを作りました。 現在ttp://www.sm.rim.or.jp/~shishido/を見ながら、 DIBを勉強中ですが、かなり苦戦してます。 >>98 さんは何で勉強しましたか?良かったら教えて下さい。 >>162 そろそろファイル入出力もかじり始めた方がいいかもね。 DIBが使えるならファイル入出力はそんなに難しくはない・・・はず。 >>163 ttp://black.sakura.ne.jp/~third/system/winapi/win.html ここと、MSDN見てます。 同じ時期に始めてもうボンバーマン作れるってすごい・・・。 >>164 DIBの前に少しかじったんですが、挫折しました。 xxx.iniというファイルを使えばいろいろできそうだけど、絶対パスで指定しなければいけない ので、使えねー!ってところで思考停止してます。 難しくてトラウマになってるんですが、ここを乗り越えないとしょぼいゲームしか作れなそうなので ちょっとずつやってみます。 >>165 昔の名残です。if(PeekMessage(&msg , NULL , 0 , 0 , PM_NOREMOVE))があってもなくても 同じだと思うので、使うときのために消していないだけです。 >>166 レスありがとうございます。 そこも前から見てたんですが、分からないのです。 でも、同じのを見て出来る方がいるという事は自分の努力が足りないって事ですね。 もう少し修行してきます。 ボンバーマンは全部マスク画像を使ってAND・ORする方法でやったのでそんなに難しくは無かったです。 では。RPG製作頑張って下さい。 >>167 俺もまだよく分かってないんですが、ちょっとずついじってれば使えるようになると思います。 汚くてよければ>>153 と>>158 にソースがあるので、よかったらドゾー 右スクロール時のみ16ドット移動を2回するプログラム http://www.geocities.co.jp/SiliconValley-Bay/2736/zz38.txt 効率が悪すぎるような気がする。こういうのをスパゲティソースというのかもしれない。 (´-`)。oO(AND ORってなんだろう) C/C++始めて一ヶ月たったので、今回はEXEでうp(28.4KB) http://www.geocities.co.jp/SiliconValley-Bay/2736/rpg_a1.zip 次はキャラ表示をしようと思う。透過処理が難しそう。 >>169 透過処理は単に「抜き色を決めてその色以外を転送する」処理をすれば よいだけ。キャラクタのDIBを1ピクセルずつ背景に転送していっても、 速度的には問題ない。 この場合は32ビットDIBだと楽だね(DWORD単位でアクセスできるから)。 >>170 AND ORでググルとグーグルにヌッコロされるのでだめです http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=AND+OR+C&lr=lang_ja >>171 肝心な部分が分かってないからなのか、実際にやろうとするとなぜかできないです。 http://www.geocities.co.jp/SiliconValley-Bay/2736/zz45.txt 1ピクセルずつ表示もやってみたんですが、俺のPCのスペックのせいか、若干遅く感じました。 ところで、俺はPCゲームはあまりやったことがないのでよく分からないんですが、 キャラが32*32ドットってどうなんでしょうか。どうも小さく感じます。 微妙にずれるものの、透過しつつキャラクタのDIBを1ピクセルずつ背景に転送は成功。↓ http://www.geocities.co.jp/SiliconValley-Bay/2736/zz46.txt なめらかにスクロールさせるためにマップをtimeGetTimeで30msごとに描画しているんですが、 この透過方法だとキャラクタ描画処理が遅いため、歩行アニメーションをつけるときに いろいろと苦労しそう。 メモリに読み込むときに透過処理をしたほうがよさそうだけど、なぜか透過しない。 上がソースで下が実行ファイル http://www.geocities.co.jp/SiliconValley-Bay/2736/zz50.txt http://www.geocities.co.jp/SiliconValley-Bay/2736/rpg_a2.zip 問題点:画面がちらつく。キー入力を微妙に記憶してしまう。 次は街を作って、マップ切り替えをしようと思う。 どんなゲームにするかとかもそろそろ考えないといけないけど、そっちは興味がないので 適当に募集中。 >画面がちらつく。 CreateDIBSectionでオフスクリーンバッファを作るんだ! ダブルバッファリングともいう。 >キー入力を 簡潔に説明するのは難しいんだが、今のキー押下処理→描画処理のやり方は ゲームのつくりk他としては完全に間違ってる。 ゲームループとか検索してみるとわかるかもしれん。 他のスレのレスからヒントをば。 http://pc2.2ch.net/test/read.cgi/gamedev/1020417733/124 >タイマ(WM_TIMER)は不安定なので普通ゲームには使わないぞ。 >↓ここの1.4.1みたいに処理すべし。 >http://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/ >>175 キー入力はできますた。かなり操作性向上 DIBSectionが難しくててこずってます。 本の通りにDIBSectionを使ってるはずなのに、エラーが出るのはなぜだろう。 >>176 コンパイル時のエラーなら、型があっていない(またはSelectObjectなどが返す値を適切にキャストしていない)とか。 エラー E2034 zz53.cpp 135: 'void *' 型は 'HBITMAP__ *' 型に変換できない(関数 __s tdcall WndProc(HWND__ *,unsigned int,unsigned int,long) ) エラー出るソース http://www.geocities.co.jp/SiliconValley-Bay/2736/zz53.txt (HBITMAP)つけてみたらコンパイルは通ったんですが、DIBSectionには何もさせていない のに、強制終了します。 本はCで書かれているんですが、自分の書いてるのがたぶんC++なので、 そのへんの問題でしょうか。 >>179 >(HBITMAP)つけてみたらコンパイルは通ったんですが、DIBSectionには何もさせていない >のに、強制終了します。 とりあえず、怪しいところをコメントアウトするなり変数の値を表示さ せるなり(デバッガがあるならブレークポイントを入れる)してどこで 落ちるのか、特定してみた方が良いね。 >本はCで書かれているんですが、自分の書いてるのがたぶんC++なので、 >そのへんの問題でしょうか。 そうだね。 CとC++では、デフォルトの型チェックが違う。 C++でSelectObjectの返すハンドルをGDIのハンドルを保持する変数に 入れたいなら、個別にGDIのハンドルの型に合わせたキャストが必要。 まあ、拡張子をcにしてCのソースとしてコンパイルしても良いかもし れんがw ところで「本」って何の本? ゲームプログラミング練習帳 という本見てます。 デバッガですが、今問題にしている部分より前の段階ですでに止まってくれるので 使い物にならない状態です。止まる部分も、CとC++の違いのせいの気がします。 Cは全然知らないんですが、見ているサイトも本もCを使ってAPIの解説をしているので、 Cで書き直すのが早いような気がしてきました・・・ >>179 原因は133行目の&lpPixel。 hBMP = CreateDIBSection(hdc , &biInfo , DIB_RGB_COLORS , (LPVOID *)(&lpPixel) , NULL , 0); ↓ hBMP = CreateDIBSection(hdc , &biInfo , DIB_RGB_COLORS , (LPVOID *)(lpPixel) , NULL , 0); おかしな指定をしたせいで、lpPixelのポインタの値が変な値に書き換わって壊れてしまっている。 HeapAllocしたときのlpPixelの値と133行目でのlpPixelの値を調べてみれば、壊れているのが分かるはず。 なぜ、上の指定の仕方ではいけないのか、とか、どうして値が壊れるのかとかは、自分で考えてみてね。 あぁ、97行目の >iOffset = *(LPDWORD)(lpBMP + 10);//iOffset ピクセルが格納されてるアドレス、ここでなぜかデバッガ止まる でとまるのは、BMPファイルが見つかってないからでしょ。多分。 ちゃんとCreateFileのエラー処理を汁! あと、 >(HBITMAP)つけてみたらコンパイルは通ったんですが、 これは、Windows的には正しい。Cだと書かなくてもコンパイルと折るけど、 C++は型違いを厳密に見るから、型変換しないといけないわけだ。 ごめn>>182 は違った。 CreateDIBSection()なんか久しぶりに使ったから忘れてたよ。 >>179 の使い方なら、 hBMP = CreateDIBSection(hdc , &biInfo , DIB_RGB_COLORS , NULL , NULL , 0); でいいんじゃない?一応うごいたよ。 ちうか、CreateDIBSectionで作ったビットマップ使って無いじゃん… あと、hdcをグローバル変数にするのはよくないと思う。 >>182 (LPVOID *)(lpPixel)でもNULLでも動きました。 CreateDIBSectionの第4引数にはポインタのポインタを指定しなければいけないのに、(LPVOID *)(&lpPixel) だとアドレスのポインタのポインタだから間違いというところまでは分かったんですが、 Cだと(LPVOID *)(&lpPixel)が正しくて、C++だと(LPVOID *)(lpPixel)が正しいということは ポインタの書き方がCとC++で違うということなんでしょうか。。 >>185 使おうとしてコンパイルエラーが出たので、まずは何もさせずにコンパイルできることを目指してました。 >hdcをグローバル変数にするのはよくない ローカル変数の呼び出し方がよく分からないので、とりあえずグローバル変数にしてあります。 分かり次第直します。 >>186 >(LPVOID *)(lpPixel) は間違い。 引数の指定の仕方としては、もとのソースの(LPVOID *)(&lpPixel)が正しい。 ただし、(LPVOID *)(&lpPixel)のままだと、CreateDIBSectioiでlpPixelが上書きされてしまうから 今度は透過処理の部分で今度は止まるよ。 CreateDIBSectionの説明をよく読んで、正しく使うべし。 >ローカル変数の呼び出し方がよく分からないので、とりあえずグローバル変数にしてあります。 まずは、そっちを勉強した方が良いよ。 ローカル変数は関数の冒頭で処理を記述する前に宣言する。 C言語の場合はね。 C++はドコでも良いことになっている。 難しくて混乱してきたのでちょっと整理 1.DIBとしてもDDBとしても操作可能なビットマップをCreateDIBSectionで作る 2.デバイスコンテキストを2つ用意する 3.デバイスコンテキストAに表示するマップより1マス分大きいマップを描画する。 4.AからデバイスコンテキストBに表示する部分だけ描画 5.Bから画面に描画 たぶんこうすればいいんだと思うんですが、4くらいで行き詰ってます。 hdcですが、仮引数とか使ってみたんですがだめでした。 >>189 DIBSectionベースで、一マス多く描いたスクロール用ビットマップから 表示用ビットマップに転送していく、というのならこんな感じでやるとか。 http://www.sm.rim.or.jp/ ~shishido/threadsc.html だめですた、とかいうなら、詳細な症状を言うか、ソースを提示すべし。 初心者はエキセントリックなソースを書くからな。 >3.デバイスコンテキストAに表示するマップより1マス分大きいマップを描画する。 そんなことはない。CreateDIBSectioniで作るのはウィンドウサイズと同じ大きさで良いよ。 というか誰だよこんな嘘おしえたの。わざわざ難しく教えて面白いのか、といいたい。 これまでウィンドウのhdcに対して行ってきた描画とまったく同じ事をCreateDIBSectioinで つくったDIB(を設定したhdc)に行えばいい。 んで、ウィンドウのhdcに対しては、かわりに↓をおおなう。 >4.AからデバイスコンテキストBに表示する部分だけ描画 この部分は、CreateDIBSectionで作ったDIBの内容をそのままウィンドウに転送するだけでいい。 ウィンドウのhdcは、BeginPaintで得られたhdcか、GetDC(hWnd)で得られたhdcだ。 なぜわざわざCreateDIBSectionで作ったDIBに描画してからウィンドウに転送するのか といえば、それはチラツキをなくすためだ。なぜちらつきが起こるかは本に書いてあった? >>190 今の状態でマルチスレッドにまで手を出すのはちょっときついです・・・ >>191 http://www.geocities.co.jp/SiliconValley-Bay/2736/zz55.txt StretchDIBitsのデバイスコンテキストをhdcにすれば描画されるんですが、1段階ふむとなぜか だめです。 >なぜちらつきが起こるか 本には、DIBSectionを使うことで効率がよくなるようなことは書いてありました。 >>192 なぜかじゃねーよ。 まじで、ローカル変数のこと勉強しろ!今すぐ。 変数スコープって分かるか? まぁ、一応答えを。 ↓をグローバル変数に。以上。 86:HDC hdcBMP; ローカル変数は一度関数から出ると無効になるんだよ! WM_CREATEでhdcBMPに設定しても、WM_PAINTの時はすでに無効になってるんだよ! ローカル変数のことがちゃんと理解できるまでstatic変数も禁止。 グローバル変数も最小限に汁!それが出来るまで先に進むべからず。 >>192 いや、マルチスレッドにしろという話じゃなく、描画の流れを参考にしたら、ということなんだがw 変数と、ついでにクラスも勉強しておきました。 >変数スコープって分かるか? :: 知らなかったけど使ってみます。 先に進むの禁止されたのでソースを見やすくした。 http://www.geocities.co.jp/SiliconValley-Bay/2736/zz70.txt スクロール中に画面が消えるのは仕様なので気にしないでください >>196 グローバル変数は「使う目的を明確にあらわした」変数名をつけるようにね。 たとえば、「lpbiInfoってどのBITMAPの情報なの?」ということが、変数名を見ただけで分かるように。 んで、前からずっと気になってたけど >while((timeGetTime()-timeSc)<SecondPerSc); このビジーループは本に載ってたやり方なの? もしそうならその本は糞と認定せざるを得ないので書名を教えて。 「ビジーループ」って単語が分からない?なら、googleとかに聞いてみてね。 今始めてマトモにソース見たんだが・・・・ 猫でもわかるプログラミングから始めることをお勧めする。 もっとコンソールいじってからにしておきなさい。 >>197 よく分からないのでたぶん使わないです。 >>198 おめでd >>199 自分で作ったSleepもどきです。 ビジーループでググったら、負荷が高くなるからやめろと書いてあったので 他のやり方を考えてみます。 >>200 コンソールだけだと何を作っていいのか分からないのと、モチベーションが続かないので winAPIと並行してやっていきます。 >>201 >自分で作ったSleepもどきです。 >ビジーループでググったら、負荷が高くなるからやめろと書いてあったので >他のやり方を考えてみます。 そか。えらい。 あとは、ちゃんとしたゲームループを作って、 ・入力→ゲームの状態(主人公のマップ上での位置とか)の更新 ・描画処理 をきっちり分ければ、ゲームの基礎は出来たも同然。 なぜ分けないといけないかというと、今のままだと、画面上に主人公とは独立して 動くNPCが出てきたときに処理できないからね。 >>201 気持ちは分かるんだけど、せめて一回くらい目を通しておくべきだと思う。 それだけで大分違うはず。 >>202 NPCの数が一定ならなんとか作れそうなんですが、 不定になるとどうやればいいのかさっぱりです。 >>200 理解したかどうかは置いといて、一通り読んでおきますた。 今のまま作っていくとグローバル変数だらけになりそうなので http://www.geocities.co.jp/SiliconValley-Bay/2736/a001.txt こんなの作ってみた。 変数名考えるのがマンドクセなんですが、何かこつとかありますか? まだちょっとちらつくのは、InvalidateRectの最後の引数がTRUEだから。 あと、無意味なクラスが気持ち悪いぜ! >>205 動くが遅いけど、逆にそれが心地よかったり。クラスが分からんから 見れないけど、遅いのはたぶん1ドットずつずらしてるからだと思う。 2ドットずつ、極端な話32ドット一変にずらしてしまうと早くなると思う。 >自分で作ったSleepもどき 自分もコンソールの時はそれで、ウィンアプリの時はちゃんとPeekMessageを 使わずGetMessage+イベント取り分でやってた。ライブラリのTimerだと精度が 悪くなるから何か工夫していたと思うけど忘れてしまった。 >変数名考えるのがマンドクセなんですが、何かこつとかありますか? 自分もよく悩みます。自分はできるだけ1単語にして、その分 コメントをしっかりつけるようにしています。ただ、グローバル変数は まず使いません。ファイル分割するようになると返ってめんどくさくなったり するので。後、以下の所も参考にどうぞ。 http://pc2.2ch.net/test/read.cgi/tech/1067171530/l50 http://pc2.2ch.net/test/read.cgi/gamedev/1024902432/l50 >>206 ちらつき撲滅できますた! >>207 ビジーループを避けるためにいろいろ工夫したら結局Sleepになってしまった orz >コメントをしっかりつけるようにしています これいいですね。真似してみます。 コマンドは無理だったので、メッセージウィンドウ表示。 http://www.geocities.co.jp/SiliconValley-Bay/2736/zz76.txt http://www.geocities.co.jp/SiliconValley-Bay/2736/rpg_a4.zip メッセージウィンドウの背景と文字色を変更したいんですが、 SetTextColorが使えないです。 こういうときはどうしたらいいんでしょうか 静止状態では、結局CPU100%使っちゃってるよ。だめじゃん。 あと、マップ表示がスクロール終わるまで帰ってこない関数って後で困るよ。 スクロールしてる最中に同時にNPCを動かしたくなったらどうするのさ? スクロール位置の更新と描画が分離されてなかったり、 GDIじゃなくDirectXつかってたりするが、 ↓見たいな感じにすればいいよ。 ttp://www.sm.rim.or.jp/~shishido/drpgs1.html ゲームプログラミング練習長持ってるんだっけ? 読んだこと無いけど、そっちのほうもこういう処理になってない? >>211 見てみました。↓draw()でSleep代わり?にこうしてるみたいなんですが、 if (GetTickCount()>dwTime+5) dwTime=GetTickCount(); else return; 前に自分で作ったのが↓ dwTime = GetTickCount(); while(GetTickCount()<dwTime+5); 上と下って何か違いあるんですか?どっちもビジーループに見えるんですが。 >そっちのほうもこういう処理になってない 本のほうではDirectX使ってないです。他の細かいところも、違う書き方してます。 ていうか>>211 のURLはゲームプログラミング練習帳の作者ジャン。 んでね、 http://www.sm.rim.or.jp/ ~shishido/src/drpgs1.txt } else draw(); // 描画処理 ここを } else { draw(); // 描画処理 sleep(1); } にすれば少なくともビジーループじゃないでしょ。 んで、>>211 で言いたかったのはビジーループのことじゃなくて、>>209 の >あと、マップ表示がスクロール終わるまで帰ってこない関数って後で困るよ。 >スクロールしてる最中に同時にNPCを動かしたくなったらどうするのさ? これのこと。 上のURL(+Sleepバージョン)と>>208 のプログラムを良く比べてみ? >>212 >if (GetTickCount()>dwTime+5) dwTime=GetTickCount(); >else return; これは、一つのif文の中で書けば if (GetTickCount() > dwTime + 5) { dwTime = GetTickCount(); ゲームの処理(draw()の中身) } という流れ。 「前回処理時間から指定時間(5ms)が過ぎていたら、現在の時間を 処理時間として記録し処理を行う」もので、処理を行わない場合には そのままメインループ(if文の外にあるメッセージポンプ)に処理が 返るから、処理がそこで停まるビジーループにはなりません(あの ソースももう5年前・・・。RPG関連の記事はそろそろ全面的に書き 直さないといけないですかねえ)。 >while(GetTickCount()<dwTime+5); だと「指定時間が過ぎるまで」どうなります? まあ、実際にRPG作ってみると「一定の周期で処理を行う関数」にゲーム の処理をすべてまとめるのは無理があるから、メインループよりはゲーム 処理用にスレッド作った方が楽になるかな、という気がしてきたんですが。 特に厄介なのは、戦闘シーンやイベントの待ち時間・・・。 最初はあち こちでPeekMessege()してたけど、これはちょっと違うかな、と。 スレッド作れば、最悪無限ループにしてもUI停まりませんからね(^^;。 もちろん、最終的なプログラムにするときにはスレッド内からの終了処理 (メインスレッドからの終了指示の監視)は必要だろうけど。 >>214 >ていうか>>211 のURLはゲームプログラミング練習帳の作者ジャン。 そうですね。あのページの内容はもうかなり古いものもあったりして 書き直さないとなあ、と思っている部分が多いんですが、あちこちに URL張られているようでちょっと焦ってます(^^;。 とりあえず、「4方向スクロールのマップ表示とキャラクタの透過描画」 あたりに関しては、もうちょいましなソース上げておくつもり。 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな 上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな >>213 ああ、分かりました! 1ドット描画するたびに関数を終了して、グローバル変数とか構造体とかで 描画回数をカウントしておいて、1マス描画し終わったらカウンタリセットする。 すると割り込み処理ができるようになる。 >>215 うお・・・著者様ですか・・・ while(GetTickCount()<dwTime+5); だと5ms経過するまで待機しかできない上に、処理が重くなってしまう。でいいでしょうか・・ >の処理をすべてまとめるのは無理があるから、メインループよりはゲーム >処理用にスレッド作った方が楽になるかな、という気がしてきたんですが。 この辺は、伝統的には所謂タスクシステムで解決してきたのかな。 スレッドだと同期が大変過ぎるしこういう用途には重すぎると思う。 まぁ、タスクシステムっていってもいろいろなやり方があるみたいだけど… シナリオスクリプトを実装する時にはスレッドにしたりもする ファイバー(コルーチン)という手もあるようだけどね 異なるプログラム方式の連携 ttp://www.jah.ne.jp/~naoyuki/Writings/VScheme6.html シナリオなんかだと、タスクシステムでコールされるタスク関数を ファイバ(マイクロスレッド、コルーチン、継続でもOK?)にしておくと 効率よく開発できるかな、とかおもったりしたけど全然試してない。 このへんは、やね本2だかに書いてあるらしいけど読んだこと無いです。 俺もスレッド使わないほうがいいと思う マルチスレッドを毛嫌いするわけじゃないが、明確な理由なしにスレッド化するのはやめたほうがいい ゲームで必要になる場面があるとすれば、SLGの思考ルーチンくらいだと思う で、ちょっとスレ違いの話題になるが、 ファイバってCreateFiber関数とか使う奴のこと? だとするとあんなの使わなくても関数ポインタ切り替えでいいじゃん、と思うんだが・・・ #少なくともゲームにおいては。なんかいい利用方法あるならスマン >だとするとあんなの使わなくても関数ポインタ切り替えでいいじゃん、と思うんだが・・・ その関数を減らすために使うんだよ。 普通はその関数の操作対象のオブジェクト(やシーンなど)の状態が変わったら 関数を切り替えるわけでしょ。ファイバを使うと、その「状態」が「関数をどこまで 実行したか」で表せるようになるから、状態ごとにいくつかに分かれてた関数を ひとつに出来る、と。 まぁ、でもこういうのは大概スクリプトで実現するような気がしないでもない。 >>224 ちょっと待て、その利点は間違ってると思うぞ ファイバ使っても関数減らすことになるとは思えない このスレなのでRPGの例で行くが、 RPGにおける「状態」ってたとえば ・マップ移動(キー入力待ち) ・マップ移動(スクロール) ・戦闘中 とかに分かれるよね ファイバを使う場合、これらの関数をCreateFiber関数で登録し、SwitchToFiberで切り替えるだけだ。 使わなくとも一旦呼び出し元ループに戻って別の状態用関数を呼び出すのと関数の数はほぼ変わらん #状態の定義が食い違ってるかも? スレ違い継続&長文スマソ >>225 もっと先の話だよ。 イベントシーンとかそのへん(応用先はそれだけじゃないよ?) スレ違いだが、シューティングの敵の動きの記述に使ったりもした。 あぁ、でもこの場合、少なくてもマップ移動はまとめられるね。 ヘンテコ擬似コードだけど、こんな感じ?(描画はメインファイバ側でやるという前提) void MapMove() { while(1) { //方向キーが押されるまで待つ while (!CheckHitCursorKey()) SwithFiber(mainFiber); MoveMap(GetKeyState());//スクロール方向を決める処理 //ここからスクロール処理 for (int i = 0; i < MAP_CHIP_SIZE; i++) { ScrollMap();//1ドット分スクロール SwitchFiber(mainFiber); } } } この場合にまとめるのが正しいかは議論ありそうだがそれはおいといて、例としてね。 >>220 別スレッドの利点は、他のスレッドと同期する必要をなるべく生じさせ ない、ゲームに関する処理を一本道の流れに分離しておくような形式に できた場合、Windowsのシステムの流れをあまり意識しないでゲームの 処理に集中できるかな、と。 実際、戦闘やスクリプトベースのイベント処理も含めてRPGのデータ処理 やバックバッファ(あとはウインドウのDCに出力するだけのDIBSection) への描画処理をすべて別スレッド内で行うシステムを作ってみたんですが、 比較的単純なシステムではプログラムも一本道の単純なものにまとめられ そうで、これはこれでよさそう。 小規模で単純なRPG/ADVでは、こういったタイプの処理もありかも。 まあ、一定時間ごとに呼び出す処理用関数で状態を管理しながら処理して いく、という形にまとめられればその方がよさそうですけどね(ただ、 ゲーム本体の処理以外の部分でたいしたことをしていなければ毎回状態を 管理しながら一定時間ごとに処理を行う、という流れはスレッドで連続的 に実行しているように書く、というのと流れとしては同じになりそう)。 私もメインループ内で一定時間ごとに状態に応じて振り分け、という設計 を考えていましたが、別スレッドで処理する実験結果を見ると意外にうま くいきそうだったんで、とりあえず別スレッドを作る方向で作っています。 ゲームの処理の流れを本格的に管理するつもりなら、フレームワークの開発 からやる方がよさそう・・・。 エェー?本当にちゃんと同期できてる?データの整合性もちゃんと保ててる? マルチCPUの場合は、同じデータをアクセスするコードが「同時に」2つ以上走ることも あるんだよ? マルチスレッドは、データの不整合性、デッドロック、抜け出せないロッキング、 優先順位の逆転などなど気をつけないといけない罠が多すぎるので、どうしても必要 なところ意外では使わないことにしてるよ。 スレッドがだめって言ってるわけじゃないけど、初心者向けでは無いよね。 「処理の流れ」を記述したいときは、大概スクリプトにするかなぁ? マイクロスレッドでもいいと思う。 >>227 んー・・・なんとなく言いたいことは分かった、ありがとう けどやっぱタスクシステムから乗り換えるほどの理由じゃないっす #スレ違いすまんがSTGの敵の動き制御部分は特に意味がなさそう #理由はたとえば同じ種別の敵が10いたら同じ関数を10回実行しなきゃいけない。 #けど同じ関数を回すわけだから結局状態データは外部に置かなきゃいけない #同じ関数を10個ファイバとして登録して再利用するにしても、 #結局被弾したとかの状況によって初期化するわけだから外部で制御しても大差なし #そもそも最近のハードだと敵の動きは外部データで持つことが多いので #違う敵でも同じ関数で処理する >>228 Windowsのシステムの流れってぶっちゃけメッセージループだよね なら別スレッドにする必要はないかと PeekMessage(およびそれに付属する処理)を1タスクとして考えればいいだけ たとえばバックバッファを作った後でPeekMessageを呼び出せばいい >>230 >けどやっぱタスクシステムから乗り換えるほどの理由じゃないっす いや、タスクシステムと併用するんだよ当然。 タスクシステムからタスク関数を呼び出すと思うけど、それをファイバにするという話。 >#同じ関数を10個ファイバとして登録して再利用するにしても、 >#結局被弾したとかの状況によって初期化するわけだから外部で制御しても大差なし まぁ、被弾とか非同期で状態が変わる部分は、別関数にせざるを得ないよね。「例外(Exception)」だし。 でも、多数の状態が(ほぼ)シーケンシャルに切り替わっていく状態なんかでは、状態ごとに関数分けたり 状態変数作ってswitchで分けたりするよりは、すっきりしたプログラムになると思う。 まぁ、もちろん、 >#そもそも最近のハードだと敵の動きは外部データで持つことが多いので なので>>224 ではスクリプトでやる場合が多いと書いたわけだけど… どっちにしろ「使いようによっては便利なときもある」って話だ。 全ての場合で使えると言ってるわけでもない。ファイバはメモリ食うしね。 マルチスレッドにする利点はタイトルバーをクリックしても処理がとまらないことかな よく分からないんですけど、マルチスレッド使えないとやばいっていうことでしょうか? 今度こそマップスクロール完成版↓ http://www.geocities.co.jp/SiliconValley-Bay/2736/zz78.txt http://www.geocities.co.jp/SiliconValley-Bay/2736/rpg_a5.zip ・静止状態にCPU100%になっていたのを修正(Sleep(1);をつけた) ・メッセージウィンドウ表示時にCPU100%になっていたのを修正(Sleep(1);をつけた) ・描画関数を2つに分割 なんか処理が重くなったような気がする・・・ んじゃ、次は、DrawMapの、「〜スクロール時描画」を「静止マップ表示」ひとつにまとめよう! これでかなりすっきりするはず。 すっきりしたかどうか分かりませんが、まとめてみました↓ http://www.geocities.co.jp/SiliconValley-Bay/2736/zz79.txt ・描画方法を少し変更 メッセージウィンドウ表示は置いといて、次はNPCを作ってみる予定 ログが消えてる(´・ω・`) NPCの移動をなめらかに描画するのが難しいんですが、 なんかいい方法とかないでしょうか・・・ srand((unsigned)time(NULL)); は、最初に一回だけね。ループには入れないで。 srandは乱数ジェネレータの初期値。 rand()関数はsrandを実行しなくても一回一回違う値を返すけど、もう一度プログラムを実行してもまた同じ値を返してきてしまう。 一回目の結果:7,2,5,6,4,1... 二回目の結果:7,2,5,6,4,1... こんなカンジで。 srandでtime(NULL)を与える理由は、プログラムを起動するごとに違う値を出力するようにするため。 一回目の結果:7,2,5,6,4,1... 二回目の結果:5,1,8,4,3,7... ってカンジで。 timeは確か秒単位だったから1秒以内ならrandが同じ結果を返すことになる。 って、コレも猫でもわかるプログラミングで説明されていたような・・・ おまじない程度の認識しかなかったので、ここが原因とは思いませんでした。 ランダムに動くようになりました。 ふと思ったんですが、WINAPIなら timeGetTime()%10; でも0~9のほぼ乱数ができるような 気がするんですが、これって邪道でしょうか。 マップエディタセーブ機能なし http://www.geocities.co.jp/SiliconValley-Bay/2736/zzz2.txt http://www.geocities.co.jp/SiliconValley-Bay/2736/map_ed_1.zip マップエディタ作る時間 > テキストでマップを作る時間 な気がしてきた。 APIのファイル操作はできれば避けたいんですが、 #include <window.h>をすると#include <fstream>できなくなるんでしょうか? >>243 マップエディタはイベント配置機能なども含めRPG開発では必須 になるけど、開発するのは本体よりも大変かもしれませんね。 まあ、開発自体が良い練習になるしマップの仕様はゲーム設計で いくらでも変わるから、時間はかかっても独自のマップエディタ を作るのも良いでしょう。 あと、バイナリファイルは、特に理由がなければAPIで扱うのが 一番楽な気がw 私も参戦してよいでしょうか。 環境はVC++6だけど、DirectX(8or9)つかうかWinAPI(SDK)だけで行くか悩み中。 SDKだけでいけそうだけど、勉強のためにDX使おうかなぁとも。 覚えたほうが後々いいですかね。。(どうでしょう?) とりあえずマップチップ表示してその上を歩き回れるようなものを作ろうと思ってるんですが。 >>244 マップエディタも奥が深いんですね・・ 作成したマップをどういう形式で保存するかっていうのも悩みどころです。 >>245 言語問わず参戦歓迎です。 マターリがんがりましょう ども。 では最初の目標として、 なんか表示してキーボードで動かせる奴を作ってうpします。 DX使うかまだ未定。訳わかんなかったらSDKでやります。 SDK -> Software Development Kit WinAPIどぅえす。 どっかのサイトでAPIのみでつくるのをSDKって言ってんの見て変な癖ついちゃいました。 それで、やっぱDirectXはこのくらいの規模の2Dもので使うにはめんどいだけで 恩恵無さそうな気がしてきたので使わないかもしれません。 (突っ込みが欲しい所であります。) 俺はDirextX使えないけど、将来的にすごいもの作ろうとしたら 避けて通れない道な気がするから、敢えて使ってみるのもいいかも 実は超最終的な目標は3Dのネットゲー作りたいんですよねぇ。 だからDXは絶対覚えないと・・・ でもCのプログラミング自体基本ができてないから とりあえず難しいDXは抜きに多少使った事があるAPIでやって、 C自体の基本的なところの習得に集中してからDXに移ろうかなぁ なんて気分になってきました。 >>252 教材が見つからなかったんで、俺は諦めたけどELっていう手も。 でもAPIの知識が必要だった気がするから、結局APIだけでやってみるのが 一番いいのかもしれません・・・ 初期化ファイル(MapDataAlpha.ini)にセーブするようにした。操作方法はソースの上のほうに書いてあります。 http://www.geocities.co.jp/SiliconValley-Bay/2736/zzz8.txt http://www.geocities.co.jp/SiliconValley-Bay/2736/map_ed_3.zip ・WM_RBUTTONDOWN時に POSITION[0][0] = ... POSITION[1][0] = ... POSITION[2][0] = ... のように記録させたいんですが、どうすればいいんでしょうか? RPG製作に興味あってこのスレきますた。 後半部を流し読みしかしてませんが、なにやらAPIやDXベースで話がすすんでるようですが それらを学習しながらはたしてモノが完成するのかなぁと思ったので。 最初は253氏が触れてるようなEL等のライブラリを使用するのがいいかと思います。 ゲームの中身の処理以外で悩むのつまんないし。 >>253 >>254 結局APIで作り始めますた。 私のほうは、あくまで技術の学習・習得が第一の目的でして、 特にゲームを完成させることに拘りはないです。 でも「作るスレじゃ」なくて「作れるようにするスレ」なので あんまり矛盾はないかなぁなんて。 現状ですが、とりあえず超適当ですがPCの画像を表示できました。(うpする価値なし) 次はテキストファイルを読み込み、それにしたがって マップチップを敷き詰めてみようと思います。 >>256 おぉそこは知りませんでした。凄く参考になります。 現状ですがテキストファイルからマップデータを読み込み、 表示することができました。 http://gamdev.org/up/img/426.zip 本当はバイナリにして暗号化したりした独自形式にしりたいんだけど よくわかんないのでとりあえず放置。 次はキーボードでキャラを移動して画面をスクロールさせてみようと思います。 しかし98さんは進歩早いですね。私も早く追いつけるようにがんばります。 2ヶ月前からやっててまだこの程度なので、かなり遅いと思われます・・ 保存形式ですけど、 XML→難しい割りにメリットなさそう バイナリ→シラネ レジストリ→怖い ってことで、消去法で初期化ファイル使ってます。 データ書き換えが簡単で、ゲームとして成り立たなくなりそうですが。 ファイル操作の辺りって結構でかい壁ですよね。(俺だけかも) いずれ絶対やらなきゃなんないし、かなり面倒くさそう。。。 今回はPCを矢印キーで操作して画面をスクロールできるようにしました。 ついでに当たり判定もつけました。 ttp://gamdev.org/up/img/439.zip 現状はまだ隣のマスへワープしてる状態なので、 つぎは滑らかに移動できるようにしたいと思います。 俺もファイル操作で何回も挫折してます。 バイナリでの保存方法教えて。エロイ人。 >ついでに当たり判定もつけました ダウソしてみたんですが、実行前の注意必読.txt読んだら 怖くて実行できなくなってしまったorz うぃっす。そのうち暇になったら俺も晒そうかな。今は忙しいが。 >>259 XMLはHTMLと同じようなマークアップ言語のことじゃないん? だから出力形式としてはテキストorバイナリになると思うんだけど。 あと、ツール関係もC言語で作るって言うのはどうかと。 ツールは他の言語で作って出力データだけ使うのが良いと思われる。 テキストで出力するのであれば、マップチップ番号をカンマで区切って出力したり すればいいんじゃない。 コレが有名なCSVファイルね。 ちょうど245の晒しているマップデータをカンマで区切ったような形式。 もちろん、出力するデータの桁が決まっていれば区切る必要はない。 バイナリはただ単に数値をそのまま出力しただけのデータ。 通常のテキストファイルは文字コードによって人間の理解できる文字になっているが、 コンピュータで扱っている数字はそのまま出力した場合、テキストファイルのように 数字を読み取ることは出来ない。 しかし、プログラムから読み込む場合は余計な数字>数値変換を行わなくて済むのと、 サイズが小さくなると言うメリットがある。 発言が前後しちまったーヨ。 出力・・・猫でもわかるミレ >>261 何があるかわかんないので、一応、免責事項を書いておいたほうがいいかなと思って。 フリーソフトに限らず書いてあるのが多いので見習いました。 多分大丈夫だと思います。多分。。。(でもやっぱり責任はもてませんw) >>262 CSVにしようと思ったんですけど、まんどくせのでとりあえずあんな感じに。 カンマとかって普通に文字列操作でくっ付けて〜.CSVでWilteFileすれば 出来上がるんですかね。そのうちやってみようと思います。 ちなみに私のほうはVC++でやってるので、 マップツールの方はダイアログベースで作るか APIでクライアントにコントロール直張りにして作るか、 普通のクライアントウィンドウ+モーダレスダイアログで作る予定。 MFCは使わない。というか使い方知らない。 「猫でもわかる」に「MFCの使い方覚えてるうちにAPIで1000個くらいアプリ作れちゃう!」 とか書いてあるので、それを信じてひとまずMFCは放置しようかな、と。 ところで↓みたいに ttp://www.nurs.or.jp/~urara/sbo/grp/sbo086.png チップをスクロールバー付きで並べて表示して、 それを選択したりするようにするのって「リストビュー」をつかうのかなぁ、、、 ↑のはどうやってやってんだろう。ここが難関。誰か教えてたもれ。 >>261 バイナリファイル保存は、CreateFile()でファイルハンドルを作って バイナリデータ(データを記録したバッファ)をWriteFile()で書き 出し、ファイルハンドルを閉じる、という流れでできます。 lpszFilePathをファイルパス、lpDataをデータの先頭アドレス、dwSize をデータのバイト数とすればこんな感じ。 HANDLE hFile = CreateFile(lpszFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hFile, lpData, dwSize, &dwWrote, NULL); CloseHandle(hFile); ファイル操作は、標準関数よりAPIの方が楽ですね。 >>264 VBとかもっとらんの? VCしかもってなくて、C言語しかやってないっていうのなら、しょうがないけど。 チップセレクトは多分スクロールバーとBMPをあわせているだけだと思う。 スクロールされたらそれに合わせてプログラム内でBMPの表示位置を変えてるんじゃない? 滑らかにスクロールするようになった。 けど、なんか無理矢理できてる感が強し。やたら重いし、 デバイスコンテキストとかこんなに何枚も作る必要あるのだろうか。。 hdc//一番表。ディスプレイ hdcMem//一枚裏。ここにいろいろ合成して最終画像を作る。 hdcMap//マップの画像ファイル読み込んでおいておく所。 hdcChr//キャラの画像ファイル読み込んでおいておく所。 hdcFld//マップデータにしたがってマップを描く所。スクロールに備えて一マスでかい。 ttp://gamdev.org/up/img/443.zip 次はNPCを勝手に歩き回らせようと思います。 次回はきつそうだからソース晒して助けを求めることになるかも。 >>266 リストビュー使ってないんですかねぇ。 でも使ってもできそうな感じです。なんとなく。 >>262 >ツール関係もC言語で作るって言うのはどうかと C++以外だとJavaScriptしか使えないです。保存できない・・・ >>265 ありがとうございます。バイナリと思われる意味不明な文字列で保存までできますた。 読み込みもたぶんできそうです。 >>267 特に重いとは思いませんでした。 つか、あと2,3日で追い抜かれそうな気がしてきたorz 適当に動くNPCを追加して、キャラの余白は透過するようにしました。 ttp://gamdev.org/up/img/447.zip 次はキャラ同士で当たり判定をつけて、 NPCの数を動的に増やしたり減らしたりできるようにしようかと思ってますが、 めんどいだけで特に得るものは無さそう。。。 でも見た目楽しそうなのでやってみようと思います。 >>つか、あと2,3日で追い抜かれそうな気がしてきたorz ふぉぉぉぉぉぉおおおお!!! >>269 左移動・上移動はいいんですが、右移動・下移動の時の画面に現れてくる部分の描画が遅いような感じです。 ・エンターキーを押すとコマンドが出るようにした。 ・マップデータはバイナリのまま読み込むようにした。 ・ソースを修正しやすいように修正した。 http://www.geocities.co.jp/SiliconValley-Bay/2736/zz101.txt http://www.geocities.co.jp/SiliconValley-Bay/2736/rpg_a10.zip 次はスクリプトを使ってNPCと話せるようにしようと思う。 今日はハマリ中でうpできそうにない・・・ >>270 試してみてもらえたようで、ありがとうございます。 起動時のままのウィンドウサイズでも変になってますか? 家でもウィンドウを広げると確かに下とか右の方の描画が変なんですが、 一応起動時のサイズが標準なので、普通だったら見えないところだから そのままでいいやと思って直してなかったんですが、 標準サイズのままでおかしくなってるとしなら直さないといけませんね・・・ ちなみにソース拝見しましたが、APIのCreateWindowでゲーム内ウィンドウを 作ってるのが新鮮ですた。こういうのって自力で原始的に作んなきゃならないと 思い込んでたので作るのを逃避してきたのですが、 APIのウィンドウを使えるならマウスドラグで位置移動とかサイズ変更とか もできそうですね。 >>245 あ、起動時のままなら問題ないです。 >APIのCreateWindowでゲーム内ウィンドウ 自力で描画っていうのもやってみたんですが、いろいろ問題があったので 子ウィンドウにしました。 ただ、子ウィンドウを使うとウィンドウが無効になったときの処理が 面倒だったりするので自力で描画したほうが楽なのかもとか思ってます。 >>272 環境によってウィンドウの出方とか違うのかと思ってましたが、 よかったです。安心しました。 >面倒だったりするので自力で描画したほうが楽なのかもとか思ってます。 そうですか。。。今の課題をクリアしたら私も色々テストしてみるとします。 段階的学習っていうの見てますが、もっと先のレベルも欲しい所ですね。 別に無くてもやらなきゃならないことは山ほど見つかりますけど、、、 キャラ同士に当たり判定をつけ、移動するとき向きを変えるようにした。 NPCをテンキーの+-キーで増減できるようにした。(お遊びで。でも予想外に辛かった。。) なぜか12,3体辺りでバグるので10体までに制限してあります。 ttp://gamdev.org/up/img/471.zip ちなみに前回のバージョンでは キャラの透過転送にGetPixel,SetPixelをつかって原始的にやっていたんですが、 キャラの数が増えるとかなり重かったので今回はTransparentBltなる関数を使うようにしました。 でも環境によっては(Win98とか)リークを起こすいわく付きの関数らしいので 実行時は自己責任でおながいします。うちは2000ですが、特に問題ないです。 >>275 XPですが、いい感じでした。 NPC増やすのって何気に難しそう・・・ >>252 オジサンはAPIで作るほうがめんどいと思いますorz... >>276 どもです。 あれをちょっと改良したらへぼいARPGみたいなのができそうかなという気が。 でもとりあえずなんかウィンドウを表示してみようかなぁ。 次に何をやるか迷い中です。 >>277 >オジサンはAPIで作るほうがめんどいと思いますorz... まじですか。通りすがりなんていわないで、 オラのためにDX習得までの段階的学習目標を50段階くらい作って下さい。 お願いします。お願いします。 ところでDirectXの画面ってAPIのコントロール類って貼れないんでしたっけ。 >>278 では、DirectXのSDKを落としてきてインストール デモをコンパイルして 三角形を回してみる。 とりあえずここまでかな。 >>279 できました!サンプルをほんのちょっと改造して矢印キーで回転するようにしました。 実行時にカーソルが砂時計なのは何ででしょう。 支障ないみたいだけど激しく気持ち悪い。 ttp://gamdev.org/up/img/480.zip 次の、、次の課題をください! それまで今までの2Dを改造してます。 >>280 それでは、頂点の数を増やしてみる あとは5種類ある頂点の種類をそれぞれ試してみる。 次にこのサンプルはSDKが供給する「ライブラリソース」をインクルードしていますが それを別フォルダにコピー(複製)して、自分用のライブラリファイルとすべし 自分用(スケルトン)フレームを作成する DirectX早くやりたい(´・ω・`) http://www.geocities.co.jp/SiliconValley-Bay/2736/zz105..txt http://www.geocities.co.jp/SiliconValley-Bay/2736/rpg_a11.zip ・NPCと話せるようにした。 ・タイトル画面をつけた ・スクリプトのメリットがよく分からないので使わなかった。 ・ソースが多くなったせいか、汚いせいか、自分でも読みにくくなってきた。 次はNPCに話しかけたらエンディング、という流れを作ろうと思う。 あとはごりごり作っていけば完成しそう >>281 さっきうpした奴に頂点一個追加して正方形を表示するのはできました。 5種類ある頂点の種類っていうのが何をさしているかちょっとわかんないのですが、 トライアングルストリップとかトライアングルファンとかの事だとしたら 試してみて違いを確認しました。 >>282 なんかウィンドウ表示が変ですた。 NPCに隣接しててもしてなくても、コマンドを実行すると 下の会話ウィンドウにもコマンド一覧があらわれるみたいです。 古いバージョンがうpされてるのかも。。。 >>283 ぁ、ほんとですね・・・タイトル画面作るのに集中してて気づきませんでした。 原因調査してみます やっとバグとれた('A`) lpszClassNameがかぶってるのが原因でした。 今までかぶってても平気だったのは何でだろう・・・ >>283 それですそれです。線分と点などもあると思います。 あるものは偶数しかNGなものもあります。 ではライブラリソースを自分用にしてください。 それを改造していきます。 >>親父PG 正直に言うであります。 意味が分からないであります! 壁| 〇 =3 | ̄|_ 開発にはVCを使ってますが、 現在のソースでは、一つのヘッダファイル(d3dx9.h)を SDKの入ってるフォルダからインクルードしてまして、 コンパイルしたら「外部依存関係」の所に他のヘッダファイルが色々追加されました。 これらを自分のプロジェクトのフォルダの方などにコピペするってことでしょうか。。。 こんなヘタレですいません。 >>287 そうです。自分用のライブラリフォルダを作ってそこに複製します。 (元の位置のものは残しておかないと、他のサンプルが動かなくなる) d3dapp.cppを覗くとフル画面モードの切り替えやウインドサイズの変更 ポーリングループの部分等があり、なかなか面白いものがありますよ。 >>親父PG できました。一応、画像です。点とか線にもなりました。 d3dapp.cpp見てみましたが、かなりムズイです。そんなレベルです。 ですが、がんばって習得するので課題を、、課題を下さい! ttp://gamdev.org/up/img/483.jpg 2DPRG、ちょっとだけ改造しました。 「+」キーを押すと適当なHPをもったNPCが発生します。 NPCに向かって「-」キーを押すとHPが減って、0になると倒せます。 けど連射が効いちゃってるので押しっぱで移動してるだけで事がすみます。 ttp://gamdev.org/up/img/484.zip 環境によって速度も一定じゃないし、ソースも描画部分とか入力部分とか バラバラなのでその辺を一旦綺麗にできたらウィンドウを描画してみようと思います。 >>290 ここのサイトを参考にしてポリゴンを貼ってみると良いですよ ttp://www.realdigital.co.jp/densi2/index.html >>とうりすがりの親父PG テクスチャ張れました。 http://gamdev.org/up/img/488.jpg もっと、、、、もっと課題をください! ShadowbaneとかWorcraftみたいなカッチョいいゲームを作りたいのであります! 課題 フレームレートを一定に保ち、フレームスキップを実装せよ とりあえずFPS測ってみました。 前の課題作ってるときから「どうも遅い」と薄々感じてたんですが、 DX9SDKに入ってるチュートリアルの三角が回るやつを改造して測ってみたら 案の定40fpsしか出てませんでした。 試しに、DX8に入ってる同じ三角が回るサンプルに同じ改造をして測ったら 400fpsとか出てる模様・・・ ビデオボードがGF2GTSだからDX9だとダメなのかなぁ。。。 8と9のサンプルで特別違う事をしてるとは思わないんですが、なんでですかね? >>293 テクスチャ貼れましたか。頑張っているようですね。 ではスプライトもついでにやっておきましょう。 DirectXのほうが簡単という私の前の意見に、そろそろ納得していただけると思います。 さてこのサンプルでは高精度タイマーユーティリティが使われています。 どこに在るか確かめ、どのように使われているかを探し出せば、自ずと遅くなっている原因もわかるかもしれません。 >>親父PG ありがとうございます。 fps抑えられてた原因がわかりました。(というか教えてもらいました) 危うくビデオボード買うところでした。スプライトも表示できました。 http://gamdev.org/up/img/498.jpg 楽なのかどうかはまだ慣れてないのではっきりと実感できないのですが、 はやく自由に使いこなせるようにがんがります。ので、ので、何か適当に課題を下さい! >>294 ふぉおおおおぉおぉぉぉぉぉぉ!!俺も仕上げるぞー! 三角形って \Samples\C++\Direct3D\Tutorials\Tut02_Vertices\Vertices.cpp ↑これですか?そのままだとコンパイルできないんですが・・・ エラー E2209 Vertices.cpp 14: インクルードファイル 'd3d9.h' をオープンできない エラー E2141 Vertices.cpp 22: 宣言の構文エラー あと6行ほど続く。 もしかしてbccだとDirectX使えないっていうオチですか? >>296 245さん お疲れさまでした。 さてここから先ですが、それは作る対象によって異なると思います。 今の状態でBGとスプライトが表示できるわけですから、最低条件である「表示」に関してはクリアできたわけです。 ではこの先何をすべきでしょう?。 純粋に表示能力を学習したいのであれば、3D表示>ピクセルシェーダー>キューブテクスチャ 他にランドスケープのライブラリを設計するなど またRPG等などスクリプトが必要なシステムであれば、そちらの設計も必要です。 「マウスクリックの場所を検地した後、どのように振舞うか」この部分を内部でインラインで処理するか、 「処理データ-(外部ファイルの読み込み等)」によってコントロールするようにするか? など また包括的なシステムというのも念頭において、全体のクラス設計も必要になります。 ということで、私が教えた?(実は何も教えていないw)事はここで一旦終了です。 DirectXの導入と実際にPGを組む事ができたという事で、当初の目的は達成できました。 おめでとう! 不詳、私もここの板でスレッドを立てていますので、おひまな時には覗いてみてください。 >>親父PG 今までありがとう! まだまだ先は長そうですががんばります。Shadowbaneみたいなゲームを作るまで! 親父PGさんもたまには私の成長っぷりを見にきてください。 これからはまたシコシコ取り組みます。 とりあえずはハイトフィールドを歩けるくらいになるまでを大きな目標にしようかなぁ。 つうことでモーション無しXファイルを読み込んでみる事にします。 >>297 私が弄ってたのはそれです。DXがんばってマスターしましょう! >>300 むしろ挫折しそうですorz >>298 4.のmakeでCommand syntax errorというのが出てmakeできません。 で、bccは諦めてVC++が無料なのでインスコしてみたんですが、 clのパスはたぶん通ったんですが、ヘッダファイルのパスが通せなくて苦戦してます・・・ ウチはVC++6使ってるんですが、 「ツール」→「オプション」→「ディレクトリタブ」内で、 「表示するディレクトリ」を「インクルードファイル」に指定し、 下のところの「新規作成」でDXSDKのIncludeディレクトリを追加。 同様に「表示するディレクトリ」を「ライブラリファイル」に指定し、 DXSDKのLibディレクトリを追加。 そしてプロジェクト毎の設定として、 「プロジェクト」→「設定」→「リンクタブ」内で、 オブジェクトライブラリモジュールのところに d3d9.lib d3dx9.lib dxerr9.lib dxguid.lib などを追加してます。 ウチと環境違ってたら私はヘタレなのでよく分んないです。スマソ。 無料版なので、dos窓でいろいろやらないとだめなんです・・・ VC++ ->DirectXどころか、coutすらまだ使えない状態(printfは使える) bcc ->三角形をコンパイルしようとすると Fatal: オプションが必要 : LD:\directx9sdk\Lib\Borland といわれる。 ここを参考にしてみた。↓ ttp://www.geocities.co.jp/Milano/8000/bcc/ >303 VCでのライブラリモジュールのリンクは #pragma comment(lib, "ライブラリ名.lib") を使うと少し楽できるかも。(正しいやり方じゃないかもしれないけど・・・・) >>303 あぁ、無料のVC++ってなんだろうと思ってたら コンパイラが無料配布されてるんですか。。。 お役に立てずに申し訳。 >>301 Visual Studio 6.0 を使う場合 インクルード ファイルの検索パス ヘッダー ファイルのパスが正しいこと、DirectX のヘッダー ファイルのディレクトリがコンパイラに最初に検索されるパスになっていることを確認すること。 インクルード パスを確認するには、[ツール] メニューの [オプション] をクリックし、[ディレクトリ] タブをクリックする。これにより、次のようなダイアログ ボックスが表示される。 ここでリストの先頭に表示されているパスが、最新の DirectX のヘッダー ファイルを置いているフォルダになっていなければならない。 このデフォルト パスは、C:\DXSDK\Include である。このパスが表示されていない場合は、それをリストに追加し、[ディレクトリ] タブ内のツールバー コントロールを使ってそのパスをリストの先頭へ移動すること。 ↓ エヂエタ|タブ|デバック|互換性|ビルド|ディレクトリ|ワークスペース||| プラットホーム 「WIN32」 ディレクトリ C:\DXSDK\Include ←これ リンカの検索パス リンカがリンク ライブラリを検索する際に使う検索パスと、その検索順を確認すること。リンクの検索パスのリストも、[ディレクトリ] タブで確認できる。 これを行うには、[ツール] メニューの [オプション] をクリックし、[ディレクトリ] タブをクリックする。ダイアログ ボックスが表示されたら、[表示するディレクトリ] ボックスの [ライブラリ ファイル] をクリックする。 これにより表示されたリストの先頭のパスが、最新の DirectX のリンク ライブラリを置いているフォルダになっていなければならない。このデフォルト パスは、C:\DXSDK\Lib である。 プロジェクトのリンク ライブラリ サンプルと一緒に提供されたプロジェクト ファイルを使う場合は、この設定を確認する必要はない。この設定値はプロジェクト ファイル内で指定されている。 新しいアプリケーションをコンパイルする場合は、[プロジェクト] メニューの [設定] をクリックする。これにより、次のようなダイアログ ボックスが表示される。 >>304 #pragma comment(lib , "libcp.lib") をつけてみたんですが、だめでした。 自分でもよく分からないんですが、環境変数いじってたらいつの間にか coutが使えるようになってました。 >>305 clとかvccとか言ったほうが分かりやすかったですね >>306 ありがとうございます。でもVisualStudioではないんです・・・ bccはDirectX8以上と相性が悪いらしいのでさっきアンインストールしてしまったんですが、 clでwindows.hが使えるようになったら再びインスコしてみます。 >307 私の環境では、インストール先のディレクトリに出来る”vcvars32.bat”と言うバッチファイルを実行しただけで、 環境変数がすべて設定されました。 >>308 やってみたんですが、 外部シンボル 'Direct3DCreate9' が未解決 というエラーが出ます。意味が分からないんですが、何がいけないんでしょうか? >>309 そうだったんですか・・・必死に自分でやってましたorz PlatformSDKも、XMLが読めないとか言われて落とせないので、 VC++(製品版)を買ったほうがいいような気もしてきました・・・ 「プロジェクトの設定」のリンクのところで、d3d9.libをリンクすればいいハズ。 あと、必要に応じてほかのLibもリンクしてやる。 関数ごとに必要なLibはドキュメントに書いてある。 >>310 BccDevの設定のことな。 これでDX9がBCCで使えるはずだが、 できたプログラムがDLLを導入した環境じゃないと動かないかも知れない。 試してないのでわからん。スマン。 >>311 コンパイルできました。 でもVertices.exeをダブルクリックしても何も起きないです。 \Samples\C++\Direct3D\Binのファイルも半分ほど開けないので、 ビデオカードのせいでしょうか? Vertices.exeはハード依存ではないハズなので、 起動しないのはどこかがおかしいのかも。 俺も初心者なのでBinのプログラムやビデオカードについては正直わからん。 >>314 別のPCでやったら三角形が表示されました。 なんでだろう 意味があるかわかんないけど、 Windowsの「スタート」メニューから「ファイル名を指定して実行」で dxdiagっていれるとDirect3dとかDrawの環境テストができますよ。 ダメだったらビデオボードのドライバを新しいのに更新してみるとか。 >>316 テストしてみたんですが、問題なしでした。 ドライバを更新したら、今まで見れなかったサンプルが見れるようになったんですが、 Vertices.exeはまだ見れないです・・ 画面の色数のようなものをいじってたら見れるようになりました。 やっとスタートラインに立てました。 教えてくれた人ありがとうございます。 おお、原因はわからんが(w、とりあえず動いてよかった。 これからもガンガレ! Xfileのロードができた。 今更ながらクラスをちょっと勉強したので、 一つのモデルを読み込み、オブジェクトとして沢山配置したり 位置とか向きを管理できるようにしてみようと思う。 ある点のRGB値を取得するときに使うGetPixelってありますよね あれのRの値のみ取得する方法ってあるんですか? あったら教えてください サンプルのソース見ててもさっぱり分からん・・・ DirectXのお勧めの本とかサイトあったら教えてください ところで気になるのですが、メモリ内に仮想的にDIBを造る方法をご存知ですか? HDC hDC = CreateCompatibleDC( NULL ); DWORD* pBitmapBits; BITMAPINFO bmi; ZeroMemory( &bmi.bmiHeader, sizeof( BITMAPINFOHEADER ) ); bmi.bmiHeader.biSize = sizeof( BITMAPINFOHEADER ); bmi.bmiHeader.biWidth = ( int )tW; bmi.bmiHeader.biHeight = ( int )-tH;//ここを-すると左上頂点のDIBができるマジお勧め bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biBitCount = 16;//1 pixcel あたりのBit数 // Create a bitmap for the font hbmBitmap = CreateDIBSection( hDC, &bmi, DIB_RGB_COLORS,( void** )&pBitmapBits, NULL, 0 ); これでメモリの中にDIBが作成されます。 先ほどからGetPixcel 関数の話が出ているので書き込みました。 画像を扱う場合は一気に転送がセオリーだと思います。 もし既出であればスレ汚しすみません >>324 ttp://www.realdigital.co.jp/densi2/ 三角形を、押したキーに応じてX,Y,Z軸について回転するところまでできました。 著作権とかよく分からないんですが、ほとんどサンプルの元の状態から変わってないんですが、 ソース公開しても大丈夫なんでしょうか? 誰が書いてもほとんど同じになるような短いコードだし、 適当に改造しときゃ大丈夫じゃないですかね。コメントけしたり。 もちろん責任はもてませんが。 別のスレでゲーム作ってるのでこのスレは卒業します。 サイトも適当につぶしておきます。 ヒロシです。俺だけジャージの色が違います。 ヒロシです。みんな俺のことをさん付けで呼びます。 俺も応募していいですか? C/C++とWINDOWS APIでRPG作りたいです。 へんじがないただのしかばねのようだ・・・ んじゃ勝手に居座らせてもらいます。 とりあえず98氏のサイトで勉強してみます。 (´-`).。oO(人来ないかなぁ…) 良かった。見てる人いたのか。 では、まだそんなレベルまで行ってないんですが質問させて下さい。 マルチスレッドはRPG製作に使いますか(使った方が良いですか)? そこの辺りはチョットしか勉強していないので… そうですか。じゃあマルチスレッドの勉強はまた今度にします。 すいません。DIBのところで質問させて下さい。 ttp://www.sm.rim.or.jp/~shishido/savebmp.html では、バッファの1ラインの長さの計算に if ((dwWidth*3) % 4==0) 〜という式を使ってますが、 ttp://www.sm.rim.or.jp/~shishido/dib24.html では、if (iWidth % 4 == 0) 〜になっています。 この違いは何でしょうか? 自己解決したら、内容を書いてくれると、後々の人のためになりますよ # というか、自分の質問に責任もって下さい! >自己解決したら、内容を書いてくれると、後々の人のためになりますよ 上はビットマップの横の長さが4の倍数か見てて 下は横一列のバイト数が4の倍数か見てるんではないかと。 間違ってますか? >というか、自分の質問に責任もって下さい! 結構悩んだので質問したんですが、その直後閃いたというか何というか…申し訳ない >上はビットマップの横の長さが4の倍数か見てて >下は横一列のバイト数が4の倍数か見てるんではないかと。 逆だった…_| ̄|○ 下はビットマップの横の長さが4の倍数か見てて 上は横一列のバイト数が4の倍数か見てるんではないかと。 です。ほんとごめんなさい。まじでごめんなさい。 >>345 >マルチスレッドはRPG製作に使いますか(使った方が良いですか)? 今、マルチスレッド(メインスレッドの他にゲーム処理用スレッドを もつ)でRPGを作っていますが、あちこちにメッセージポンプを仕込む 必要がなくなってなかなか良い感じかも。スレッド別に処理を明確に 切り分けられるのなら、マルチスレッド化する、という道もあるでしょ うね。 ただ、これまでスレッドを使ったことがないのなら、RPGを作るために わざわざスレッドを覚える、という必要はないと思いますが。 >>350-354 >この違いは何でしょうか? 深い意味はありません(^^;。 どっちでも同じなので。 >下はビットマップの横の長さが4の倍数か見てて >上は横一列のバイト数が4の倍数か見てるんではないかと。 そうですね。 ビットマップの横幅が4の倍数であるか、と24ビットDIBピクセル列 の横幅が4の倍数であるか、は結果的には同じ(n % 4が0ならば、 (n * 3) % 4も0)なので、プログラムではn % 4 == 0で判定した方 がすっきりするでしょうけど。 私も以前は「ピクセル列の横幅を4の倍数に合わせる」意味を明確 にするためにiWidth * 3という書き方をしていた面もありますが・・。 著者さん、わざわざレスありがとうございます。 サイトの方、いつも参考にさせて頂いてます。 この場を借りて感謝 今、98氏のソースを見て勉強しているのですが、「NPC実装」のプログラム ttp://www.geocities.co.jp/SiliconValley-Bay/2736/zz82.txt をコピペして実行するとプログラム終了時に Rum-Time Check Failure #3 - The variable 'lpDIB' is being used without being defined. というエラーが出てしまいます。 一方、氏の「NPC実装 のEXE 」 ttp://www.geocities.co.jp/SiliconValley-Bay/2736/rpg_a6.zip を実行しても終了時にエラーが出ません。 何故でしょうか?教えてください。 環境はWindowsXP、Visual C++ .NETです。 無料でRPGツクール作れるようになりたいんですが、どうすればよいんですか? >>361 ツクールを作るのか。 完成したら使ってあげるよ。 P2Pの適当なチャットができるようになったけど今一理解が怪しい。 現在はIME制御クラスを製作中。 標準コントロール貼り付けるのは何かダサいし。 これが完成したら、もっとクラスの理解を深めたいので 自作ウィンドウのクラスでも作ってみたいと思っているけど 今の段階ではどうやって作ればいいか全く見当もつきません。 IMEもそこそこできてきた。練習に3Dで 見下ろし視点のボンバーマンでも作ってみようかな。。。 ttp://www.geocities.co.jp/SiliconValley-Bay/2736/a2.txt をクラス化して戦闘を付けてみた 改造大歓迎 ttp://gamdev.hp.infoseek.co.jp/cgi-bin/up/No_0050zip.html >>371 だめでしたorz ttp://gamdev.hp.infoseek.co.jp/cgi-bin/up/No_0079zip.html VC++とAPIでシミュレーションゲームを作ろうと思ってるんですが、 文章やデータなどをファイルから取り出す方法が分かりません。 セーブデータなどの作り方なども載ってるサイトとかってありませんか? ふつうに関数用意されてるだろ。 C標準のつかうもよしAPIの使うもよし。 ttp://tomhsp.hp.infoseek.co.jp/cgi-bin/top/gcp/ ↑これはネ申 NEETスレの1って、実はこのスレの1だったのかもな。 いや、ただスレタイが似てるなぁと思っただけなんだがな。 しさしぶり(←なぜか変換できない)に覗いてみたら、2年以上誰も進歩なしかよw ――― そろそろ誰も見てなさそうなので再利用 ――― 開発環境 : VisualStudiam2005ExpressEdition(無料のやつ) 言語 : C++ あとWin32API、DirectX9.0 ブログでやろうかと思ったけどCSSに凝りそうで進まなさそうなのでとりあえずここで。 目標 ・2000年頃のパソコンでギリギリ動く。 ・ベクターにゲーム掲載される。 ・余裕があったらMMOも作る。 とりあえずは 1.DirectXのソースをコピーしてまるごとコンパイル 2.四角形表示 3.テクスチャを貼ってみる 4.マップを表示 具体的には、Win32APIのみでのマップ描画のように、マップチップを並べてバックバッファへ描画→ それをテクスチャとしてポリゴンに貼り付ける→ポリゴンを画面へ描画 5.アルファなんとかを駆使してマップ上に主人公を描画 6.完成! マップの他に主人公も表示する必要があるから三角形のポリゴン4つでいいのかな。 DirectXを使う意味があるのかどうかよく分からないけど、これでいけそうな気がする。 イメージとしてはドラクエ1のようなものを2Dで。 VS2005の設定に手こずったけど、四角形平面ポリゴンにテクスチャを貼るところまで成功。 ところが、作成した実行ファイルと画像ファイルをコピーして新しく作ったフォルダに詰めて、 ロダにあげるまえにテストで実行してみたところOSごと落ちた。 元のプロジェクトフォルダ内の実行フォルダでは何事もなく実行できるので、 詰めるファイルが足りないか、コピーのときに破損したんだろうけどよく分からない。 「Win32APIを利用してビットマップ画像読み込み→そのままバックバッファへ描画→ それをテクスチャとして四角形ポリゴンに貼り付ける」 をやろうとしてコンパイル通ったけど、実行するとOSごと落ちる・・・ 直接ハードウェアをいじってるらしいし、ちょっとしたミスでパソコンがぶっこわれそうな気がする。 怖いのと、再起動が面倒でトライアンドエラーができない。 >>387 >イメージとしてはドラクエ1のようなものを2Dで >DirectXを使う意味があるのかどうかよく分からないけど ないだろw まして「2000年頃のパソコンでギリギリ動く」なら素直にDIBSectionで作った方が良いんじゃ。 DIBSectionを使ったのは前作ったので、本当は3Dをやりたかったんですけど ブレンダーいじってみたら豆腐みたいなのしか作れなくて。しかも何か無駄に巨大に・・・ だから、とりあえずDirectXの使い方を覚える為に2Dをやろうかと思ってるんですが、 最初から3Dやったほうがいいですか? DIBSectionの代わりにポリゴン使ってるだけだから、このままやってても、 DirectXはたいして使えるようにならないと薄々感じてきたんですが マップチップを並べた仮想のビットマップを作成できたので、テクスチャとして指定しようとしたけれど D3DXCreateTextureFromFileの第二引数に指定するファイル名って何だろう。 (LPCSTR)HDC デバッグ時にエラー (LPCSTR)HBITMAP デバッグ時にエラー (LPCSTR)BITMAPINFO デバッグ時にエラー、そもそもLPBYTEとセットで使うようなものの気がする マップチップを並べる→名前をつけて画像を保存→テクスチャとして呼び出し ならできそうだけど、物凄く無駄な気がする。 前に悩んでたOSごと落ちるのは、ファイルがリンクされているのに存在しない場合に起こるっぽい。 デバッグモードで実行すればファイルがなくても落ちない。たぶん。 仮想ビットマップのファイル名をどうしたらいいのか、何時間か調べても分からないから3Dでやることにした。 ブレンダー細かすぎて使いこなせないから六角大王ダウンロード中・・・ 今後の予定は 1.かろうじて人間に見える仮モデル作成 2.作ったXファイルを読み込み 3.キー入力に応じてXファイルを動かす 4.マップ作成 こんな感じの予定だけど、2.まではなんとかいけそうな気がする。 でも、4.は結局2Dでのマップ作成と同じ問題が発生する気がする。 巨大なテクスチャを用意するか、テクスチャは貼らずにポリゴンに色をつけるなら何とかなりそうだけど 極端に重くなったり、見た目が酷かったりで、あまりいい方法ではなさそう。 StretchDIBitsのように、手軽にテクスチャを貼れる関数がDirectXにあればいいんだけど DirectXについてきた取り扱い説明書を見ると、なさそう 六角大王で人間作成→Xファイル化→DirectXを使ってウィンドウ上に表示 までできた。 といっても、サンプルのトラの表示プログラムのファイル名の部分だけを書き換えただけでできたのであまり進んでない。 ソース解読中だけど、未だになぜ読み込んだXファイルが回転してるのか分からない。 その部分が解明できたら、キー入力を取得してキャラクターが動かせるようになるはず。 Win32APIのキー入力取得でも十分なスピードだったように思うけど、DirectInputとかいうのは使ったほうがいいんだろうか。 できた! イケメン主人公が海を移動するゲーム。 移動は矢印キーで。 http://gamdev.org/up/img/10830.zip なんか卑猥な形になってしまったけど、頭と体のつもり・・・ あと、ソースあげようとしたけどアップローダーが.txtに対応してなくて、.zipにするの面倒なので、 添削してくれる人もしくはこれからやる人でソース見たい人などが来たら.zipであげます。 次はマップを表示させて、マップを動かしたいところだけど、2Dでさえ挫折したから厳しそう。 どうやればいいんだろう・・・ >515 名前:デフォルトの名無しさん :2006/09/02(土) 15:06:39 > なんか最近無理やり2Dゲーム作ろうとしてるボーヤが > こことかゲーム製作技術板にも一定数いるみたいだな。 > なんでそんな無駄なことしてるのか一体どんなゲーム目指してるのか一度聞いてみてぇ。 > マップチップで作りたいとかもう時代じゃねぇんだよ。 > 色んなリソース食い潰した挙句そんなショボイもん作ってどうするのかと。 > DirectXのスプライト機能なんて板ポリちゃうんかとあのクラスなにか恩恵あるのかと。 > お前、どこまで脳みそ無いのかと。 ぐぐったらこんなレスが・・・ フィールドも3Dで作るとして、ポリゴンは巨大なものが必要だろうし、マップチップ形式ではないテクスチャも やたら巨大になりそうなんだけど、そんな巨大なデータを読み込めるんだろうか。 大量の小部屋をゾーン移動で繋ぐっていう方式が現実的なんだろうけど、できれば世界中をシームレスにしたい。 今後の目標 1. 複雑なポリゴンにテクスチャを貼れるようにする 2. フィールドを作る(六角大王だと左右対称なポリゴンしか作れないから、別のソフトを使わなければいけないかも?) 3. キー移動でフィールドを探検できるようにする 4. フィールドの壁との衝突判定を実装する(やり方が今のところ想像もできない) 3Dになったので、ドラクエ1ではなくFF10を目指していくことにした。 フィールドのXファイルを作成→キー移動で探検できるようにする までできた。 でも、ポリゴンに直に色をつけているせいか、グラフィックが余りにも酷い。 衝突判定は未だに分からない。 2Dと違って、高さまで考えなきゃいけない。 (考えなくてもできるんだろうけど、見た目3Dでも実質2Dな、自由度が少ないゲームになりそう。) DirectXライブラリっていうのかな? それを使えば地面との衝突判定ができそうな気がしてきた。 平面方向の衝突判定は、もし分からなくても2Dの手法を利用すればいいので、 これで何とかゲームを作れる目処は立った。たぶん。 今後の目標 1.地面・キャラクターの2つのXファイルを読み込む 2.キャラクターのみ、地面との衝突判定をする あと、今、移動はポリゴンの座標を直にいじっているけど、これは後々困りそう。 以前2Dのゲームを作ったときに、NPCの移動が不自然になった原因はこのへんにあると思う。 Xファイルを2つ読み込んで表示させることができない。 単純に変数や関数をもう一個ずつ作ればできると思っていたのに。 とりあえず、カメラは一個でいいはず。 それでもうまく表示されないので、最初に読み込んだXファイルを表示させている部分をコメントアウトしてみたところ、 後から読み込んだXファイルがうまく表示されない。一瞬、設定した色がチラッと見えるけど形は壊れている。 Xファイル自体は壊れていないので、読み込んだときにおかしくなっているっぽい。 でも、原因は全く分からない。 また、コメントアウトしない場合。 Xファイル1とXファイル2を交互に表示させているみたいで、チラつく。 あーーーー、なんとなくわかってきたかも Xファイル2つを読み込んで表示させることができないので、 Xファイル一つをロードしてそれを二箇所に表示してみたら成功。 ここから分かったのは、ファイルが壊れているわけでもないし 読み込んだ内容がぶっ壊れているわけでもないってこと。 これで2つ以上のXファイルを表示させる目処はついた。 ただ、C++がかなり理解不足で、Xファイルの量が増えれば増えるほど ソースが膨らんでいきそうなのが・・・・ 二つのXファイルを読み込んで、画面上に描画することはできた。 でも、交互に描画されてしまって全くゲームにならない。 http://gamdev.org/up/img/10934.zip 解凍passはrpg ソース同梱。 どうも、画面が上書きされているから、バックバッファが二つあることが問題なんだと思うけど、 じゃあどこを直せばいいのかと言われると全く分からない。 ネットを探しても、このへんのサンプルは全く転がってない。 抽象的な概念から、初歩的な解説までしてくれるサイトがやっと見つかった・・・ もうちょっと読んでみて、分かりやすかったらリンクをはろうと思う。 あ、あと>>402 でアップした実行ファイルの画面を最大化すると、超高速でバックバッファが切り替わるおかげで アルファブレンドチックな画面になった。どうしても1画面に二つのXファイルを表示できなかったら、 これに当たり判定をつけて無理やりゲームと言い張るのもありかと思った。 ちょっとたてこんでてあと一週間くらいいじれなさそう。 概念はなんとなく分かってきたけど、一画面に複数のXファイルを表示させるには 具体的にどうするかっていうのがまだ見えてこない。 二つのXファイルを表示させるところまでできた。 概念としては2Dのときと変わらず、バックバッファにガンガン上書きして 最終的に画面へポン!という感じぽい。 前回まではマップのポリゴンを直に動かしていたけど、3D的にはキャラクターとカメラを動かしたほうがいいっぽいので 当たり判定をつける前にそっちをやろうと思う。 今後の目標 1.キー入力に応じてカメラを動かす 2.重力落下の計算みたいなのさせる 3.地面との当たり判定をつけ、接触したら落下を停止する 横方向の当たり判定は無視して、とりあえずこんな感じで進めていこうと思う。 ソースが管理しきれなくなってきたのでブログをそろそろ作りたいけど ブログの名前が思い浮かばなくてやる気が出ない。 UPするファイル量が膨大になりそうなんだけど、アップロードできるファイル量が多い無料サーバーってどこがいいんだろう あと、座標管理はどうしたらいいのか、誰か教えてください。何をどうしたらいいのかぜんぜんわからない。 グーグルでブログ作ったけどファイルアップロードの方法が見つからない・・・ 昔の日付で書くこともできなさそうだし微妙だったかも・・・でも眠いから終了 そうなんですか・・・ とりあえず調べた結果 グーグル、fc2、livedoor、cocolog、忍者、biglobeのblog、yahooブログ 全部.zipのアップロード無理みたい cgiを使えばブログみたいなことできそうだから、ブログじゃなくてレンタルサーバーを探してみよう・・ cgiの使い方わかんないけど・・ >>410 ブログなんか今時インスコして運用するもんじゃない。メンテ面倒になるのが落ち fc2とかのブログサービスを借りて、 zip配布用にレンタルサーバーでも借りるのが賢いやり方かと つうか鯖借りるならブロゲやる必要自体無くね? 作品公開サイトなんてzipのダウンロードと日記を兼ねた進捗報告ページくらいありゃ事足りるんだし HTMLなんざメモ帳に手打ちで充分なレベルだろ?ブログCGIにアクセスして更新すんのとさして労力も変わらんだろ そんなつまんねーことに頭悩ますより好きな作品創りに力注ごうぜ? 無料のレンタルサーバー調べてみたけど、審査が面倒だったり倉庫利用ができなかったりで微妙でした。 それで、だめもとでseesaaaでブログを借りたらヘルプには書いてなかったけど.zipが使えました。 普通のホームページ形式にしようかとも思ったんですが、検索サイトでほとんどヒットしないイメージがあるんですよ。 理由はよく分からないけど。 あと、以前大量にページを作ってたらどれがどのページが分からなくなってしまって管理ができなくなったので > 386 名前: 名前は開発中のものです。 [sage] 投稿日: 2007/12/25(火) 10:41:17 ID:JqjujtnB 一ヶ月半でまだブログだのWEBサイトだので悩んでるのかよwww 作る気ないだろwってかお前じゃ無理www うーん・・やっぱりよく分かってない。 オブジェクト一個につき一つのカメラを用意し、撮影して二次元にした後、二次元空間にZバッファ順に描画していくのか、 それとも3D空間のワールド座標にオブジェクトを全て配置した後、一つのカメラで二次元に投影するのか。 普通に考えたら後者が自然な気がするけど、今はなぜかカメラが2個ある・・・ 根本的にどこかが間違ってる気がする >>407 達成。 Shiftキーでジャンプ、カーソルキーで移動。やっとゲームっぽくなってきた。 実行ファイル http://mmodev.up.seesaa.net/image/b2e.zip ソース http://mmodev.up.seesaa.net/image/b2e.txt 今後の目標 1.横方向での当たり判定 2.ゲーム用座標設定 3.見た目をきれいに 市販のゲームではありえないくらい画面がカクカクしている。 別に荒く作った覚えはないのに意味が分からない。 座標は、2Dのときはピクセルを単位の基準としていたけど(32ピクセルで1マスとか) 今回はポリゴンとカメラをいじるときの0.0fっていうのを基準にすればいけそう。 横方向の当たり判定だけど、建物の中心の座標が分からないのでどうしたらいいのか あと、ソースをVS205で見たときはタブできちんと行の先頭が揃ってたのに、メモ帳で見るとズレてるのは何だろう・・・ あ、閃いた。 進行方向へレイを飛ばしてメッシュとの当たり判定をすればいいだけか! なんか難しく考えすぎていたかも。 >>420 まだあんまり書いてないけどここです。http://mmodev.seesaa.net/ ファイル2Gまで置けるのはいいけど、重いし広告が多くて微妙 今の移動方式だとFF10のような2.5Dなゲームにしかならなさそう。 キー入力による移動先とワールド座標が固定されているため、視点移動ができないから。 視点が変わっても↑キーを押したら画面の奥へ進んで行かせたいけど、どうしたらいいのか分からない。 FPSみたいな移動方式ならFPS・格ゲ・MMORPGなど、いろいろ流用が効く気がする。 でも、WASDで移動はいいとして視点移動のキーや動かし方がどうなっているのか、FPSをやったことがないのでよく分からない。 一般的なFPSだとWとSで前進&後退、AとDで左右へカニ歩き、視界はマウスで制御してコレが進行方向(&射撃方向)に連動って感じかな マウス使わないDOS時代のヤツとか視界と進行しないタイプ(戦車ゲーとか)なんかだとQとEに左右旋回が割り当てられてたりもするね(カニ歩きとは別に) 操作を単純にしたければWとSで前進&後退、AとDで左右旋回だけ(カニ歩きは無し)でもいいかもね キャラの移動についてはキー入力で直接座標を増減させるんじゃなくて、 キャラの進行方向をべクトルで持たせておいて、べクトルの各成分に応じてキャラの座標を増減させればいいんでない? そんでカメラを固定すればバイオハザードみたいな操作感になるし、べクトルの旋回に合わせてカメラも回り込ませれば>>421 で言ってる様な状態になるよ 加えてキャラの位置にカメラを置けばFPS風表示の出来上がり、と あとは三人称視点ならキャラは前後左右の4方向移動(別に8方向でもいいけど)で、それとは別にカメラ回転キーを割り当てるとか この場合はカメラの向きからべクトル生成してワールド座標上のキャラ位置の増減に反映させるワケね これだと場所によってカメラ回転を禁止したり制限したりしてもプレイヤーが操作に戸惑いにくいので割とオススメw あ、ごめん、ちょっと抜けた >視界と進行しないタイプ は、視界と進行方向が連動しないタイプ、ね べ、べくとる・・・ ちょっとよく分からないので調べてみます。 だめだ全然分からない。3回目くらいの壁かも とりあえずできたところまでまとめ ・構造体を使ってキャラクターとカメラの座標・進行方向をまとめる→できた ・進行方向をベクトルで表す→(0,1,0)とかで表すと思うけど、その数字の取得方法・使用方法が分からない ・キーが押されたらカメラを回転させる→ カメラ.方向.x = cos(3.14*2*30/360); カメラ.方向.y = cos(3.14*2*30/360); とやってるけど、ピクッとしかカメラが動かない。+=にすると動きが明らかにおかしいし。 たぶんこれが方向ベクトルだと思うんだけど。 キャラクターも回転させなければいけないし、とか考えてたら混乱してきた えーと、カメラ回転させるならまずカメラの方向を放り込んでおく変数を一個作んないとね 0〜255までの単精度整数とかで充分、デフォルトが0で、256で一回りね ここでは便宜上cam_rとでもしとこうか。勿論構造体ん中に組み込んじゃってもおkだけど で、このcam_rをカメラ回転キーが押されたらテキトーに増減させるワケよ そんで描画する際のカメラ位置を ( myx+5.0f*sin(6.28*cam_r/256), myy+5.0f, myz-5.0f*cos(6.28*cam_r/256) ) てな感じでカメラ方向のsinからx位置、同じくcosからz位置を求めれば良し 見る場所についても考え方は基本的におんなじ キャラを挟んでカメラのちょうど反対側になるのでプラマイ逆転させるだけ これで取り敢えずカメラは回転できるようになるハズ キヤラ移動方向の連動を考えるのはここまでできてからでも遅くないとオモ >>427 できました!ありがとうございます! ついでに向いた方向への移動と、キャラクターの回転と横の当たり判定までできました! ソース http://mmodev.up.seesaa.net/image/b2f.txt 実行ファイル http://mmodev.up.seesaa.net/image/b2f.zip Wで前進、Sで後退、A,Dで方向転換 なんかプログラミングしているというより、数学をやっているような感じ ベクトルがよく分からなくてsin、cosでプログラムを書いた。 それっぽく動いてるけどベクトルは分かってない。 今後の目標 ・NPC実装 ・当たり判定をもう少し丁寧に ・ソースが酷いことになってきたので綺麗に マウスで視点を動かす機能を忘れてた。 建物の角をかすめるように進んでから建物の中心へ方向転換すると完全に建物の内部へ侵入してしまって、 建物内部にいる場合は後退処理してるせいで、前進しているはずなのに長距離後退してしまう現象があるようなないような 市販のゲームでも壁へ向かって進むと小刻みに振動するから、この処理で基本的に間違ってないような気がするんだけど なんで3Dなのに、こんなのっぺりしてるんだろ とりあえず敵のモデリング終了。後は ・敵を配置 ・敵に攻撃できるようにする ・メッシュのアニメーション ・体力を設定する これでとりあえずゲームとしては完成する・・・のかなたぶん 何のゲームだかよく分からないけど メタセコイアの設定変えたらのっぺり解消したかも。 ネトゲのファイルを開いたりすると、Xファイルなんてカケラも見当たらないんだけど こういうデータ隠蔽技術?みたいなのはどうやってるんですか? ・単純に拡張子を偽装 単にファイルの拡張子を書き替えただけなのでメモ帳とかに放り込まれるとモロバレ .xでなくてもファイル読み込む時に拡張子までちゃんと指定してやればX形式のデータとして問題無く使えるハズ ・圧縮ファイルに詰め込んで拡張子を偽装 独自形式で圧縮してる場合もあるかも知らんけど只のzipだったりすることもあるので取り敢えずバイナリエディタでヘッダ確認すべし 自分でやるなら一旦テンポラリに展開するか直接メモリに読み込むかしてくれるライブラリをどっかから拾ってくれはいいんじょない? ・プログラムファイル内に埋め込み 画像とかならアングラ系のツールで無理矢理吸い出すヤツがあるけどX形式のデータに対応してるのってあんのかな? ゴメン具体的なやり方も知らない、つうか実はC使っとらんのよw 多分リンカでEXEファイルに埋め込むリソースをコード中で指定する方法がなんかあるんだろうと思うんだけどね ま、気になるなら自分でテキトーに調べて(ひでぇ 大体こんな感じじゃないかなぁ >プログラムファイル内に埋め込み これが簡単でそれなりに効果ありそう WIN32API使って画像ファイルをリソースに埋め込む方法でやればいいんですよね。 市販ゲームの多くは、 > ・圧縮ファイルに詰め込んで拡張子を偽装 だな。 解凍されたくないひとが多いだろうから、 独自形式だろうけど。 > ・単純に拡張子を偽装 これも昔あった、エロゲでw .ampっていうのが単なる.bmpだったときが 圧縮ファイルに詰め込むのって、解凍ソフトを作れるくらいの高度な技術が必要そうだから自分には無理かも・・・ >>436 いや、全然簡単。誰でもできるよ 圧縮ファイルっていっても、自分で使うことだけを考えればいい。 ようは、「圧縮されたファイル」を「1つにまとめる」ようにすればよいだけなんだ。 「1つのファイル」のするのは、オレオレ形式でいいんだ。 A, B, C, Dってファイルがあるとすると、 ------ファイル------- 適当な識別のための印("OREOREASSYUKU"とか)、 形式のバージョン番号(互換性のため用意"0.1.0"とか)、 ファイル数(ABCDだから、この場合4)、 Aの位置、Aのサイズ、 Bの位置、Bのサイズ、 Cの位置、Bのサイズ、 Dの位置、Dのサイズ、 Aの中身、 Bの中身、 Cの中身、 Dの中身 --------------------- って感じのファイル構造をつくればいいだけ。 ながすぎた。 >>436 への返信続き さて、「圧縮されたファイル」だけど、 これは、面倒ならライブラリの zlib でも使えばいいだけ、 上の例でいえば、「Aの中身」「Bの中身」「Cの中身」「Dの中身」を 出力するときに、zlibを通すだけでいいんだ。 どうしても暗号化したいなら、 zlibかましたのを適当にいじくる あと、極端な話、場合によっては圧縮すらしなくてもいい。 例えば、画像ファイルなら、まーPNGとか大概すでに圧縮されているだろうから、 再度の圧縮の意味はないよね。 解凍ソフトっていうとレベルが高い気がするが、 適当に「圧縮されたファイル」を「1つにまとめる」ツールをでっち上げるのと、 本体にそれの逆をやる処理を入れるだけだよ。 >>437 の構造間違っている orz > Cの位置、Bのサイズ、 Cの位置、Cのサイズ、 な。 あと、なんで、>>437 の構造でいいかっていうのは、 「Aの中身」「Bの中身」「Cの中身」「Dの中身」を 最低限、読み込み時に取り出せる構造だから。 実際にやってみるといいよ。 一回作れば、次からは使いまわせる部分だし >>437 ができて、 もっと便利にしたければ、後々拡張していけばいいんだ。 例えば、 > Aの位置、Aのサイズ、 以外に Aの位置、Aのサイズ、 Aのハッシュ(Aの中身が合っているか調べるため)、 Aの形式(圧縮されているか、圧縮されていないか、など)、 などを追加してもいいね。 「形式のバージョン番号」を> >437 に含めたのには、 上のように拡張しても、バージョンで場合分けすれば前の形式も読めるから。 でも、こういう応用はは、>>437-438 ができてからでいい、 はっきりいって別にいらない処理でもある APIを使ってXファイルのサイズを取得 ↓ テキストファイルAに書き込む。ついでにXファイルAの中身(メッシュの実体?)も同じテキストファイルにコピペする。 ↓ 同じように、テキストファイルAにXファイルBの中身もコピペする。 ↓ これをXファイルの数だけ繰り返す。 位置っていうのが分からないですが、こんな感じですか? 読み込みが難しそう アニメーションのデータ作るのが難しい。 ボーンというのを仕込まなければいけないらしいけど、素のメタセコイアではできないっぽい。 Blenderならできるみたいだけど、Xファイルもメタセコイアの.mqoも読み込めないから一から作り直しっぽいし >>441 基本はそう。 ファイルの中身のコピペの他に、各種情報を入れたヘッダーがいるわけ アーカイブ内の生データの位置がわかんないと、読み込み時に任意のほしいファイルが読み込めない。 あと、テキストファイルかどうかは全く関係がない。 基本何でもつっこむので、バイナリで考える。 ちなみに、言語のライブラリにあるであろう、ストリーム入出力などを使うと、 後の拡張(例えば圧縮をかませたり)がしやすい。 どうしても面倒なら、最初に自分でいっていたように、 zip書庫が扱えるライブラリを使うのも手。 もちろんライセンスが許す場合と、zip対応ソフトで解凍されてもいいって条件つきだが。 最近は、実は中身はzipで、解凍ソフトに放り込むと解凍できてしまうソフトのデータもある。 まあゲームでは見かけないが zlib以外はなんとなく分かってきました。 位置は[xfile1]とかをXファイルのバイナリの前に書いておいて、ゲームでXファイルを使うときは[xfile1]を文字列検索して ファイルの大きさぶんだけ読み込めばできそうな感じがします。 zlibの圧縮ですが、解凍って結構時間がかかった気がするんですが、使うたびに解凍するんですか? このスレみたいな使い方ならmaglog(vector)がいいぞ もともとそういう使い方想定してるし >>442 メタセコイアでも辺の作成で点と線を作成できるぞ。 rokdeboneでつなげてボーン作成してXファイル出力。 hgimg3で出力するとXファイルは、なぜか真っ暗になってしまうけど。 >>446 これよさそうですね。時間できたら引っ越してみます。 >>447 HGIMG3が何かよく分からないですけどRokdeBoneでアニメーションファイルたぶん作れました。 再生の方法が分からないので、本当にできているかが謎ですが。 とりあえず今までのとは別のアプリとして、暗号化?したXファイルから読み込んだデータを アニメーションさせたいけどかなり時間がかかりそう アニメーション全然分からないなぁ・・・ SDKのサンプルはなぜかコンパイル通らないし、ファイル分割されてると読めない 関数一つで手軽にXファイルからロードできるような物じゃないってところだけは分かった。 SDKには付属のXファイルビューワーがあったような。 >>445 だからテキストは関係ねえつったら何度わかるんだw 文字列検索も関係ねえ。 最終的にテキストで扱いたいなら、最後にテキストにするだけ バイナリファイルは扱ったことない? >>450 使ってみたら動き出したので、アニメーションつきXファイル自体は作成できているみたいです。 でも、ビューワーのソースがC#しかないみたいで、ビューワーの仕組みが不明・・・ 今はとりあえず某所のソースをコピペして、動くかどうか実験しようとしてます >>451 Win32APIのファイルを扱う関数を使って、バイナリで入出力をしたことはあります。 でもバイナリを直に扱うというか、バイナリの仕組みとか分かってないです。 あ、NOPが1hzぶんSleepっていうのだけ知ってます 世の中には、2つのファイルがある テキストのファイルと、バイナリのファイルだ テキスト以外はバイナリだと思ってもらってかまわん。 バイナリファイルは、 int(integer)の数字を書き込んだなら、32bitOSなら、32bit=4バイト書き込まれる。 実際にプログラムから書きこんで、バイナリエディタで見てみればわかる。 同様に、byteやfloatなども書き込んでみて、確認してみるとよい。 BMPや、PNG、JPGなどもこのように書きこまれており、バイナリファイル。 さて、上で「データの位置」と読んでいたのは、 バイナリファイルでのシーク位置のこと。 つまり、「データの位置」が128なら、128バイト目の一から読み込むということだ。 > つまり、「データの位置」が128なら、128バイト目の一から読み込むということだ。 つまり、「データの位置」が128で、「データのサイズ」が64なら 128バイト目の位置から64バイトを読み込むということだ。 ! 使ったことないですけど、cの関数を使うんですか? いろんな所のスキンメッシュのサンプルをコピペしてるけど、未だにコンパイルすら通らない・・・ コンパイル通らないって・・・w もう少しC/C++を勉強しろw やっとコンパイルが通った ソースをいじっていきたいところだけど、SDKを2006にしたらパソコンが低スペックなせいか重過ぎる なんかSDKをアップデートしたら付属サンプルのSkinnedMeshすら動かなくなった。諦めよう。 板ポリゴンに絵を張るところからやり直してみる べ・・・別にスキンメッシュが分からないからやめる訳じゃないんだからね! 低スペックでも動かなければ意味がないからやめるだけなんだからね! で、以前どこかのゲーム紹介記事で見た、板ポリゴンにテクスチャを張って3D空間上で動かすってっていうのをやってみようと思う。 1.板ポリにテクスチャを貼る 2.貼るテクスチャを切り替えてアニメーション 物理計算や3Dマップは今まで作ってきた資産が使えるから1.2.ができればすぐにゲームが作れるようになる気がする なかなか時間がとれない とりあえず調べた所までまとめ ・テクスチャ張替えによる2Dアニメーションも、テンプレートやら何やらで結構難しいっぽい ・SkinnedMeshが再生できない件はフォント関連の不具合というかハードの性能不足? なので、そのへんをとっぱらえば再生できそうな予感。 ・あと、Xファイルから読み込まずにポリゴンを作成するのは最初にやったからできるけど、 その頂点情報をまとめて移動させたりすることができない。 んで、しょうがないのでXファイルから読み込んでるけど、無駄が多い気がする。 解説サイト見ながらSkinnedMeshのフォント部分を取っぱらってみようかと思ったけど、 SDKのバージョンが違うせいか、ソースが全く変わってて全然解説になってない というか、なんでSkinnedMeshのサンプルにわざわざシェーダー?とかいうのを使ってるんだ・・・ おお・・・自力でフォントとっぱらってコンパイルして、再生成功した・・・長かった・・・ 今まで一つのファイルにソースをべた書きしたことしかないので、SkinnedMeshのように 大量のファイルに分散して書く意味が分からない。 とりあえず、余分な機能を削って自分用ライブラリっぽいものにしていこうと思うけど ファイルが複数に分散しているせいでバックアップがとれない状態なので、失敗したら後戻りができない SkinnedMeshサンプルのコードを30行くらい削減できた SkinnedMesh.cpp以外の使わない.cppを切り離したいけど、複雑に絡み合っててどうしたらいいのか分からない タイムリミットが来たのでいったん終了 時間ができたら再開 マチクタビレタ〜 ☆ チンチン〃 Λ_Λ / ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < 再開マダー? マチクタビレタ〜 \_/⊂ ⊂_ ) \____ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | マチクタビレタ〜 休止している間に時代がDirectX11になっている件について どうせ覚えるのに時間かかるから、再開するならDirectX11にしようと思うけど、 G33オンボードでDirectX11が動くのかかなり怪しい これはアメリカのゲームです。1度やってみてください。 これは、たった3分でできるゲームです。試してみてください。 驚く結果をご覧いただけます。 このゲームを考えた本人は、メールを読んでからたった10分で願い事が かなったそうです。このゲームは、おもしろく、かつ、あっと驚く結果を 貴方にもたらすでしょう。 約束してください。絶対に先を読まず、1行ずつ進む事。 たった3分ですから、ためす価値ありです。 まず、ペンと、紙をご用意下さい。 先を読むと、願い事が叶わなくなります。 @まず、1番から、11番まで、縦に数字を書いてください。 A1番と2番の横に好きな3〜7の数字をそれぞれお書き下さい。 B3番と7番の横に知っている人の名前をお書き下さい。(必ず、興味の ある性別名前を書く事。男なら女の人、女なら男の人、ゲイなら同姓の名 前をかく) 必ず、1行ずつ進んでください。先を読むと、なにもかもなくなります。 C4,5,6番の横それぞれに、自分の知っている人の名前をお書き下さ い。これは、家族の人でも知り合いや、友人、誰でも結構です。 まだ、先を見てはいけませんよ!! D8、9、10、11番の横に、歌のタイトルをお書き下さい。 E最後にお願い事をして下さい。さて、ゲームの解説です。 1)このゲームの事を、2番に書いた数字の人に伝えて下さい。 2)3番に書いた人は貴方の愛する人です。 3)7番に書いた人は、好きだけれど叶わぬ恋の相手です。 4)4番に書いた人は、貴方がとても大切に思う人です。 5)5番に書いた人は、貴方の事をとても良く理解してくれる相手です。 6)6番に書いた人は、貴方に幸運をもたらしてくれる人です。 7)8番に書いた歌は、3番に書いた人を表す歌。 8)9番に書いた歌は、7番に書いた人を表す歌。 9)10番に書いた歌は、貴方の心の中を表す歌。 10)そして、11番に書いた歌は、貴方の人生を表す歌です。 この書き込みを読んでから、1時間以内に10個の掲示板にこの書き込みをコピーして貼って下さい。 そうすれば、あなたの願い事は叶うでしょう。もし、貼らなければ、願い事を逆のことが起こるでしょう。とても奇妙ですが当たってませんか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.4.7 2024/03/31 Walang Kapalit ★ | Donguri System Team 5ちゃんねる