ゲームプログラマなら誰もが通る、もしくは、通った道。青春の香り?
それは「シューティングゲーム製作」・・・。
このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談
失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。
もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを
晒してみたり、プロジェクトをはじめてみるなどもOK!
ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の
スレでやってくれ。
過去スレ,関連スレは
>>2-3 で。
>作れる奴ならpixiv使って捜してみるといいんでないか? >気に入った絵師に要旨説明してみて気が向いたのなら描いて貰えばいいさ 垢停止喰らう可能性あるぞ 絵描きじゃない奴が、絵描きに絵の依頼しまくったせいで(便利屋か何かと勘違い) 運営が警告だしてる&そういうのが来たら報告してくれってコメント出してる
何処の誤爆だw
今分かった。前スレ
>>991 への返答か。
> 991 名前:名前は開発中のものです。 :2008/11/26(水) 12:32:24 ID:eQ2qyl1s
> 立ち絵とかドット絵とかメカ絵とかロゴとか
> 作れる奴ならpixiv使って捜してみるといいんでないか?
> 気に入った絵師に要旨説明してみて気が向いたのなら描いて貰えばいいさ
>
>
>
> だが俺はせっかくだからこの自作絵を選ぶぜ!
>
オレはドット絵とプログラムはできるけど音楽スキルが0だぜ ドット絵手法の半分は単なる技術だから プログラム覚えられる人なら方法さえわかればある程度さまになるよ それ以上はやっぱりセンスが必要になるんだけど素人目には大差なかったりするし まあそもそも絵が描けるなら縮小で十分 ほとんどの人はドット絵じゃなくても小さくてそれなりに動く絵であれば満足しちゃう 東方のドット絵(笑)とか、CAVEのプリレンダをドット絵という人もいるし
ドットとはいえ絵の手法の半分を技術と言えるなら 音楽制作も半分くらいは技術な気がする
キーボードとマウスだけじゃ音楽作るのきついかな…
無理って事はないだろー… …ないよな?出来るよな!? 折角サウンドブラスター詰んでるのに更に音源買ってくるとか無駄過ぎる
俺はマウスとキーボード(音の出ない方)だけで音楽作ってるよ。midi -> mp3/ogg みたいな感じで うまいかどうかは別にして。 それでゲーム作ってるかどうかも別にして。
PCのキーボードだけでも音楽作れるよ
じゃあどんなソフトウェア使ってる? 出来ればフリーで済ませたいんだが、他に選択肢がないならシェアも考える。
ピスコラ
俺は「Rosegarden」でMIDIデータ作って、 「Timidity」でMIDIをwavに変換して、 「Audacity」でボリューム調整(リミッタかけたり)して、 「Lame」でMP3に変換してる
DTM全然わかんないんだけど、ゲームのBGMつってもWindows標準の音源じゃ厳しいよね? 音源は買ってきたりすんの?
VSTiとかはよくわからないけれど、 Timidity(ソフトウェアシンセ)の場合、フリーのサウンドフォントとかGUSパッチと呼ばれる音源データを組み込んで 自分好みの音源を作るね
DS-10とかで作ってみるのも面白いかもなあ
TSS Clipboard Player、サクラ、DS-10あたりは割と好み 慣れは必要だが、やってれば自然と慣れる、ともいえる 自分にあったのを見つけるのがいいね
フリーの音源でYAHAMA S-YXG50とかあって、Windows標準音源よりはましな感じ。
MODで。
ゲーム会社にシューティングのソース送ったが見事に落ちた 会社はいったいどこを見て判断してるんだ?
>24 市場と、会社の経営状況?
人間性
>>26 書類選考だけで
履歴書、職務経歴書、ゲームのサンプルなんだが
>>27 普通に考えれば、必要とされてるレベルのサンプルじゃなかったか
求めているゲームの方向性とは違ったんだろう。
他に考えられるのは、ソースが汚かったりとか、志望動機が曖昧だったとか
あとは、今時はあまり無いだろうが学歴とか・・・まぁ、色々考えられるわな。
サンプルが2DSTGなら落とされても仕方ないと思うが・・・
いまいち話が見えん私怨か?何がいいたいかわからん
2DSTGなめんなよー
日本語できないプログラマは困るぞ
その記事書いた人のプロフィールみたら学生って書いてるけど? 落ちた理由は君もひどいからだろ あとサンプルは3Dのほうがいいぞ
知り合いはそのサイトのサンプルよりひどいレベルの2DSTGでゲーム会社受かってたな。 要は人間性とか、コードが読みやすいかとか細かい点じゃねーの?
>>34 少なくともお前みたいなやつと一緒に仕事するのはイヤだわ
そう思われたんじゃね
困ったことに運もあるだろうし
やってるだけマシだわ。 やる気有ります、でもやったことありません なんて言うヤツに会うたびにニコニコ対応だよ。 自分達の客にはなるかも知れないから。 でも一瞬、目に殺気が出るのは仕方ないよな。
>>34 のサイトの具体的に何がひどいのか俺に教えてくれ…。
タスクシステムはさっぱりわからん。
ゲームなんか送って来てもソースコードなんか見てない件
ゲーム見て興味があったらソースを見る感じ。
3Dできない俺はどうすればいいんだ? 次の世代のごにょごにょをしろとでも言うのか? いやあああああああああああああああああああああああああ 妊娠しちゃうぅぅぅぅぅぅぅっぅぅぅぅぅl
2Dのゲーム作ればいいじゃないか
文字キャラゲーでいいじゃないか
3Dでイケないは錯覚だな。それは「やらない」の積み重ねで「イケなくなる」だけ。リハビリすれば治る ゲー専新卒の子だって無理やり調教して近代化改修&魔改造しまくればCG Worldの倉●●●女史の 連載記事を見せるだけで反射的に劣情を催す程度のサンディーソルジャーに生まれ変わる
チュートリアルかサンプルがあればいいんだけどなぁ 前はあったみたいだが最近は探してもない
60フレームってどうやって維持してるんですかね?
DirectX使ってれば、PresentParameterを適切に設定すれば勝手に。 使ってない場合は、適当にスレッドをスリープさせる関数で規定の時間がたつまで待つ。 保持しておいた手前の時刻と、現在の時刻の差がが1/60≒0.01667=ONE_FRAME秒以上になるまで↑を行う。 MainProcess() { // さまざまな処理。 while(ONE_FRAME <= currentTick - previousTick) { スレッドを一定時間休ませる関数を呼び出す。 } previousTick = currentTick; }
>>49 う〜ん、それでやってるんですけど
64フレームになるんですよね
16msでループさせて62.5fpsになるなら分かるが、 なんで64fpsになるんだよw
リフレッシュレートが、、、って72とか75は見るけど60台の半端なのはあまり見ないな
マルチコアCPUだとウェイト上手くいかないこと無い?
ならんな。 環境変えて試してみては。
どこ見れば良いの? とりあえず64/60とかなってるから64fpsなんかな CPUを強制シングルコア駆動にしてみてよ
>>56 だね 64/60 で 60フレーム設定 現在64フレームだね
シングルコアtって何よ?
Pen3 1.4G Win2k でも64/60だったわ
>>54 これ、ウィンドウのサイズで最前面に表示してないか?
その辺から直したほうが良いと思われ。
てゆうか話それてるね 60フレームを維持する方法を尋ねてるんだけど
exeで分かるかよ ソース出して
まさか常に15msスリープさせてるとかw
YanesdkのFpsTimerクラスが参考になるんじゃないかと。 まああの下品なソースを読むのは若干骨が折れるが…。 それ以前の話のような気もしないでもないけど。
表示されるFPSってどうやって算出してる? 場合によっては、そこの誤差もありうる。
統括すると 「話にならん。出直せ」 ってレベルかね
そだね 総合的にレスすると 「おまえはできるのか?出直せ」 口だけ野郎 ってレベルだね ここ
該当部分のソースを出せば良いだけなのにな。 見られるのが恥ずかしい系なのかね。 よほどのことがない限り他人のソースなんて頼んだって見てもらえないわけで、 ソース晒して問題指摘して貰えるなんてむしろありがたいことだと思うんだが…。
>>67 馬鹿に構ってねぇでさっさとソース晒せボケ
答えようがねーだろが
死ね
>67が本人の弁かどうかは知らんが、 54は何が問題かすらよくわかってない初心者っぽいんでいくつか書いてやるか。 ・リソースいらん ・てかゲームパートいらん ・DirectXもいらん。てかまともに制御できてねーなら無理スンナ。 ・WaitForSingleObject"Ex"の意味分かって使ってんのか? タイマーでウェイトするだけならGDIでやっとけ。 そんで100行くらいでFPS計測表示するだけのコード書いて晒せ。 これ書き上げる間に自分で問題点みつける可能性もある。
核心つかれると逆ギレですね わかります
>>70 >・リソースいらん
リソースの意味わかってるの?意味不明
>・てかゲームパートいらん
ゲームパートって何?意味不明
>・DirectXもいらん。てかまともに制御できてねーなら無理スンナ。
フレームレートの話してるだけ
誰もDirectXだとは言ってない 意味不明
>・WaitForSingleObject"Ex"の意味分かって使ってんのか?
MSDN読めないの?理解不能
あんた自身が理解不能
消えてくれ
分かりました!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! がんばります!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
単細胞は楽でいいねぇ
ゲ板は今日もまったり
よっぽど痛いところを突かれたんだな。
一人で大暴れ、か
マジキチ
ジュワゲットしてきたYO! lsメンに何気なしに「ジュワが欲しくなってきた」ってかるーく言ったら「よし、じゃあ行こうwww」ってノリで、最初赤二人で海蛇に出陣。 現地で仲良くなった赤さんをls勧誘し、お互いに一度ジュワに乙されてから、「ガチロで組みましょうwww」って協定。 赤3でグラバイ3枚のスリップマラソンやるも、いいところで雑魚湧いてアボン。その後外人に/grinされて大笑いされたあとに優雅にとられて終わったw 抽選時間を記録し、一度ログアウトで昼寝してから夜、エイン前に今度はlsにも早朝と違って人がいて、みんなでわらわら集まってくれて6人で張り込み。 エインいかなきゃまずい、限界時間だしとりあえず諦めるかーってなった瞬間に「【見つけました!】戻ってこいバカども!!」( ゚∀)キタ!!( ゚∀゚ )キタ━━━ 最初、強化ろくにしないで釣っちゃって前衛さん蝉がはがれまくりがあぶなかったけどなんとか持ち直してそのあとは安定して削り。 無事、念願のジュワをゲット!!
何がどうなっているのかわからない
81 :
名前は開発中のものです。 :2008/12/06(土) 15:10:06 ID:Yy/w7j5Z
>>79 意味はわからんがFF11やってる事だけはわかった
ソースを出したくないよっぽどの理由があるんだろう FPSの制御なんかググればいっぱい出るだろうからそっちを参考にしては?
1000/60=16.6666666666 で 小数点切り捨てられ16msウェイトになり 16x60=960 にならんかね?
いいからソース出せ障害者
こんな基地外の相手をしてやるなんて、みんな優しいなあ
もてあそばれとるだけ。 放置しとけ。 ・64fpsになるのはタイトル画面だけだ。 ・最前面は直せ。
.,☆、 .R-‐i'''''''''''i''''‐Я ○@○ @ .入'''''''○ .|\__| \ / ◇V.. .| .|_, ─';;;;;;;;;;;;;;;;;;'─..../_ /;;;O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`ヽ. /;;;;;;;o;;;;;;;;/;;;;;;;;;;;;;;;;;;;;;;;;;;;,;;;;;;;i メタルクイーンカワイソス… |;;;;;;;;;;;;;;;;;;;;;;;;;●;;;;(__人_);;●;;;;| !;;;;;;;;;;;;;;;;///;;;;;;;;;;;;;;;;;;;;;;;;///;;ノ 丶. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ノ ``'''‐‐--------‐‐'''~
ソース晒せ蛆虫
ほれソース。 while(true) { //目標処理時間の取得 long limit = System.currentTimeMillis() + 16; (処理) //目標時間より処理した時間を差っぴく long wait = limit - System.currentTimeMillis(); if (wait > 0) Thread.sleep(wait);//待つ }
うーん、特に問題は無いように見える
そりゃそうだ。問題のあるソースじゃなくて俺の使ってるソースだもん。
俺は1秒単位で作ってる
>>89 みたいなのだとFPSを上げれば上げるほど誤差がでるから
if( (1〜1000の経過ミリ秒) < (この1秒間での更新回数)*1000/60) )
wait(( この1秒間での更新回数)*1000/60) - (1〜1000の経過ミリ秒) );
みたいな
>>89 それは少し問題がある。
Windowsでは一番下のifからループの最初に戻るまでに時間がかかる可能性がある。
また、Sleepは指定した時間で戻る保証がない。遅れる可能性がある。
基本的にループ内で時間を取得するのは1ヶ所にしないとダメ。
解決したな
ってかWindows環境なら何も考えずにDirectX使っとけばよくね??
directX使うと何が良いのか分からんが、 少なからずリアルタイムループ制御の技術は身につけて置いて損は無いだろう。 ……本当にリアルタイムなのかどうかはさておき
素人の俺にDirectX以外を使う理由を教えテレ
>>97 素人プレイヤーにDirectXなどという得体のしれないランタイムを
長時間かけてインストールさせる作業を強制できるだろうか
いまどき何言ってんだ
なんつーかFlashもAdobe Readerもインスコすんのめんどくさいと感じるようになった あと定期的にバグ修正版が出るWEBブラウザを更新するのもめんどい
Windows 7はCPU上でDirectX 10を実行可能 とあるので、そのうち DirectX が Windows 自体にインストール済みになる 時代が来るので、初心者は気にしなくていい時代がくる と予測
てか、Windows98 には DirectX5が自動で入ってるので 3Dゲーでもしない限り気にしなくていい気がスルー
>>101 不景気で大量に失業者が増えるので、Windows7搭載PCを買えない人が続出して、
思ったほど普及しないと予測
>>102 Windows98でネットなんかつなぐなと言いたい
Microsoftのサポート切れるわ、Javaのサポート外だわ、ウィルスバスターのサポート外だわ
良いこと無い
>>103 てことはLinuxの出番ですか?
まぁサポート料でウハウハなんですが
もうwin98でなんかテストもしないなw
>>98 どっちにしろPCゲームプレイしたいなら
いつかはDirectXインストールしなきゃならんだろ
>>104 macも忘れないであげてください
>>106 そんときゃもう素人プレイヤーじゃないだろうからいいや
東方とかこんだけ流行ってんだしDirectX前提で良いじゃないw
最近、東方と聞くとくりからの絵しか浮かびません
うーん、やっぱWindows環境ならDirectXはインストールしてあたりまえの時代なのかね。
少なくとも俺はそう思ってる。
むしろ俺はいかにしてMDXをインストールしてもらうかに悩んでいる。
>>113 動作要件に書いとくしか無いんじゃね。
*nix系のソフトのインストールマニュアルを見ても、
「○○が既にインストールされている必要があります」みたいなのがずらりと並んでたりするしなあ
115 :
名前は開発中のものです。 :2008/12/08(月) 20:59:19 ID:9DrHGdXM
Winで作っているゲームでDirectXを使わない意味がわからん しょぼゲーしか作れないじゃん
>>115 それもそうだね
GDI自作するよりもDirectX使った方が早いし、
MSお墨付きだし
Macは・・・すまん
Javaが盛り上がってきたら作成されるかもしれん
もうmacの事は忘れてやれよ
118 :
名前は開発中のものです。 :2008/12/08(月) 23:14:36 ID:9DrHGdXM
Macなんてどうでもいいだろ あんなの情報弱者が買うハードだ
妬まれ慣れしたリア充のマカーとして一言言わせてもらえば ゲームが好きでマカーやってる人間は用途に応じてハード買い揃える程度の可処分所得があるので 心配してもらわなくても結構ですの。BIOSHOCKとDEADSPACEのためにゲーマー仕様のノートPCくらい持ってますの コールドスリープから目覚めたてのID:xkZWgcaEは速やかに永眠モードに戻るか速やかに社会復帰に努めなさい。 まずはOpengGL&GLSL&各GPUベンダーの拡張命令セットを使えるようになれ。話はそれからだ
別にMac嫌いじゃないけどわざわざMac用に作っても 苦労の割に需要が見込めんだろう
MAC持ってるならSDLでサクっと作ればいいと思うよ
>>119 SDLいいよ、SDL。Windows/Mac/*nix対応だし。
123 :
名前は開発中のものです。 :2008/12/08(月) 23:51:47 ID:9DrHGdXM
>>119 ちっとも慣れてないじゃんww
妬んでるんじゃなくて、哀れんでるんだよ
あぁ。マッキントッシュのイメージ戦略に載っちゃったんだね・・・・と。
まじで今のマックは欠片も羨ましくない
昔のフォトショップとかイラストレーターがWinよりも先に出てた時ならまだしも
そういう選民思想みたいなの振りかざして、上から見るのは寒いから辞めた方がいいよ?
Mac(ノート)所有者は増えてるぞ。 Unixユーザ(というか開発者)が買ってるからw
まあ、ゲーマーがファミコンやプレステを買う感覚でWindows/DirectX環境を揃えてくれるなら、 それに準拠した製品を作るのが商売としては賢い戦略だろうな。 Flashとかはまた別物かな。
>>113 落ち着け、普通ならDirectx画はいってる環境なら勝手に入ってる。
別途入れるソフトが必要なのはXNAだ
>>126 俺の知識が古いのかもしれんが、MDXは標準インストールではなかったはず。
>>97 たしか窓の世界ではサポート期限が切れたWinMeとWin2kでさえDirectX7相当(だっけ?)標準搭載。
WinXPならDirectX8辺りを標準搭載。
2008年末現在、どんなウンコ窓PCのオンボGPUでも固定機能パイプラインくらい搭載してる。
今更CreateDIBSectionとか(旧WinGに相当する関数群?)に固執するメリットは絶無だろ
あるいは何らかの特殊な緊縛プレイ(demo用のソフトレンダラー組む)とか
>>128 つまりDirectX7相当の機能だけ使って作りましょうってこと?
>>129 DirectXインスコさせたくねーとかいう天邪鬼ユーザーに配慮したいとかいう人がいたから
そこまで言うなら「固定機能パイプライン必須」程度を下限にしとけばいんじゃねって話
Win2kのサポート自体は……サポート自体はまだ打ち切られていないんだよ……うわぁぁぁん!
まあ現状XPで動けば良いや程度にしか思ってない
134 :
名前は開発中のものです。 :2008/12/09(火) 10:15:17 ID:S3aTmjvE
初心者なんですが、弾が連続的に描画されないのですが、どうしたらいいのでしょうか? 参考のページを教えていただけると幸いです ボタンを押すと発射、while(pos.y>0)でくくると、最初とpos.y=0の時の中間が描かれません。どうすればいいのでしょうか?
よくわからんが、0でダメなら−1でいいんじゃね?
あー、よくわからんのに書くもんじゃないな すまん、無視してくれ
whileの中は加速度とかの計算式だけで描画関数は入っていません
138 :
名前は開発中のものです。 :2008/12/09(火) 11:13:10 ID:UXQm+qSa
>>137 じゃあ表示されないのは当たり前だろ
whileでくくるんじゃなくてボタンを押したときは弾を生成する処理だけをする
メインループで弾が存在したら弾を1コマ進めて表示する処理をし、
画面街に飛び出たら消滅させる処理をする
>>134 日本語を勉強するか
プログラムを勉強するか
数学を勉強するか
どれかを選べばいいと思う
141 :
名前は開発中のものです。 :2008/12/09(火) 11:43:28 ID:S3aTmjvE
ありがとうございます。全然理解できない;; 写っぱなしの弾をボタン一回で継続的に動かしたいだけなのに・・・・;;
OpenGLはビデオチップによって速度が違いすぎるのが難点だなー。 RadeonXPress200上で開発して60Fps出てたのがたまたまRadeonHD4850で動かしてみたら一桁まで落ちるので、 何でかと思ったら行列スタックや属性スタックの操作が極端に重かったみたいで、判るのに苦労した。
理解できないのはこっちだw 具合が悪いんですけど、何の病気でしょうか? と訊かれただけで、あんたは何の病気かわかるのか?
まともに相手しても さらに質問が返ってくるに25000ガバス
145 :
名前は開発中のものです。 :2008/12/09(火) 12:43:33 ID:S3aTmjvE
ここにいる奴って日本語を勉強しろとか煽られて育ってきたかわいそうな奴ばっかなんだねw
なんだ釣りか
147 :
名前は開発中のものです。 :2008/12/09(火) 12:49:16 ID:S3aTmjvE
日本語理解できてないのはお前らだww頭悪すぎだろww
なんだ、釣りだったのか
>>134 whileでくくった中に描画する処理を書けばいいんじゃね。
while ( pos.y > 0 ) {
=== 移動の処理 ===
=== 描画の処理 ===
===その他の処理 ===
}
150 :
名前は開発中のものです。 :2008/12/09(火) 13:29:24 ID:S3aTmjvE
底辺プログラマーとか自分が先輩からやられたことを必死にやり返してくるからなwww しかも2ちゃんでwww
な 釣
うわーいおれもまぜてまぜてー
153 :
名前は開発中のものです。 :2008/12/09(火) 16:57:20 ID:Sb5wMSbY
なんか1982年頃のBASICでできたインベーダーゲームで 弾を撃つと弾以外のキャラの動きが全て止まるゲームを思い出した
それが分かってて来るのか・・・
2CHの鏡なスレだなw
ああ、釣りだったか・・・
な釣 あ釣
グラディウスのダブルのようなショットを作ったら、上ばっかり→両方に→下ばっかり→両方→・・・ というような波が出来てしまうんですが、満遍なく発射するにはどうしたらよいんでしょうか。 現状は、ショットの要求があったときに、あいている弾があったら発射するという感じにやっています。
159 :
名前は開発中のものです。 :2008/12/09(火) 18:16:35 ID:Sb5wMSbY
>>158 それぐらい自分で考えられないでゲームは完成するのか?w不安だよw
どうとでもできるだろ
>>158 >現状は、ショットの要求があったときに、あいている弾があったら発射するという感じにやっています。
それで問題ない気がするけどな。
上と下の両方に同時に要求してるわけじゃないのかな?
ちょっと邪道かもしれないけど、ダブルショットの要求があった時に、
「2つ空き」があるかどうか確かめて、なければ撃たない、
あれば両方撃つ、って形でいけるんじゃない?
>>159 すいません。確かにどうとでもなるんですが、あのシンプルなショットに
そんな面倒な処理があるのか?という思いがありまして。
>>160 要求は同時に出しています。
行順の問題かとも思って、発射するごとに行を入れ替えたりも試したんですが。
2つ空きのほうは、元々画面内の弾数が多くなくて避けたいので、ちょっと煩雑でも自己流で書こうと思います。
ありがとうございました。
面倒な処理じゃないと思うし、 やり方が間違ってるんじゃないのなら 単にバグが潜んでるだけかもしれないよ。
嫌味だよ 気づけ
>>161 2つ確保するつもりが、ポインタを1つ分しか進めてなくて、弾が次々と上書きされてたりしてな。
知らんが、C#とかjavaなら空いてる弾幕のことなど考えずに 弾丸リスト.add(上向き弾); 弾丸リスト.add(下向き弾); でやるもんだし、C++でも似たような実装は可能だろ? とりあえず、Cでやりたいんなら連結リストを実装することから始めてみればいいんじゃないか。
ゲームの状態(タイトル画面とか、シューティング中とか)でメッセージハンドラを SetWindowLong関数やSetWindowLongPtr関数で変更するのってありかな? メッセージハンドラ中にswitch文とか煩雑かなーと思うわけですが なんか一般的な方法ってあるんですかね?
167 :
名前は開発中のものです。 :2008/12/11(木) 00:30:52 ID:SwlibDem
そこでタスクシステムですよ
ゲームの状態が変わってもメッセージハンドラの中身を変える必要が無い仕様を考えた方が楽かも
>>165 この板で自分以外にC#をC#系スレ以外でいってる人はじめてみた・・・ちょっと感動だ。
>>166 単一のウィンドウプロシージャーからディスパッチすればいいと思う
166です シューティングゲームプログラミング(松浦著)では、タスククラスからシーンクラスを派生させて、 タスクリストの1つとしてシーンを作成していた その仕様はわかるんだけれど、シューティングゲームに限らずたとえばRPGだった場合、 メニュー画面とか、どうなっているのかなーと思った次第 メニュートップ→魔法→だれの?→どの魔法→魔法対象 みたいに新しいメニューが生まれてくるじゃない これもタスクリストに1つ1つ書くのかなーって、疑問に思ってる
>>171 RPGはまだ手を出してないが
俺だったら states などに状態を入れて
switchで分けるかもな
タスクシステムって、マルチスレッドとかでもならない限り
威力発揮しなくね?
素粒子を処理しようとしてるんだけど これもタスクシステムでできるかな?
人工知能を並列処理しながら X透過線のデータをXLSファイルに出力しつつ リアルタイムに表示するシステムのライブラリを作ってるんだ
草薙の剣を手に入れてこれから黒を倒そうとするところで いつもこける そしてずっと俺のターンになるバグがでます 製品版だし、DirectXもバージョン合ってるのに なぜ動作しないんでしょうか? OSはVistaです
誤爆 どこの院かバレるじゃねぇかw 誰か消してくれ
興味ないから問題なす
178 :
名前は開発中のものです。 :2008/12/11(木) 17:27:02 ID:jeJaub+T
晒しage
>>171 タスクリストなんて言う名前で呼んでるから見えなくなってるだけで、
実体はアルゴリズムのエントリポイント(一般的には関数ポインタとか)の連結リストを順番に呼び出していく機構でしかないわけだから、
同じようにアルゴリズムのスタックの一番上だけを実行するような機構を用意すれば良いわけだ。
void Menu()
{
}
void MagicSelect()
{
あふん void Menu() { if(hoge)Push(MagicSelect); } void MagicSelect() { // 同 } void Who() { // 同 } 略 void SelectTarget() { // スタックをクリアして次のキャラとか、戦闘開始とか } 実際どう実装するのが一般的かはしらんけど私はこうしてるな。 RPGは作ったこと無いけど。
>>166 STGってOSのGUIサービスを使わなくてもへっちゃら平気なことが多いから
そういう場合、OSのメッセージシステムも関心の外にあったりする。↓仮想コード
winmain(){
try{
//ゲーム環境構築
//D3D,SOUND,INPUT,USERDATA,ワーカースレッド生成,etc
boost::shared_ptr<GAMEENV> gameenv(new GAMEENV(gamemain));
// メインスレッドはWM_QUITされるまでグルグル回ってろ
while(1){
GetMessageとかうんたらかんたら
…
}
}catch(...){;}
}
gamemain(){ // 自由です。HSPerにとっては水を得たお魚状態
try{
boost::scoped_ptr<SCENE> logo(new LOGO(gameenv)); //ロゴ画面
boost::scoped_ptr<SCENE> demo(new DEMO(gameenv)); //デモ画面
(…後略…)
http://pc11.2ch.net/test/read.cgi/gamedev/1226199100/174- }
STGのシーン遷移は超単純だからコードにベタ書きしたほうが分かりやすかったりする
RPGみたいに複雑なシーン遷移をするならSCENEのツリーとかSCENEのグラフが要るね
こういうのは可視化・エディットできるGUIツールがあると便利だね。ツクール大好き
>>172-176 >どこの院かバレる
(・∀・)病院ダロ。カエレ
>>181 ほぅほぅほぅ ホーホケキョ
リンク先はオブジェクト指向ですねぇ
しかし、私がSTGの状態遷移に一番ややこしいStrategy Patternを使っていたのは内緒だ
>>181 しかしですね
結局 switch文使ってるじゃないですか
これが気に入らなくてねストラテジーパターンに走ったんですが、
さらに汎用性のある基本オブジェクトの作成、つまり基本設計ですかね
でつまづき
CGameクラス作ってシングルトンパターンは楽勝だったんですけど
テンプレートメソッドパターンがなかなかのつわものでしてね
そうこうしているうちに、ワケワカメになってしまってね
結局 デザパタ一切使わない ピュアなC/C++になってしまったんですよ
そして、人生でもつまづいてね
あーいたたた
で、だよ 他のスレからの引用で申し訳ないが case TITLEOPTIONTYPE_GAMESTART: //ゲームスタート try{ //STAGEEXCEPTIONTYPE_GAMEOVERという例外を投げるまでゲーム続行 stage1->Run();stage2->Run();stage3->Run();stage4->Run(); stage5->Run();stage6->Run();stage7->Run();stage8->Run(); ending->Run(); //エンディング画面再生 } これの stage1->Run(); stage2->Run(); とあるが 空の処理を回すのが気に入らない
そんなに空の処理をするのが好きなら Observerパターンで監視しろっつーの と俺が言ってみるテスト まぁ、増えるのは複雑さだけなんですけどねorz
>>181 あ、gamemain中のgameenvだけど、これは適当にgamemainの引数でひっぱってきてね
>>184-185 HSPerのSTGは一面から始まってプレイヤーが生残する限りエンディングまで一本道で進むよ
順次処理を静的に記述してるだけだよ
>>174 のコードに空の処理なんか無いよ
例外を制御に使うのはいかがなものか
>>187 ん?
タイマーの処理が加わってないからよくわからん
もっと深く
>>188 デバックに便利
配列のアクセス違反とは一発でわかる
double ang;e[350]; とかいて angle[-30]; とかアクセスしてたのよ お分かりうふん
ひとつだけ言えることがあるとすれば、キモい
>>191 そんなことを言いにくる
アナタの神経を疑う
いや、まじでキモい
最近ここマジキチ率高いな
>>188 フロー制御の条件分岐に例外機構を使うのはお行儀悪い子だよね
「こんなゲームも一発クリアできないプレイヤーは想定外」
ということで例外機構を使ってみたんだ
同人活動するときは何にも考えずにゲラゲラ笑いながら遊んで作ってるんだ。しかたないね
ID:1D8jgOIGが怖いです。病院が逃げるそうなので僕も逃げます。バイバイ
くやしいのうwwwwwwwwくやしいのうwwwwwwwww 小学生^q^ 幼稚園児 オモロー
反論できない やったことがない 理解できない → キチガイ R O M さ せ た 結 果 が こ れ だ よ ! ! !
次は 「マジキチ」 で埋め尽くされます 貫太郎飴だなおまえらってw きんもー
な釣 あ釣
そりゃ人生もつまづくわな
そして懲りもせずいつもの連投君に釣られる君ら
シューティングゲームの作り方講座を書いていたはずなのに、 気がついたらテトリスを作ろうとしていた。 これはチャチななんとかうんたらかんたら
よく分からんが、デザパタじゃなくてもダイアログって概念でメッセージ受け取り機構は実現できら javaで書くと まず public interface messListener{ public void onMessage(ハンドル); }で、 public abstract class dialog imprements messListener{ }こんな感じで規定クラスdialogを定義。 次にタイトル画面の実装。 public class title extends dialog{ public void onMessage(ハンドル){ タイトル画面のハンドル処理; }}次にゲーム画面の実装。 public class game extends dialog{ public void onMessage(ハンドル){ ゲーム画面のハンドル処理; }} で、プログラムはこんな感じ public class prog implements ハンドルリスナー{ private static messageListener 最上位ダイアログ; protected void onウィンドウメッセージ(メッセージ){ 最上位ダイアログ.onMessage(メッセージ);} }
続き。 画面をせんいするために、専用のコントローラーを作成する。 public interface switchCon{ public void gamestart(); public void gameover(); } で、このコントローラーをさっきの に反映させて、ダイアログクラスはswitchConを持たせるようにする。 public abstract class dialog{ protected switchCon parent; public dialog(switchCon){ parent=switchCon; }}で、親は public class prog implements messListener,switchCon{ private dialog title=new title(this); private dialog game=new game(this); public void gamestart(){ this.最上位ダイアログ=game; } public void gameover(){ this.最上位ダイアログ=title; }} こんな感じでswitch文を消せるぞ。
こんなのがいるからデザインパターンヲタが嫌悪されるんだな
デザインパターンヲタってなんだい?
最近コルーチンとかファイバに感動して使いまくってる yieldさいこー
オ、オ、オブジェクト指向最高ぉぉぉぉ!!! テンプレートメソッドでジャネレータプログラミングして ファクトリーパターンで大量生産バグも大量wwwwwwww プロトタイプでいくらでの客ごまかせるし デコレータで後からいくらでも追加可能なオブジェクト大量 上司に見られそうなところはストラテジーでワケワカメにして ソースを提出したら 「君はシングルトンパターンだね」って言われたwwwwwww
デザインパターンなんて何年前の技術だよ うんこもれちゃうぅぅぅぅぅ
うん。大丈夫。俺だけはまともだ
タダシン元気だったか
タダシンとか懐かしすぎる
新参で頭おかしいのが来たか年齢層が下がったか 今日びシューティングなんておっさんしか作ってないのかと思ったが 10代20代のがきんちょもつくってんのかね
いつもの彼だろ
893だったか
俺じゃないよ
Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Run(); Human->Runaway();
グラフィッカー来たらと思ったら 自称プログラマの揚げ足取り野郎だった ちょ〜っと辛口コメントしただけで消えやがった 士ね
何の話だよ
そろそろメモリアロケータの話をするべきだ
いつものお話です
頑張ってんなおいw
描画についての質問。 弾幕を描画するときって基本的にどうやるべき? おいらの場合はbulletクラスにdrawableインターフェイスくっつけてるけど、これって本来正しくないよな? 一般的にはどうやるんだべさな。一番効率が良い方法とか教えてけれ。
クラスがよくわからん俺はループで弾の構造体一個一個調べて存在する奴を表示してる
俺の場合、描画する際には弾幕かどうか関係ない。 画像をもつオブジェクトはWindowオブジェクトに描画オブジェクトを登録して Windowオブジェクトは定期的に登録された描画オブジェクトを全部描画してる。
>>226 俺も似たような方法かな。
drawableインターフェースのリストを表示優先度別に持って
順番に描画処理を実行。
ちなみに俺も弾幕かどうかは区別していない。
オブジェクトのソートとかを考えたほうがいいな 同じ画像はまとめて描画するのが基本だから もうやってるならそれでいいが
60fpsでソートw でも、実際のところコスト的にはどうなんだろう。 Z軸をソートすることで表示されなくなるスプライトは描画しないようにしようって話だよな? でも、そのためにNxとか計算してたら確実に赤字のような。 何fpsごとに、とかやっても意味のない処理だし。
>>224 矢印キーを押すとブラウザのスクロールバーが動いちゃうぜ。
うちのノートパソコンなら問題なく60で動いた。
ってこっちのレスはおまけだ
みんなソートとか速度とか考えるよなー
うちはどうやって動作処理を記述すれば上手くいくのかさっぱり過ぎて結局強引なコードを書くんだよな。
最近接に対しての誘導とか、インスタンスのリストが必要だから管理クラスと相互参照にしちゃうし、
プレイヤーの情報表示とか、そのためのインスタンスを作ってプレイヤーのインスタンスを保持させてるし、
なーんか後で修正しようがない感じになってしまう。
本とここら辺の上手い管理方法ってないのかね?
>>231 半透明使うとZソートしないと変になっちゃうぜ
>>230 が言うソートって、使う画像ごとにソートして
キャッシュのヒット率を上げましょうって意味でしょ。
と、2D前提の俺は思った。
>>231 > 60fpsでソートw
> でも、実際のところコスト的にはどうなんだろう。
wとかどうなんだろうもへったくれも何も
サクっと実験すればすぐ結論は出ると思うんだけど
なんでやんないんだろう。HSPerな俺でも変だと思う
描画するものをrand()とかで適当にシャッフルして
つまりマテリアルの順番をバラバラにして
つまりテクスチャもレンダリングステートもシェーダも何もかもバラバラにして
描画するだけ。ね、簡単でしょ
> Z軸をソートすることで表示されなくなるスプライトは描画しないようにしようって話だよな?
>>230 はそんなこと書いてないと思うんだよね
ソートなのになんでバラすんだ?
マテリアルソートする意味が分かると思うの
>つまりテクスチャもレンダリングステートもシェーダも何もかもバラバラにして これ順番をバラバラにするってことね。ステート切り替えしまくった場合と ある程度まとめた場合の比較をすればマテリアルソートすることの 意味が理解できると思うの
>>235 ロクにベンチマークテストもしないで根拠レスなことグダグダ言う奴っているよな
先入観だけで意味の無い最適化したり逆に必要なところで何もしなかったり
>先入観だけで意味の無い最適化したり逆に必要なところで何もしなかったり 俺の事だな。
>>237-238 YUTORI最下層シミュレータにかけたところ以下のような出力結果が出たぜー( ・∀ ・)♪
「なんでやんないんだろう」
↓
[YUTORI最下層変換]
↓
「なんでソートしないんだろう」
「なんで実験しないんだろう」にはならないらしいぜ。YUTORI最下層ってすごいだろ。配慮しろよ
ソートありとなしを比較するのにバラバラにする必要はないだろ
タ○○○○○ムとか使ってる知能障害プログラマのコードを 簡易にエミュレートするには有効だと思うよ
嫌な予感がするので僕は逃げます。バイバイ
言いたいことが分らない ていうかSTGで描画するのにソートって意味あるのか?
タムリンビーム?
いつまでやってんのお前ら
まぁ ID:xxIGjXbe = ID:Kx3CWuJW なわけだが。臭いで分かるだろ 今日も彼は元気ってことだ。よかったなお前ら
祖母「地獄巡りの片道切符は貴様らの命で買ってもらおう」
誤爆 祖母ろスレと間違えた
なんだそれw
なんか家庭問題平和的解決STGとかそんなのを連想したがこれ以上はやめておく
文化祭の出し物に家族計画STGというものを展示したら三者面談 大人って汚いよなーっておもた
どっかで聞いたなその話ww
Direct3D直叩きで作ってるやつ減ってるなあ もうちょっと勉強しようぜ
それを突き詰めるとカーネルから作れという話になるわけだが システム弄りに熱を上げるよりゲームに精を出そうぜ
HSP直叩きで作ってるやつ減ってるなあ
みんなもうちょっと玉葱の勉強しようぜ!
ハードウェア⇔デバイスドライバ⇔ダイレクトサンディー⇔アプリ (だいたいあってる)
GPUを隠蔽したインターフェース相手に直叩きって言えるなら
僕だって毎晩E3Dを直叩きしてるんだからねってGDAlgorithms-listで叫んでいいはず
哂われたら
>>255 の所為
自分のパソコンでしか動かないゲーム作ってもなーってのはあるな。 ハードに近付けば近付くほど、その傾向が高くなる。
dirfct3Dに手を出そうとしてるがマイクロソフト公式解説の時点で既にアバババ゙なレベルで難解ねコレ
DrawIndexedPrimitiveUP最強伝説
OGREとIrrlihtという3Dエンジンがあってだな
263 :
名前は開発中のものです。 :2008/12/28(日) 02:55:22 ID:fJQKz6W8
>>259 いきなり公式解説はきつくない?
DirectXの本でCDつきのを1冊買ってきてサンプルいじってある程度
理解してから公式みるとかをお勧めする
どこのラスボスですか
>266 んー…… ぱろでぃうす?
ガルーダIIとか
鼻水噴射したw
東方風神録みたいな円形のボムってどう実装すればいいんだ?
気にせず矩形判定
円同士なら距離で判定
PrimitiveType.TriangleFanを使ったらできないかな。
見たこと無いから間違ってるかも知れんが 円の画像を拡大縮小すればいいんでねぇの?
>>276 ポリゴンそのものを円形にする必要があるの?
どんな絵か判らんが普通に円の絵を板ポリに貼るだけじゃないのか
>>175 見た感じ、紫、白ともに画像は同一。
輪自体はかなり高速に回転してるけどグラフィック自体はアニメーションしてないっぽい。
白い輪は途中で2枚の回転方向が異なる円形画像が重なるようにしてるっぽい。
輪の線の太さは変わらず半径だけ増えてるから変形は単純な拡大縮小ではないけど、多分スケール操作か連番画像。
>>280 んじゃ最終的な大きさになるテクスチャを縮小した状態から大きくしてなおかつ
1枚絵を高速回転してるわけか
>輪の線の太さは変わらず半径だけ増えてるから変形は単純な拡大縮小ではないけど、 単純に輪郭画像と輪郭の太さ分小さい画像の重ね合わせじゃないかね? 単純に重ね合わせると違和感があるのでアルファブレンドなり加算合成なり・・・ 実物見たこと無いから(略
>>282 素材抜き出したらそれっぽいのが1つあったが真っすぐな線だった。
あれを円状にしてるのかな
ってことは直交座標から極座標に変換してるでFAっぽいね 昨日(というか今日)似たような画像を作ろうと試したときレタッチソフトのフィルタでXYRT変換使ったから、 プログラム上でそれが出来ればわざわざ円形の画像を使う必要もないってことか
そこでTriangleFanをだな。
オブジェクト指向で作っていたが 構造体で作った方が牢固で、保守的で、頑丈なものができそうな気がするんだが どうだろうか?
全部構造体で作ってる俺が通るぜヒャッハー
おぶじぇくと嗜好とかクラスとかわけわからんが構造体だけで何も困ってないぜ(・∀・) でおk?
個人で作るなら(プログラマが1人なら)オブジェクト指向である必然性は無い。
オブジェクト指向と構造体は並べて比較できるものではないと思うが。
そうなのか? やはり難しいことを先にやっていたようだ どおりで完成しないわけだ 構造体楽だね♪
グラディウスXの芋ステージを真似てみようと勢いで作ってみたが、 判定処理が複雑になりすぎ+処理重すぎでまともに動かないorz ・岩1つ1つを背景と判定するために座標変換 ・プレイヤーやショット、空中の敵も背景との判定の為に座標変換 スムーズにはいかないな…。
>>287 詳しく・・・といわれても。
適当にぎざぎざ引いた線を左右が循環するようにして、そのあとフィルタを使用しただけだが。
photoshop(elementだが・・・)でやった。
大抵のレタッチソフトは座標変換操作するフィルタはデフォであるか、プラグインがあるんでない?
直交座標を極座標に変形するってことに対してなら、
元のY軸の値を原点からの距離、元のX軸の値を方向にするような変換でしょ。
ぐぐって上に出てきたページの真ん中あたりに直感的に理解できる図がある。
ttp://pkunto.akuma.to/atelier/filter/no1.htm
ま〜わる〜ま〜わる〜よ〜 ソースはまわる〜 コメントーアウトーくりかえ〜し 今日は消された コメント達も いずれコミットされて動きだ〜すよ〜
>>295 >座標変換
座標の整数化とビット右シフトはやってんの?
当たり判定グリッドの単位マス当たりドット数を、2の倍数にしておく必要があるが。
>>299 いや、普通にfloatで行列使ってやっているw
岩は丸判定、背景はあたり判定用のポリゴンでクソ真面目に計算しているから
処理が重いのは当然かww
バスクリンステージも後々再現してみようと思ってたので背景に判定ポリゴン使って、
カメラのZ軸回転にも対応できる形にしていったつもりだが、
処理の高速化とか全く考えていなかったorz
303 :
299 :2009/01/08(木) 20:43:25 ID:FVMUmd1O
>>302 ううっ、恥ずかしい。累乗だった。
>>301 ひょっとしてレイ使って当たり判定やってんの?
304 :
299 :2009/01/08(木) 21:10:15 ID:FVMUmd1O
つーか、日本語不自由でもPC言語不自由じゃなかったら問題解決だべ。 ゴラアヽ(`Д´)ノカカッテコイヤ!
>>303 まぁそんな感じだな。
判定用ポリゴンもできる限り少なくしたつもりだが、
そもそもグラXとかの判定って全く違う考え方でやっているとしか思えないな…
あれだけの物量の判定やっているんだから何かごまかしているとは思うんだが、
簡易的な処理方法が俺には思いつかないorz
座標変換処理だけでかなりの処理負荷だしなぁ。
>>304 A = {a | a∈2^n, ∀n∈N}
B = {b | b∈2n, ∀n∈N}
この2つはまったく別の集合だよな
数学の言葉で記述すればいいんだから、日本語が不自由ってのは言い訳にできない
>>306 なんか、顔文字に見えるのは俺だけか
ニダって感じのやつが手を横に伸ばしてるみたいな
309 :
299 :2009/01/09(金) 22:24:08 ID:jRkwlo0g
>>306 横で、お主が昔飼っていたペットが「昔この2本足に虐待されていた!」と憤っているぞ。
>2つはまったく別の集合 ('ー`)フムフム
> ↓
>数学の言葉で記述すればいい ('ー`)フムフム
> ↓
> ↓
> ↓
>∴日本語が不自由ってのは言い訳にできない ('A`)???
('A`)・・・
('∀`)!!!→日本語不自由でも○○言語不自由じゃなかったら問題解決
ひつぜん-せい 0 【必然性】 (1)そうなる以外にありえないこと。
東方のDirect3Dの描画範囲って本当に640×480? どうやっても1024×768のディスプレイであそこまで綺麗に画像が映らない・・・ 何か特別なパラメータの設定でもあるのかな? 誰か情報あったらきぼん。
>>312 文章の意味がよく分からんが
東方よりも大きい解像度で自作ゲームを作ってるけど
あそこまで画面を綺麗にできないってこと?
それでも綺麗の定義がよく分からけど
いえ、Direct3Dの描画サイズは640×480で作っています。 それを1024×768のフルスクリーンで表示しても 同じ640×480の東方に対して画像などの粗が目立つ気がするんです。 東方も若干ぼやけてますがその1.5倍くらいぼやけて見えるんですよね、、、
じゃあ、東方はビットマップとかをあらかじめ大きめに作っておいて、 それを縮小表示してるのかもね。 解像度を小さくする理由としては、動作速度を稼ぐためとかが挙げられる
>動作速度を稼ぐ 俺のことなんですけどね。
グラボのアンチエイリアス機能が画面全体に効いてたりして
開発中はグラボの機能カットするなんて基本…>312はやってないかもしれんな
ち、違う!俺はやってない!
話は署で聞くから
>>319 が「やれ」とほのめかしたんです(TT)
グラボの機能カットしない男のひとって…
私のグラボは最新です!!
ちょっと質問。 C/C++系などメモリ破棄を自前でやる言語使ってる人で、 メモリ管理ってどうしてる? ・デフォルトのmalloc/newに丸投げ ・配列+空きインデックス管理 ・大き目の領域を取ってその中を自前で管理 ・その他(併用とか) 最初自分で工夫しようと思ったけど、デフォルトのnewでもそんなに困らん気がしてきた。
困ったら別の方法を模索すればいいんじゃね?
new使ってるけど、 newで作ったものは全部プールしておいて後で使いまわすからという理由で どうにもdeleteしている形跡が無いという 不思議な仕様になった。 もったいない精神は偉大である
つスマートポインタ
>>324 C++ならnewで作っておいて、パフォーマンスに問題があれば
newを自分で定義すりゃいいんだよ。
グローバルなnewもクラス固有のnewも、自分で再定義できる。
ふつーに初期処理でnewして、ふつーに終了処理でdeleteするだけっすよ ゲーム中では絶対new/deleteしない。あらかじめコンテナにプールしとく
>>306 >A = {a | a∈2^n, ∀n∈N}
>B = {b | b∈2n, ∀n∈N}
数学科の俺から見ると、このA,Bは数学の言葉としては全く意味が通らない。
おそらく、2のベキ乗全体の集合をA, 2の倍数全体の集合をBと書いた
つもりなのだろうが、全然そうなっていない。
「a∈2^n」は「aは2^nという集合の元である」という意味であり、
「b∈2n」は「bは2nという集合の元である」という意味になる。
この言い回しは意味不明。2^nも2nも、集合ではなく自然数だから。
ついでに、「∀n∈N」の部分もおかしい。なんで∀なの?∃だろ?
正しくはこうだ。
A={a|a=2^n,∃n∈N}
B={b|b=2n,∃n∈N}
>数学の言葉で記述すればいいんだから、日本語が不自由ってのは言い訳にできない
数学の言葉に不自由な輩がそんなこと言ってもな。
何を言ってるのか判りません(*´∀`)
せっかく数学に長けているのなら >おそらく、2のベキ乗全体の集合をA, 2の倍数全体の集合をBと の時点で止めて間違いを訂正をするだけにすればよかったのにな 数学科「だから」意味が通らないなんて明らかにおかしいだろう
>>333 何が言いたいのか分からん。
>の時点で止めて間違いを訂正をするだけにすればよかったのにな
330は まさに「訂正するだけ」にしているのだが。
>数学科「だから」意味が通らないなんて明らかにおかしいだろう
何が言いたいのか不明。
数学科だから意味が通らないのではなく、
「数学の言葉としては意味が通らない」と言っている。
理屈っぽい奴だのう…
>>334 簡潔にまとめるなら「変に煽るな」だな
不明不明連呼したり最後に煽ったりしなくてもいいだろってことだよ
Cライクに書いたほうがここのやつらは理解できると思うぞ
>>336 そうだな。最後の一文は無い方がいいな。スマン。
理屈っぽくなくちゃ数学科ではやってられないんじゃね? (情報科もたいがいだが)
ああ、∀ がどうしても顔文字の一部分にしか映らない・・・
マタリいこうぜ
そうそう
現在開発中なのですが オブジェクト指向でいくか構造体でいくかで悩んでいます オブジェクト指向 ・ソースの量が増え、複雑になる ・再利用しやすい 構造体 ・ソースが読みやすい ・エラーの発見が遅れる といった点がありますが他の方の意見も聞きたいです ちなみにひとりでの開発となります
オブジェクト指向だからソースの量が増えるなんてことは無いし、 また再利用しやすいなんてことも無い。再利用しやすいのならソースの量は減るはず。 自分のスキルにあわせて作りゃいいんじゃないの。
例えば、ライフゲームの1セル1セルをオブジェクトにしたら、只の馬鹿だろうな。 結局、オブジェクト指向で造るのだが。 画面上の敵弾の配列を持ったオブジェクトとか考えて、 この配列に対して、前進・衝突と描画とを一致させる。 衝突したら、イベントを爆発エフェクトのマネージャーに渡す。 これを継承して誘導弾の配列を持ったオブジェクトなんかも造れる。
馬鹿と言われた気がして来ました
俺だけじゃなくて良かったよ。
漫才自重ww
>>343 まずは色々作ってみたほうがいいんじゃね?
過去すれ見たんだけど 超連射の効果音って勝手にパクっていいの?
何言ってんの?
久々に来てみたらなんだ 数学厨の亀レス煽りとライフゲーム漫才だけかよ
全ステージ全オブジェクトの画像をゲーム初めによみこんだらまずい? どれくらいまでなら大丈夫?
VRAMから逆算するか実際に実験してみろとしか
オブジェクト指向だとソースの量が増え クラスなど管理することが増えるので 手間がかかるし、覚えておくのも大変で、後から追加するときなども いちいち解析しないと追加できないので、そこで悩んでいる そこで構造体で関数と構造体だけにし、クラスを排除し、簡素化し、楽にゲーム製作にいどもとしているんだが どうだろうか?
関数型言語だな
いいんじゃね? メンテのしやすさで俺は構造体使ってるよ 今の時代パフォーマンスなんてそれほど変わらないんだし 自分が見やすいかどうかが最重要
適材適所で使い分けられたら良いと思う
>>356 C++ vs 純粋C
ということかな?
というか
>>356 がオブジェクト指向を理解していないだけな気が。
プログラムはスクリプト読み込めるように作っとけば適当でよくね? 再利用とか考えるより、効率よくステージを作る方法考えたほうがいいよ プログラムのバグ潰しはモチベーション下がるから ソースコードあんまいじらない仕組みを初めに一気に作るべし
>>362 >効率よくステージを作る方法考えたほうがいいよ
同意。
しかし、
気の利いたギミックの汎用的量産フレームワークの発想に取り憑かれると、
いかんともしがたくならね?
>効率よくステージを作る方法考えたほうがいいよ ステージ構成やプログラム設計をきちんとやらないと破綻するよね? そこで どの方法がベストなのか悩んでいるんだが
ステージエディタ最重要 作りこみの効率が大幅に変わる
俺も素人だから良く分からないけど、
>>356 のオブジェクト指向うんぬんって話とステージ作りの効率化って関係ある話なの?
というか相反する要素じゃないと思うんだけど
あとオブジェクト指向って要は対象がその処理をやるっていうイメージでしょ
大規模になるほどオブジェクト指向でやっといた方がいいと思うんだけどどう?
詳しい人間違ってたら訂正頼む
俺は基本グローバルな構造体で、ソースコード分けるために無理やりクラス作ってる感じ ステージ、敵、弾の定義は多分一番普通なやつ 面 set 敵の種類 X座標 Y座標 set 敵の種類 X座標 Y座標 sleep 待機時間 set 敵の種類 X座標 Y座標 sleep 待機時間 こんなのが書いてあるのを配列に読み込んで設置とスリープを繰り返す 敵(弾)もほぼ同じだけど移動部と攻撃部を同時に実行してく 画像ファイル名、当たり判定の大きさ等もヘッダに書いとく 敵 //移動 (sleepの間は増加量を変えないで動き続ける) move 角度 速度 sleep 待機時間 move 角度 速度 sleep 待機時間 ・・・ //攻撃 sleep 待機時間 nway WAY数 sleep 待機時間 make 敵の種類(特殊な動きをする弾(敵)をだす) ・・・
面はいいけど 敵が未だにできない。 ソースコード直。
真面目に見ようと思ってるのに、どうしても左上の眉に目が行く
ここは半角板じゃあらへんで。 つ
>>371 何となくスレに出てくる単語を繋いだら、過去に弄ってた物と一致した気がした。
・ライフゲーム(1セルオブジェクト)
・スクリプト
・汎用的量産フレームワーク(意味不w)
・sleep 待機時間
>>356 まー。継承を使わないなら無理にクラスを使う必要はないよ。
そもそも継承自体も適切な使用をしないと返って煩雑になるだけだし。
JavaやC#は構造体がなかったり、参照型の構造体が定義できなかったりするからクラスになるけど。
その言い方だと誤解しやすいぞw Javaには構造体が無くて、C#には値型として構造体がある。
お前らのステージエディタ見せろ
まずお前が見せてくれ 話題としては興味ある
上の話の流れから言って、
>>365 ぐらいしか作って無くない?
例えば、手打ちの俺はこんなことしてる。
1.pause機能を加える。
・トリガーとなる時間(ステージ開始からのフレーム数なんなり)を表示。
・pause中だけマウスカーソルを表示させて、オブジェクトと重なったらVSのbreakが掛かるようにする。
・break中に、識別番号やら座標やらを取得。
2. 1.の情報を元にテキストエディタで追加。
3. Cut&Try
この作業を肩代わりしてくれるツールをGUIとかで作るの?
よし、じゃあ俺のやり方を教えよう。 俺はMS-Excel2007でステージエディタを作っている。 キャラのプレビュー画像を用意して、MS-Excelの図形で表示させたりしている。 他の奴もエディタ問題の解決法教えれ。
今、ちょろっとやってみたんだけど、csvじゃ無いんだな。 うちがoffice 2003だからダメなのかもしれんが。
>>379 csvってカンマ区切りのことだよな。
出力データの話か?
出力ファイル形式は何でもいいんじゃねえの。
>>出力ファイル形式は何でもいいんじゃねえの。 何でも読めるゲームアプリ作ってるなら苦労は無いわなw csvでは、セル情報と共に画像も消えるので残念だ。 ちょっとマクロを挟んでから出力させるか、xls読ませれば良いだけで、 Excellの各種機能が使えるのは楽かも。
>>368 みたくスクリプト使ってる人も多いんでね?俺もスクリプト派。
まあ好きにやってくれ。
>>382 スクリプト直編集だと、位置の調整が面倒臭くね?
スクリプト編集→実行して画面確認→スクリプト修正→・・・
みたいにならね?
あれ?だれか来たみたいだ こんな時間にだれだろう?
387 :
377 :2009/02/09(月) 16:42:57 ID:bnEG9l2P
>>スクリプト編集→実行して画面確認→スクリプト修正→・・・ ないないw ゲームエンジンの作り方は人それぞれだけど、 大概のエンジンでbreak中に座標書き換えたら 敵とかアイテムとかテレポートするよな? 一時停止中に良いと思える位置まで微調整して、その座標をメモって 軽く逆算すればスクロールインする時間も求まってるよね?
DirectX学習中のものです。こういう初心者の質問は他でやるべきですかね。
弾の描画で困っています。
下の画像、左が自作のもので右が弾幕風のものです。
http://blog-imgs-24.fc2.com/f/r/o/frontiersman/WS000008.jpg どちらも角度を指定して弾を発射する処理を行っているのですが、
弾幕風のように滑らかな表示ではなく、いやにガクガクした動きになってしまいます。
ドット単位でしか表示できないみたいなのですが、DrawPrimitiveで描画すること自体が間違っているのでしょうか?
それとも何らかの工夫を施しているのでしょうか?
判断に必要な情報があれば指定してください。お願いします
俺が生粋のDirectXユーザーじゃ無いので、余り助けにならないかも知れないが…、 画像を見た感じ、小数点以下を切り捨てて居るように見える。 DrawPrimitive()というか、固定機能で射影行列無しなら、 800x600の画面中なら、(370.5f,423.1f)なんて座標も行ける。 次問題なのはエフェクト ステートのSetSamplerStateだが、こっか らさきはググッた方が速いな。
最後、これはJavaやC++のboost.とかforeachのある環境だけなので、余計なお世話だけど、 画面外に出た弾を消など配列の長さが変わったりすると、foreachが途中で止まって しまい、直線に並ばない事があった。 それならこういう画像にならないハズだが。
>>388 座標をintでやってるとかじゃない?
つーかこういうときはソースを上げたほうが回答しやすいと思うよ
392 :
388 :2009/02/09(月) 20:09:43 ID:wk3y2YCS
SetupTexSamplerState( g_pD3DDevice , kTSS_LINEAR );を使って 線型補間を行ったところうまくいきました。 本のサンプルでは見栄えが変わる程度にしか書いてなかったこともあって、完全に見落としてました。 皆さまありがとうございました。
394 :
388 :2009/02/09(月) 20:39:06 ID:wk3y2YCS
オリジナルの関数だった。。 g_pD3DDevice->SetSamplerState( 0 , D3DSAMP_MIPFILTER , D3DTEXF_LINEAR ); g_pD3DDevice->SetSamplerState( 0 , D3DSAMP_MAGFILTER , D3DTEXF_LINEAR ); g_pD3DDevice->SetSamplerState( 0 , D3DSAMP_MINFILTER , D3DTEXF_LINEAR ); 中身はこれですね。。手つかずの部分を改造してきます
>>387 必ずしも一回で位置が確定するわけじゃないだろ。
結局、
>>スクリプト編集→実行して画面確認→スクリプト修正→・・・
となると思うが?間に起動位置逆算の作業も入るのか。
俺はそういうやり方は煩雑で、成果としての遊びの質を下げると思うな。
ま、好きにやればいいと思うが。
>>実行して画面確認 が 一時停止とbreak中の座標書き換えで収まる。 と書いて居る。 そう読めないのがよく解らない。
>>396 「一時停止とbreak中の座標書き換えで収まる」位置を、1回決めたとして、
それが最後まで修正されることはないのか?
画面見て、やっぱもうちょっとこっち寄りの方がいいなとか思ったら、
逆算して、スクリプト編集するんだろ。
398 :
377 :2009/02/09(月) 21:28:01 ID:bnEG9l2P
>>377 >例えば、手打ちの俺はこんなことしてる。
>1.pause機能を加える。
> ・トリガーとなる時間(ステージ開始からのフレーム数なんなり)を表示。
> ・pause中だけマウスカーソルを表示させて、オブジェクトと重なったらVSのbreakが掛かるようにする。
> ・break中に、識別番号やら座標やらを取得。
一時停止(pause)とbreakは別なの。
一時停止(pause)中にF5押す度に、ウォッチ式を書き換えた新しい位置にキャラ動かして画面に表示されるの。
何百回くりかえしても良いの。 一時停止(pause)を切るまで。
人の書いてる事を婉曲させないで。
俺も君のアプリはxlsが読めるらしいと書いたのは悪かったよ。 現実はどうしてるの?
俺が詳しくないのもあるが、いまいち
>>378 のやり方が良く分からない
エクセルで敵や弾の画像を表示させてみるってこと?
そもそもステージエディタってのが具体的にどういうのを指すのか
>>368 みたいなスクリプトを用意するってのなら分かるんだが
>>399 俺は普通に、マップチップを並べるのと同様に、敵を並べると思った。
yのマス数が、経過時間やスクロールした距離の類を兼ねる。
まーこれでは敵が横から出られないのだが。
>>398 >一時停止(pause)を切るまで。
一時停止を切った後、そして他のスクリプトを追加した後、
あらためて出現仕様の再設定とか、全くしないということか?
まあ、好きにやればいいと思うよ、と婉曲的コメント。
>>399 雑誌の攻略記事とかで、エリア全体の写真をつなげているのとかあるじゃん。
俺のはあんな感じだよ。
登録は、エリア領域中のセルを選択しておいて、マクロでスクリプト自動算出。
MS-Excelファイル自体がDBも兼ねている。
つまりエリア全体表示シートとは別に、スクリプトを蓄えておくDBシートも含んでいる。
DBシートに蓄積されたスクリプトも、マクロでファイル出力。
だいたい、こんな説明でイメージつくだろ。
>>377 、
>>387 が理解できたなら、それ以上でもそれ以下でもない。
pause機能を一個加えるだけで楽になる。
そして同様の使い勝手と得るステージエディタを作るコストを
考えればわりとお得だろ。
>>401 大分分かった(と思う)
あくまで概要は、だけど
なんていうかステージエディタは用途に応じて作ればいいんじゃないかな
>>377 のやり方は
>>378 の作るゲームのステージを作るには満足できないかもしれないけど
>>377 のゲームのステージ作りでは必要な要件を全部満たしてるかもしれないし
というかまずスクリプトの設定項目自体は共有できてるのか?
「スクリプト直編集だとこうだけどエディタを作れば〜」っていう具体例があればエディタが必要な理由もわかりやすいけど
要は効率化のためにプログラムを起動したまま作りこみたい場面を修正→リロード(繰り返し)を出来るようにしたいってことだろ? デバッグモードとしてゲームプログラム内に組み込むか 単独機能としてエディタを作るか ってだけだろどっちでもいいだろ
なんか、シューティングゲーム制作とかすらない話かもしれないけど SPI適性検査で、ステートマシーンの出来損ないみたいのが出題されて それでプログラマ適正とか見るじゃん 仮でも自称でも俺たち適正ある事になってるのだから、 スクリプト直打ちが出来てもおかしくないんじゃない? 逆に、デザイナーさんや企画屋さんに、スクリプト直打ちをやらせたら ダメだよな 実際がどうであれ、タテマエ上は俺たちよか適正無いハズなんだからw
対人折衝能力が無い奴が大がかりなエディタを作っているとは、哀れ哀れ
>>401 を見た後に、
「俺はそういうやり方は煩雑で、成果としての遊びの質を下げると思うな」
を読むと、「貴方のお幸せをお祈りさせてください」とか言う奴と同じぐらいウザイ
>>407 ウザいってな、お前。
神経過敏になっていて受け止めるのが面倒だったやつを、軽くあしらっただけだろ。
そんなことより、お前も自分のやり方、教えたれや。
俺は本体をある程度作りこんでから、それを改造してステージエディタにするな 面の全体をスクロールで見れるようにして、敵の出現位置をドラッグ&ドロップで指定とか 右クリで動作指定とかできるようにしてる。
俺はステージエディタを作るところまでに到ってない。 スクリプトをマクロ化したり、分割したりすることでステージをいくつかのシーンでわけて、 そのシーンごとに編集/実行/チェックしてる。
>>409 へー、すごいな。
マウス操作用のGUIとかも実装してるんだ。
素直に感心する。
実装する楽な方法でもあるのかな。
雑魚が壁を縫って飛んだり戦車が通路に沿って動いたりとかラクにやりたい
うn
>>417 できないのになんでここに存在するのですか?
不愉快です 目障りです うざいです キチガイです 変態です 犯罪者です パチスロ野老です つりバカです 自称看護士です 天才です ただのかまってちゃんです
どれだろう・・・
ああ、チャネラーか
俺はただのロリコンだから変態とかではない
>>413 背景マップチップに移動可能方向を記録しておくとか。
ランダム的な移動はできなくなるけど。
いつも仕事に追われる人、空振りする人の心理要因とは? ・根拠のない自信家タイプ 「でも面倒なことをするのは嫌だ!」
なんだいきなり
とあるサークルで参加しているんだが 原稿読んだ後 みんなの意見をやりとりしているところで 俺 >私からの感想としては 色々意見のやりとりをされているようですが 細かい部分ばかりに目がいき >作品が完成しないようなことになるのが心配です 相手 すみません。分かりやすく言ってももらいたいです こいつにはなんと言えばいいんだ?
あんたらには一生かかっても完成は無理 と言いたんだな?
続きがあるんだが 相手 まだ、全員の意見が聞けていないのですが話として受け入れてもらえているなら僕が悪かった テキストを書き直すことが次ぎやることだと思っています あと、他のみなさんが作業しやすいように「ここでどんな絵や音楽」とかの 指示も含めたものを渡すことを考えています ライター志望らしい 察するに自分の作った話以外の話はうけつけないといった感じだろうか? ちなみに俺が監督役なんだが・・・ チーム複数あって まわしにまわされ俺のところにきたわけだが・・・
ライター志望ってことは作画や作曲は他の誰かがやることになるのかな
ですね
ライター志望を騙った企画厨だととっくに気づいているくせに 責任者の任にありながら自分の手は汚したくないというわけだ お気に召すままに
シューティング作るのにまず話って何? 絵や音楽のためのイメージを伝える程度の設定がありゃ良いじゃん
なんつーか「設定を見せるために作った東方」がイメージ的に近い気がする
A >私からの感想としては 色々意見のやりとりをされているようですが 細かい部分ばかりに目がいき >作品が完成しないようなことになるのが心配です B すみません。分かりやすく言ってももらいたいです 日本語難しいお(^ω^)
This is a pen. sorry I can't understand "This is a pen" please more Easy English so I can understand
どうした? 何か悲しいことでもあったのか?
つーか427は説明不足すぎていまいち分からない
解るか、解らないか関係無しに、 微塵もシューティングゲーム制作の話を含んでないと思う
スレ間違えたんじゃないのかと思った
めちゃくちゃすれ違いだがw もし俺が監督役なら、 「とりあえず、最後まで動くものつくるから」 といって、C++の本を渡す。勉強しないできない奴ならクビ。 もし万が一、勉強できたけど、気に食わないやつなら データ構造、アルゴリズム、グラフィック、DirectX、ウィンドウズの仕組み スクリプト言語、ゲーム理論、プロジェクトの管理とかがある。 完成をお祈りしてます。 俺がプログラマなら、周りが協力的でないとダッシュで逃げる。
とりあえず作るゲームのジャンルを間違えてる
結局427はどこ行った
445 :
名前は開発中のものです。 :2009/02/18(水) 13:03:03 ID:zgIgX6Kz
たすけて とりあえずインベーダーみたいなの作りたいけど、 なにすればいいか全然わからん。 まずウインドウを出すことから?
ウィンドウ出してすらいないんじゃインベーダーとか言う段階ですらないんじゃ?
447 :
445 :2009/02/18(水) 15:59:11 ID:zgIgX6Kz
>>446 図書館でC++の本かりてきたけど、
ほんとまったくもってサッパリっス…。
いちおうまっくらなウインドウがでた。ヤッター。
数学の知識がないと碌な実装が思いつかないというのを思い知らされた
ゲーム作り始めたころの俺に言いたい @ライブラリ使え A高速化は気にするな Bswitchはスペルにtが入っている Cエラーのときに表示される行は間違ってることがある D何作るか紙に書き出さないとPCつけたって何もできない
>>448 すげえ、こんな隠れ開発系サイトがあったとは!
>Bswitchはスペルにtが入っている ワロタw
switchのスペル間違えるとエラー出るから問題ないだろう。 default:はスペル間違えるても昔は警告も何も出なかった。 今は出るのかな?
454 :
451 :2009/02/18(水) 19:09:56 ID:8RfH69wb
とおもったらDxLib使っているのかな?がっかり。
> Bswitchはスペルにtが入っている 間違えねーよw
456 :
427 :2009/02/18(水) 19:12:04 ID:JWJnZY9H
>>444 意見だしたらシカトときたよ
ダメだなこいつ
>>454 DxLib使ってる奴もいれば使ってない奴もいる
てゆうか2chに晒さんでくれ
これ以上問題児はお断りだ
ここはお前の日記帳だ 思う存分書け
>>448 前から思うんだが、この人、ところどころ実装がヘタクソな部分があるよね。
>>458 こういうことじゃね?
>これ以上問題児(※自称監督役含む)はお断りだ
>>459 そういうなよ、ソース公開してくれる人がいなくなるぞ。
ソース晒さない達人プログラマより、
ソース晒す普通プログラマのほうがありがたいし尊敬する。
>>459 そこしか見ないで使い物にならない奴が出来上がったら、嘲笑してやれば良い
『全ての初心者、つまり子供達に画一の最高の教育を受けさせなければならない』
なんて言い出したら、真っ赤な社会主義者だぜw
俺も人のことを言えないぐらいのコードを書くので、ケント・ベックなんか読んだりしてる
463 :
445 :2009/02/18(水) 22:14:14 ID:zgIgX6Kz
>>448 右も左もよくわからなかったけど、今日一日で作り方の流れがすこしわかりました。
バンザイ。具体的にどんな感じにするか考えます。
初心者でスレ汚しすいませんでした。
すまんかった。
>>448 1、ウィンドウの表示
2、入力装置から値の受け取り
3、メニュー画面、ゲーム画面の遷移
4、自機や敵等、オブジェクトの表示
5、当たり判定とオブジェクトの破壊処理
6、敵とか背景とか時間で追加されるものをがんばる
7、音楽をならす
8、点数とか、自機のパワーアップとか
9、バランス調整
作成する手順だと、こんな感じだと思う。
とりあえず最低でも6まではつくるんだ。
作ってるといろんな問題がでてまずこける。
こけた後、立ち上がれないと何時までも完成しない。
STGの得点って、やりこむごとに上がってかなきゃいけないもんだけど アイテム 撃ち込み カスリ 弾吸収 パーツ破壊 残り時間、残機、ボム、撃墜率、ノーボムボーナス 特殊なの含めてこれ以外にどんな稼ぎがある?
被るのもあるが、早回し、位置取り、ノーボム、ノーショット、パワーダウン、、、 リスクを冒すとボーナス、ってんならそれこそキリが無いくらいあると思うが なんか新しいもん考えろと言われれば適当に思いつくぞw
近づいて倒すオメガボーナス
ボーナスといえば、ラザロが合体する前に破壊、左右のデライラを同時に破壊、だろうが!
>>466 あと基本的なものだと命中率やチェーン(コンボ数)があるね
最近のは大往生あたりから、弾がいっぱいでるやつが多くなったんで 避ける楽しみというよりも、覚えて動かせたときのよる ビーマニのような楽しさにかわりつつあるんで 単純に避けて、潰すといったようなやつが同人でつくってほしいわ。
弾がいっぱいでてもやることは同じだが ケイブシューに関して言えば東亜シューと避けの理屈はだいたい一緒だよ
覚えて動かすって昔の方が多いよ R-TYPEとか覚えてなかったら見てから動いてもすぐ死ぬ
dixqさんはマジ天才ですよ!!! 東方を作ってるんで、一度見てくるといいです!!! 作り方も丁寧に解説されていて、初心者の僕でもプロジェクトをダウンロードしたら作れました! そんなのとは段違いです、こdの!
475 :
他人 :2009/02/19(木) 14:20:04 ID:YBmJ9aiM
>>474 ですよね!!僕も最高だと思いました!!
そういや去年、龍神録プログラミングの館のサイト見て それ読みながらそのままXNAに移植してxbox360で動かしたりしたっけな。 今見るとだいぶ進んでるなあ、続きやろうかしら。 作者に許可とったら公開もできるかな。
>単純に避けて、潰すといったようなやつが同人でつくってほしいわ。 ファンタジーゾーンみたいなのとか?
>>476 ・ソースを公開しない場合は制約無し
・ソースコードのコピーは、自サイト・掲示板に関わらず出所を書くこと
・免責
だよね?
ゲームプログラミングの館の一番下の利用規約じゃダメなの?
xna対応の改変があるときは、ソースコードの(一部の)コピーを含むから出所を書く
ぐらいで、許可とか要らなくね?
ぶっちゃけ、Ms-PLの商標感染の方がウザイ。
できないのね
アイマス!アイマス!アイマス!アイマスぅぅうううわぁああああああああああああああああああああああん!!! あぁああああ…ああ…あっあっー!あぁああああああ!!!アイマスアイマスアイマスぅううぁわぁああああ!!! あぁクンカクンカ!クンカクンカ!スーハースーハー!スーハースーハー!いいisoだなぁ…くんくん んはぁっ!アイドルマスターSPのisoを早く落としたいお!クンカクンカ!あぁあ!! 間違えた!ダウンロードしたいお!ダウンロード!ダウンロード!isoダウンロード!さっさとダウンロード…きゅんきゅんきゅい!! 箱○版のアイマス面白かったよぅ!!あぁぁああ…あああ…あっあぁああああ!!ふぁぁあああんんっ!! L4Uも発売されて良かったねアイマスたん!あぁあああああ!早くプレイしたいい!アイマス!早くプレイしたいい!あっああぁああ! SPも発売されて嬉し…いやぁああああああ!!!にゃああああああああん!!ぎゃああああああああ!! ぐあああああああああああ!!!SPが起動できない!!!!あ…isoもCFWもよく考えたら… F W 5 , 0 5 は 対 応 し て な い?にゃあああああああああああああん!!うぁああああああああああ!! そんなぁああああああ!!いやぁぁぁあああああああああ!!はぁああああああん!!ロシアぁああああ!! この!ちきしょー!やめてやる!!現実なんかやめ…て…え!?見…てる?ダミーパッケージのアイドルが僕を見てる? ダミーパッケージのアイドルちゃんが僕を見てるぞ!アイドルちゃんが僕を見てるぞ!壁紙のアイドルちゃんが僕を見てるぞ!! カスタムテーマのアイドルちゃんが僕に話しかけてるぞ!!!よかった…世の中まだまだ捨てたモンじゃないんだねっ! いやっほぉおおおおおおお!!!僕にはアイマスがある!!やったよ高木社長!!まだ頑張れるもん!!! あ、PSPのアイマスちゃああああああああああああああん!!いやぁあああああああああああああああ!!!! あっあんああっああんあ伊織様ぁあ!!ゆ、ゆきぽー!!あみあみぃいいいいいい!!!まみまみぃいいいい!! ううっうぅうう!!俺の想いよDark_Alex氏へ届け!!ロシアのDark_Alex氏へ届け!
誤爆かよ
>>478 そっちにあったのね。その内容なら問題ないかなあ。ベタ移植だから素材丸々使ってるのもあるんだよね。
オリジナルの章にあわせて段階的に移植していく説明とか書こうと思ったけど、
とりあえず現行に追い付くのが大変そうだから、ざっと作業してみてから考えてみますわ。
やってみた感触として、C++とDXライブラリをC#とXNAに持っていくのは基本部分はかなり楽。
>ベタ移植だから素材丸々使ってるのもある それは許可があっても不味いんじゃね 他人が見たら同一人物か関係者に見える
自分から徐々に離れていく敵ってどう実装すりゃいいんだ? 近づくのならsin、cos、atan2でどうにかできるけど
>>483 近づくのができるなら、それを逆に使えば離れて行くだろう。
前提が説明不足すぎるw 近づくだけなら三角関数も別に必要ないw
sin cos でもとめたやつをプラスマイナス逆にすりゃいいんじゃ……。
よいのじゃ
超魔界村の赤いやつを思い出すと。 if(状態フリー && X軸上にプレイヤーの攻撃がある) { 状態=回避中; } 回避中ならば、Y軸方向へ高速に移動する; ちょっと違うけどふと思い出してしまった
FlashでSTG作るの案外難しい C++でライブラリ使いながら作った方がましかも
FlashでSTGぐらい作れないようならC++でも厳しいだろ… 独自の違いがそんなにあるわけじゃなし、パフォーマンス出ないのが大変な程度だぞ どこで詰まってるんだよ
フラッシュとかなんかやめて さっさとVC++で作れよ
492 :
名前は開発中のものです。 :2009/02/22(日) 05:14:17 ID:OSGn1SXV
初STG制作中なんだけど、弾はいちいちnew deleteするより //弾を作りたくなったら待機スタックから取り出して表示リストに追加する bullet = bulletStack.pop(); bullet.init(); showList.add(bullet); //弾が消滅したときは表示リストから取り出して待機スタックに放り込んでおく bullet = showList.remove(なにか); bullet.kill(); bulletStack.push(bullet); こんな感じの方が早いんだけどいいんでしょうか。
マージソートの良くない実装の様な気がする。 データ列を二分割するたびにlistをいちいち用意しないように poolは一つだけで、門番keeperを用意すれば良いのでは無いか? 発射(弾を作りたくなった) pool[keeper++].init(); 消滅 // idxに消滅イベントがおきた弾のインデクスを入れる pool[idx]=pool[--keeper]; 表示 for(i=0;i<keeper;i++)draw(pool[i]); これはジョークに近いけど書いておく DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, keeper*modelhasVertex , 0, keeper * modelhasTriang );
>>493 > pool[idx]=pool[--keeper];
これって、いろいろまずくね?
消滅イベントが起きた弾のポインタはどこに行くの?メモリリーク?
何をやっているのか 何が問題なのか さっぱり分からん 結論を言うと まったく役にたたないグズの集まり
>>494 確かにコピーは、
外部でbulletへのポインタを持ってしまっている場合、
気を付けないとまずいかも
>消滅イベントが起きた弾のポインタはどこに行くの?メモリリーク?
poolって単なるbulletの配列だからメモリリークは起きないかと
>>496 と書いたけど、これはまた別の話だった、すまん
>>492 使用中:■■■■■■
空き :□□□□□□□□□□
とするより、
>>493 の
プール:■■■■■■□□□□□□□□□□
として、境目を意味するkeeperを用意する方が
理にかなってる
ただやってることは一緒だから問題はないと思うよ。
500 :
495 :2009/02/22(日) 16:16:07 ID:O+E+LHrc
すまん あまりにも原始的問題で意味がわからんかった
一意に求まらない。 弾が重なり続けるシーンではチラチラするはず ここでlistからremoveした意味が生きるね
>>502 だから俺は「使用中リストと空きリスト」の方が好き
504 :
名前は開発中のものです。 :2009/02/23(月) 03:03:50 ID:0xcHZAF5
弾に速度m_vと角度(0〜360)m_rを持っていて、角度0度時画面上方向きに発射、以降時計回りにしてる。 画面座標的な考え方をすると0度なら画面右方向で反時計回りが良い気がするんだけどみんなはどうしてる?
505 :
名前は開発中のものです。 :2009/02/23(月) 03:09:30 ID:0xcHZAF5
ごめん。 sin cos逆にしてた。 画面座標的には左方向で半時計じゃなくて時計回りだった。
506 :
名前は開発中のものです。 :2009/02/23(月) 03:14:22 ID:0xcHZAF5
あーもうちがう。右向きで時計。 もうどうでもいいや。orz
聞いたところでどうでもよい話だなw 俺は右が16384
>>504 極座標をどうするかってこと?
x軸が右向き、y軸が下向きの環境なら、0度は画面右向き、角度の正方向は時計回り、が自然かと
答えの出ている話題にレスするとは、何たる愚かしさorz
おまえら三角関数はもちろんテーブル実装だよな
俺はテーブル実装してる。 昔の人間だし。
全然関係ない話になるけど。 自機の移動が八方向の場合、斜め移動の速度は 縦横と同じスピードの場合と √縦^2+横^2 の場合とどっちが一般的なシューティングの仕様なんですかね?
縦横と同じスピードにすると遅く感じるから、普通に縦横の合成分斜めるのが多い となんかの書物に書いてあったな
>>510 過去スレでテーブル実装は
コンパイラのビルトイン関数であるsin/cosに劣るという話があったお。
(gccはデフォルトで、VSなら#pragma intrinsic で宣言することによってビルトイン関数が有効になるらしい)
>>513 縦シューは同じスピード、横シューは√2倍速い
が多い感じ
ギミック系は四角形な移動 弾幕避けゲーは円形な移動 なイメージ
x += √2 y += √2 にすりゃいいだけの話じゃね?
右 x+=2 下 y+=2
正確にベクトル合わせなくても、斜めのときに若干移動するピクセルを減らせば良いんじゃ
>>521 整数座標系ならそうなるな
C++のコンパイラも無いくらい昔のゲームでもあった
『ヒント)画面端に向かって斜めに入力すると若干ゆっくり移動できます』
を自分のゲームのマニュアルにも書きたいw
>>522 こ、こ、これは
ゆ っ く り 移 動 し て い っ て ね ! ! !
ジェネレーションギャップを感じる ニコ厨が叩かれるのがよくわかります ダライアス外伝のCuriosity chandelierというボスの 自機狙い高速レーザーが、画面外への斜め入力だと切り返し無しでよけられる という隠し攻略方法があった
>>525 濃い弾幕を避けるときに「超低速移動で・・・」とか今でも見かけるし、一般的だと思う
プレイヤーの好き嫌いもいろいろなんだし、自分の好みで実装すればいいと思うよ
おまえらの方がつまらんよ いつの時代の話だ 年寄りはくるなアホ
>>526 >プレイヤーの好き嫌いもいろいろなんだし、
作る側の好き嫌いも色々ですよ
低速ボタンよりも壁ズリ低速の方が発見時の感動が増すのを、自分の経験から期待したり
トレジャー系が好きな人は、絶対チョン押し時は低速を欠かさないだろう
>>529 それは当然とした上での記述
個人的には8方向の速度は一定にするのが好き
ちなみに、「超低速移動」は低速ボタン+壁ズリのつもりで書いたから同じことだよ
ok ok
低速移動に超ついてるだけだし 意味の想像はつく
そんなことよりアヘン吸わないか 天国へいけるぞ?
なんかのびてると思ったらいつもの流れか
少し上に「まあ、好きにやればいいと思うよ」のガイキチが沸いて、 「自分の好みで実装」とか書ける神経が分からん
538 :
名前は開発中のものです。 :2009/02/24(火) 23:41:01 ID:1852j36l
そんなことより座標について教えて。 画面的な座標とステージ全体の座標。 敵の出現位置はどっちでどんな風に制御するの?
強制スクロール型2DSTGなら基本的には画面の座標で管理するのが一般的では 敵弾の動きは基本的に強制スクロールに対してはベクトル干渉しないでしょ 逆に任意スクロールは相対座標で持ってる場合が多いんじゃない
540 :
539 :2009/02/25(水) 01:54:22 ID:VbTnmVk0
すまん酔いが醒めてきたら539は勘違いエスパーすぎたことがわかったw 忘れてくれw
yahoo からメールが届いたが 「あんたのスキルを見せてくれ」と言ったら --------------------------------------------------------------- これまで、ゲームを作るためにグラフィッカーとして参加していたので お見せできる個人的な作品はありません。 製作環境やスキル的なものはドット・2DCG・3DCG等、グラフィック全般です。 デザイン的なものは、それぞれなので話しあって希望にそうようにしてます。 今のところ金銭的なものは考えてません。無償です。 新しい企画とは楽しみです。どんな企画なんでしょう。 という感じです。お役にたてそうでしょうか? --------------------------------------------------------------- スパイ?
うさんくさいなwwwww
>>541 ヒント) ID:ANDW2c8N≒ID:H1s1N2Tx
H1s1N2Txはかなりゆとりっぽいので違うと思うが
>>542 なにそれ。
雇ってくれって言ってきたのかな。
グラフィッカーならそれこそスキル見せる事くらいできるだろうに。
スキル見せもせずにお役に立てそうも何もないわな……。
542はなんかの話の続きなのか? ちと意味が判らん
549 :
542 :2009/02/25(水) 15:41:59 ID:TwM8Bcza
ネカフェからカキコ 「意味がわかりません」と返事したら どこが意味がわからないのでしょうか? と返ってきた 頭いってる?てゆうかあゃしぃ?
自分の実力を実証する方法が実際に作業する以外思いつかない時点で かなり馬鹿なんで、今の時点でも事細かに並べ立てないと言いたいことを理解できないだろうし、 それと今後を考えるともう完璧にそいつの相手は適当に切り上げるべきだろう
なんの話だ?よそでやれ
>>456-457 以外あり得んだろ
当の本人にとっては超面白い話なんだよ
ゴミが紹介された経緯とかも、ゴミ同士仲良くすると思われたんだな
char *p = malloc(sizeof(char) * 1024); p = "xxxxxx", 3[p] = '\%', 4[p] = 'n'; printf("%s%s%s", p);
>>553 で、他人をゴミ呼ばわりするには
相当の作品をお持ちのようで
ぜひ公開していただきたいものですが・・・
無理ですか
わかります
アホだ 図星かよww ちゃんと現実と向き合って、自分が切られないようがんばれよw
無理なんだなw
煽る暇はおありなのですねw
趣味はニートいじめですw
../ ⌒\ (^ω^ ) 画企マロア画企マロア画企マロア画企マロア画企マロ 画企マロア画企マロア画企マロア画企マロア画企マロ ../⌒ヽ /⌒ヽ ( ^ω^) ( ^ω^) アロマ企画アロマ企画アロマ企画アロマ企画アロマ企画 アロマ企画アロマ企画アロマ企画アロマ企画アロマ企画 ../ ⌒\ (^ω^ ) 画企マロア画企マロア画企マロア画企マロア画企マロ ../ ⌒\ 画企マロア画企マロア画企マロア画企マロア画企マロ (^ω^ )
>561 なんでだろう…水平のはずなのに ドンキーコングみたいに斜めに傾いて見える。
>>561 おれも斜めに見える。
煽りのくせにいいスキルをもってるな。。
そんな使い古されたコピペに感動するレスしてどうする
>>450 亀だけど
E構造体の宣言には”}”の後にセミコロンをつける
orz
誰か矩形と点の衝突判定の方法を教えてくださいな(C++)
>>568 クラスもな
>>569 点が矩形の縦と横の範囲内なら衝突
「点」じゃなくて「円」だったらちょっと変わる
>>570 説明不足だった
「回転した矩形と点」だった
円と回転した矩形の判定ってスパッとできるものなの?
>>571 点と2つの線分として判定するとかどう?内積。
スパッとやる方法は思いつかない。
>>571 回転した矩形をもとにもどして、もどしたぶんだけ点を移動させるってのがあるらしい
◆
・
■
..・
こんなかんじ
>>572 やっぱり3回くらい判定いるよね
内積…とか数学チックな単語が出てくると脳がとろけだすんだがC++で回転矩形と点の衝突判定はどんな感じに書けばいいかを知りたい…
引数は矩形の4点の角のxy座標と点のxy座標
>>573 その発想はなかった
俺の作った「角度と距離を渡すと座標を返す関数」が役に立ちそうだ
ちょっと考えてみよう
>>576 その回転行列?っぽい方法でなら実装できそうだ
がんばってみる
>>577 あ、もしかしてまだ習ってない年齢とか?
そしたら言い方が悪かった
「回転行列」とか「一次変換」とか。三角関数が分かれば理解できると思う。
>>578 いや…なんというか…俺の通ってた高校がちょっとアレなとこでな…
高2くらいの時に三角関数の基礎は習ったっぽいんだがそのあと二次関数と三角関数の基礎を往復してたんだ…
一応sinとかついてる関数の使い方やラジアンうんたらは自力で勉強してそこはかとなく理解した
んで今作ってるシューティングにどうしても矩形の判定を使うシーンが出て来て/(^o^)\
ググってみて回転行列はよくわからんかったがとりあえず俺の作った「点pと点qの座標を渡すとp→qのラジアンを返す関数」を使えば何とかなりそうだ
>>579 自力でできてるならなんとかなるじゃん。頑張ってね。
>>580 (・∀・)b
ID:TEDvPeCPも超ありがとう
絵を見ながら考えてみた。三角関数使わなくても 直線と点の距離で判定することも可能 レーザの直線をL、判定する座標をPとした場合、 直線Lに直交し座標Pを通る直線L'を求め、 直線Lと直線L'の交点と、座標Pの距離を求める。
画像だけなんでしょ?
585 :
582 :2009/03/04(水) 06:11:33 ID:1TDttkKc
電話から失礼(・∀・)
>>583 なんか難しそうだな…
家帰ったら考えてみる
>>584 青◇は画像、赤◇は当たり判定、白◇と白○は回転したレーザーと自機の当たり判定を関数で表示させてる(・∀・)ちゃんと当たり判定あるぜ
レーザーを直線だとすると中学で習う y = ax + b の公式が使えるんじゃない。 接触したかどうかは目標の座標がこの公式に当てはまるかどうかで判定できないかな。 もっとも誤差をどうするかっつ問題もあるが。
画像キャッシュにおっぱいなメイドが残っててちょっとびっくりした
管理の機能ってなに?と聞いたら まあ、全部クリックでジャンプ機能なんだが。 くわしくは、「ファセット分類」でググれ。 と友人から回答 こんな口の利き方のやつのために誰がツール作るかって感じだね アイマスヲタ( ゚Д゚)<氏ね! 中野区から杉並区に引越し? キモさがさらに増すねw糞 もう30代 市ねよとしか
その友人とやらが見たら一発で特定される情報満載だがわざとか。
NGIDにレスしない 「内積」が地雷だったらしい ごめんね
アホだから分からんよ
>>587 数学的にはそれでもおk
点の座標を任意の曲線に代入したとき、解となるか
でもコーディングのしやすさとかから結局内積か一次変換に辿り着く
594 :
582 :2009/03/04(水) 17:09:34 ID:YGcqHfCc
な、内積…?に…日本語で…
内積って日本語じゃなかったのか
ちなみに
>>583 は単なる外積
>>596 「点と直線」ならそれでおk
「点と線分」だったら長さの制限も必要
>>597 「点と線分」だからこうやって逃げてる
0≦|a|cosθ≦|b|
ごめん。 ウチは2次の外積って使ったこと無い。
外積だと線分を定義出来るの?
599 :
582 :2009/03/04(水) 17:47:15 ID:YGcqHfCc
sinとかそーゆーのはCの関数に丸投げしてるからよくわからんのだ… 正直三角関数も三平方の定理?くらいしかよくわからんww けどゲーム動く!ふしぎ!!^p^
601 :
582 :2009/03/04(水) 17:50:58 ID:YGcqHfCc
すごいね 何がすごいって その昔ゲームプログラムの雑誌投稿とかしてた小中学生は 塾や独学で高校レベル大学レベルの数学を身に着けていたのに 今はそういう努力をしなくてもゲームが作れることを実証してしまっているという事実が
少しぐらいは勉強汁
>>598 それでおk
若しくは、端点2つから角度判定するとかもあり
どっちが高速かは知らんが
そして
>>602 に全力で同意
知らないのは罪ではないが、知ろうともしないのは大罪。
2次元の外積ってなんだったんだ?
>>602 どうせ応用利かないし 動くものをうpしないし 口だけだし
ただの駄スレ
うpしたのは去年9月が最後だったかな…
またキチガイが沸いてるな
610 :
名前は開発中のものです。 :2009/03/05(木) 00:48:55 ID:d60hqFFF
DirectXを直に叩いて2DSTG作ってる人に質問。 2DSTGだと長方形描画がメインになることが多いけど、頂点バッファって使ってる? 四角を書くだけならDrawPrimitiveUPでもそんなにデータ転送発生しないし、 そんなにデメリットないのかなぁと。
612 :
583 :2009/03/05(木) 02:17:45 ID:IWxpnIkp
>>582 中学校でならった公式が役にたてる日がくるなんてなー
とか思いながら書き込んだんだ。直線の傾きを求める方法の方が
良いからとかいう思いはなかった。余計な一言だったらごめん。
回転前の座標に変換してから判定する方法で動いているのだから
そのやり方で良いとおもいます。
あと
>>602 勉強しなくても良いと言うわけでなないけど、数学を頑張らなくても
ゲームを作れるライブラリがあって、それが目的に合ったものなら
使うべきじゃね?
プログラミングのコツは、いかに楽をするかだと思う。
軽く皮肉ってるようには取れるな
皮肉られるのは当然だろwww
自嘲も含まれてる気がするな。 まぁいいじゃん。どうでも。
でも三角関数くらいできてほしい
レスが進んでタイミングずれてるしorz
>>618 >ゲームを作れるライブラリがあって、それが目的に合ったものなら使うべきじゃね?
俺はこの発言を受けたまでだが。
>>620 だから皮肉ってると思うならその内容は何だと思ってるんだよ
>>620 602はいわば「さびしい世の中になっちゃったね」と言ってて
612はそれに「そんな捨てたもんじゃないですよ」と言ってて
話は噛み合ってるんだから、613のレスはズレてる。
>612はそれに「そんな捨てたもんじゃないですよ」と言ってて 俺は「目的にあった便利なライブラリなら使うべきじゃない?」と言ってるように見えた。 前提から俺が間違ってたね。
お前らシューティングの話以外だと急に盛り上がるのな つまんねぇ言い合いしてねぇで技術的な話しろやアホども
ゲームできちゃったらインストーラー作りたいじゃん? あれってなんかライブラリかパッケージかなんかあんの?
フリーソフトでインストーラとか気持ち悪いよ・・・
フリーとか体験版でインストーラー使わないと始められないものは DLしてもゴミ箱行きだ
>>624 わかったよ。
Moveってひとくくりにしてるけど実際の所、関数をさらに細分化すると管理しやすいと思わん?
座標移動、オブジェクト(弾)の生成、消滅判定、衝突判定とか。
1、とりあえず全員動かす。
2、弾やザコを追加する。
3、画面外の敵や弾を消す。
4、衝突判定する。
どうだろう
>>629 むしろ移動とか(別の)オブジェクトの生成をどうやって集約してんだよ
普通に作ってりゃいくつかの関数に分かれるだろ
技術的な話したかったら話を広げる努力しろよwww 俺はしないけどwwww
>>630 俺に聞くなよ。そこら辺のMove、Drawに分けるべき、で解説が終わってるサイトに聞けよ。
>>633 おいおい、逆ギレか?ww
馬鹿め、自分の無能を呪えよアホww
>>629 で何が言いたいのか意味分からん
Moveってひとくくり?何の話?
各オブジェクトにとりあえずMoveとDraw作ってそこに適当に関数作ったりしながら処理を書いてくんじゃないの?
636 :
名前は開発中のものです。 :2009/03/05(木) 18:42:04 ID:1d/NzH52
>>635 ん、そうだよな。ただ自分の場合
Move()、Fire()、Exists()、Touch(オブジェクト a,オブジェクト b)、Draw()で決まりきって今の所問題もないからふと疑問に思って。
何が何だかワケワカメ
>>636 だからFire、Exist、Touch等はMove内の処理だろ?
各オブジェクトの移動と描画をMoveとDrawに分けてるんだから
細分化って何をどうしたいんだ?
おちつけ
640 :
名前は開発中のものです。 :2009/03/05(木) 19:57:43 ID:K8fBdWo9
俺はこんなの。 各自オブジェクトがスクリプトで行動を切り替えてる。 自殺もするのでオブジェクトを管理して回してる奴が生き死にを確認したりもしてる。 //インタプリタなスクリプト。Objectから呼んでActionを主に更新する。 class Script{ }; //MoveとかFireとかの基底のインタフェース class Action{ bool update(void);//処理が終了していたらtrueを返すとかそんなの }; //敵、自機、弾、その他の基底のインタフェース class Object{ protected: Script scr; Action act; public: void update(void);//この中でact.update()を処理したりScriptを呼んでactの切り替えをする。 void draw(void);//描く }; なんか面白い組み方があったら教えてほしい。 という技術の話題を振ってみる。
なぜか上げてた。特に意味はない。
>>638 なんだ、その。いや、ゲーム全体からみりゃそうなんだが。
if ポーズ中じゃないなら
{
forループ
オブジェクト配列[i].Move()
forループ
オブジェクト配列[i].Fire()
forループ
forループ
Touch(オブジェクト配列[i],オブジェクト配列[j])
}
forループ
オブジェクト配列[i].Draw()
とかやんね?
>>640 今の所、難易度別の行動設定とか用意してないんで、オブジェクトの行動は敵の種類ごとにべた書きだなー。
>>640 なんかJAVA JAVAっぽいね
それはおいといて
これの Object 派生させるの?
>>640 と
>>641 同じ人なの?
>>643 この作りでObjectを派生させたらナンセンスだと思う。
オブジェクト配列を派生するなら判る。
派生とかクラス設計の人は
>オブジェクト配列[i].Fire()
>Touch(オブジェクト配列[i],オブジェクト配列[j])
などをやらない
「オブジェクト配列に、Fireを行わないオブジェクトや、
Touchが不用なオブジェクトを入れられ無いっておかしくね?」
…と思うんじゃね?
645 :
名前は開発中のものです。 :2009/03/05(木) 20:25:20 ID:K8fBdWo9
>>643 ほとんどのクラスをスマートポインタラッパにしてjavaのようにC++で書いてる。
で、
class Bullet : public Object
class Enemy : public Bullet
とかしてる。
MyShipをどこから派生させると美しいかは毎回悩む。
646 :
372 :2009/03/05(木) 20:27:09 ID:g++EGVdD
647 :
名前は開発中のものです。 :2009/03/05(木) 20:41:04 ID:K8fBdWo9
>>644 んにゃ別。
>Objectを派生させたらナンセンスだと思う。
マジカー。Fire()で実装が空とかなんだが。実際Fireしてもほんとに撃つかどうかはオブジェクト依存だしいいかなーと思ってる。
ってかFire()という名前が問題か。
Touchのほうは実際は、自機リスト、敵機リスト、背景オブジェリスト、前景オブジェリスト、などから
2つ選んでハードコーディングする。だからまぁ自機_敵機、敵機_自機弾_自機_敵弾の3つぐらいTouchを利用したループがある。
自分で言っててあんまりきれいな実装じゃないかも。
649 :
名前は開発中のものです。 :2009/03/05(木) 20:48:41 ID:JU51dqJC
>>645 継承がis aの関係じゃない時点で美しくない
富豪的にはありなんだろうけど…。 今俺本当に日本語書けてる? 以下、俺の思い浮かべる評判の悪いクラス設計の例。 「is a」ぐらいは守ってる? vector<Obj *> ObjArray; class Obj { virtual void Update() { Move(); } virtual void Move(){/*実装*/} }; class EnemyObj :Obj { virtual void Fire(){/*実装*/} void Update() { Move(); Fire(); } }; class EnemyA :EnemyObj {void Fire(){/*ユニークな実装*/} void Move(){/*ユニークな実装*/}}; class Barrier :Obj { bool IsTouch(Obj tgt){/*実装*/} void Update() { Move(); foreach(vector<Obj *>,tgt,ObjArray)IsTouch(Obj tgt);//foreachの構文が今ググったら違った!? } };
>>645 class Enemy : public Bullet
だと Bullet 属性も継承することになるんだが・・・
Bulletクラスに破裂するという操作があると
Enemyにも引き継がれるが
それだったら Object に破裂操作を最初っから純仮想関数で宣言しておき
class Bullet : public Object;
class Enemy : public Object;
の方が自然じゃない?
とりあえず >> 372 のソースが見たいものだが
オブジェクト=メモリのかたまりと考えてるのか?
652 :
名前は開発中のものです。 :2009/03/05(木) 20:55:41 ID:K8fBdWo9
>>649 640のObjectは例えで、ScriptとかActionはもう少し上で持ってる。
updateだけを持ってるクラスがだいたいの基底。
で、Enemyは高級なBullet的な定義をするんだけど
(BulletもAbstractBulletみたいなのを作って細分化した方がいいとか悩む)
MyShipはどこがいいのかに悩んでる。
どうだろうか?
653 :
名前は開発中のものです。 :2009/03/05(木) 21:04:28 ID:K8fBdWo9
>>651 Bulletの破裂はEnemyの死。
Bulletだって弾を撃つことはある。
そんな感じでBulletに出来てEnemyに出来ないことがあまり考えつかないから class Enemy : public Bullet にしてる。
あと、EnemyAとかEnemyBってのは作ってなくて、全部スクリプトで決めてる。
Enemy img="res/enemy/zako1.bmp" x="100" y="100"
Move r="90" v="100"
Sleep sec="60"
みたいなの。
>>650 それは Prototype パターンだね
ライフゲームの1セルを1オブジェクトにした実装はしない
と前書いた時通じたかと思った…
>>651 >とりあえず >> 372 のソースが見たいものだが
>オブジェクト=メモリのかたまりと考えてるのか?
DirectXの都合で、同じ描画のオブジェクトを集めたい
言語が痛いので、模擬コードです
class DrawAbleObj
{
描画位置配列;
void Draw(){/*SetStreamSource()1回に、SetMatrix()とDrawPrimitive()を配列要素数回 */}
virtual update()
add(座標)…など
}
class bullet :
class enemy :
class enemy_bullet :
/*初期化*/
DrawAbleObj配列.add(new bullet())
DrawAbleObj配列.add(new enemy())
DrawAbleObj配列.add(new enemy_bullet())
/*メインループ内のDraw*/
foreach(型,i,DrawAbleObj配列)
i.Draw();
>>652 MyShipに継承させたい物はあんまりないな
グローバルまで行かなくても、参照されて困らない所に在ればよくね?
>>653 その構造だと Enemy インスタンスが消滅すると
Bullet インスタンスも消えてしまうけど
Bullet インスタンスを残しておきたい場合などの表現が不可能になる
Enemy *enemy = new Enemy
enemy->Fire(); // ここでbulletが複数作られる
enemy->End(); // 敵の消滅
delete enemey; // ここでbulletも全部消える
継承という概念が分かってない
どこかで不具合がでてくる
設計で悩んでる
658 :
名前は開発中のものです。 :2009/03/05(木) 21:47:03 ID:K8fBdWo9
>>656 Enemyが死んでもBulletは死なないように作ってる。
なんでBulletが消えるのか分からない。
EnemyのFireをBullet管理者が受け取ってBulletが生成されてるだけで、Enemyとの関連はない。
一体何の話かわからない俺はベターC
>>654 いちお、生存期間中にCloneを作る事はないよ
自称Strategyのつもり、Update()に多態性を持たせたい
しかし、生存期間中にEnemyAがEnemyBにキャストされるような事はないので、自称
>>657 thx
#include <stdio.h> class Object { protected: double x; public: virtual void Fire() = 0; }; class Bullet : public Object { public: virtual void Fire(); }; class Enemy : public Bullet { public: virtual void Fire(); }; //---------------------- // 永遠に呼ばれない void Bullet::Fire() { x = 2.0; printf( "%f\n", x ); } //----------------------
void Enemy::Fire() { x = 1.0; printf( "%f\n", x ); } void main() { Object *obj = new Enemy; obj->Fire(); delete obj; } となり無駄が生じる
>656こんな事言う人に問題ないと言われても安心できないと思うんだが というかID:/7Ei5x6Qがなにを言いたいのか分からない
664 :
名前は開発中のものです。 :2009/03/05(木) 22:06:05 ID:K8fBdWo9
>>661 BulletもEnemyもFireは持ってない。
BulletもEnemyも呼ばれるのはupdateとdrawだけ。
それぞれの行動はupdateの中でScriptが決めてActionに実体がある感じ。
class Fireはないけどあえて書くなら
class Fire : public Action
class Move : public Action
みたいになっている。
>>664 すまんね ちと混合していた
Fire() はないようだね
君は Composite パターン
問題ない
ただ、複雑になるのはある程度予測しといた方がいい
>>664 いや
class Enemy : public Bullet
ここが問題
それでいくなら Decorator パターン
class Decorator : public Object
class Bullet : public Decorator
class Enemy : public Decorator
class MyShip : public Decorator
ではどうかね?
>>663 >>656 のミスリードには気付いてたけど、僕がいう事じゃ無いし
後はみんなの好き嫌いをアンケート程度の気分で聞いておく
>>661 ぐらいだったら、僕は許すな
アンチパターンも許すけど、
>Draw(){/*SetStreamSource()1回に、SetMatrix()とDrawPrimitive()を配列要素数回 */}
は譲れないな
>>660 なるほど EnemyA, EnemyB に目がいっていた
君がしたいのは Iterator パターンでは?
//---------------------- // 永遠に呼ばれない void Bullet::Fire() { printf( "部長ぉぉぉぉぉぉぉ!!!\n" ); } //---------------------- とかしてもいいかな
//---------------------------------------------------------------------------- // 永遠に呼ばれない void Bullet::Fire() { MessageBox( HWND_DESKTOP, "返事がないようだ ただの屍のようだ", "error?", MB_OK ); or MessageBox( HWND_DESKTOP, "パターンが分からないようだ", "error?", MB_OK ); } //----------------------------------------------------------------------------
いまさらだけど、
>>656 の
>Enemy インスタンスが消滅すると
>Bullet インスタンスも消えてしまう
な に を い っ て い る ん だ ?
継承を理解してないな。
それはそうと個人的には class Bullet : public Enemy なんだけどな。 弾は特殊な敵って意味合いで。
>>671 ミスリードと言ってるだろ
反応ないから寝る
なんとなくメモリの動的確保をしたくない俺は ずらずらとスパゲティ書いてるw
うむ。まだデザパタがまだ生成パターンしか読み終わってないうちにはちと辛いな、デザタパで説明が完結されるとorz てかみんな柔軟だな。実際のコードを覗いてみたいぜ。・・・C++は多分読めないけど
675 :
名前は開発中のものです。 :2009/03/06(金) 00:03:12 ID:Eu3rRFpD
>>674 ID:/7Ei5x6Q の言ってることはあまり気にしない方がいいよ。
>>675 ID変えてからの反応ではもう誰も信頼せんよ
そんなに否定するなら代案だせよ
ID:K8fBdWo9「だれか〜このソースどうにかしてくれませんか〜?」
ID:/7Ei5x6Q「こういうのはどうかね?」
ID:K8fBdWo9「・・・」
この船は先に進むんですか?
どこをどう勘違いしたら
>>656 みたいな解釈になるんだ。
ていうか
>継承という概念が分かってない
ってのはID:/7Ei5x6Q 自身の話かな。
とりあえずC++のサイト回って勉強してみては?
679 :
名前は開発中のものです。 :2009/03/06(金) 12:07:53 ID:Eu3rRFpD
>>676 ID:K8fBdWo9が低レベルすぎて話にならない所をやんわり流してるんだろ。
680 :
名前は開発中のものです。 :2009/03/06(金) 12:11:05 ID:Eu3rRFpD
>>676 間違えた
ID:/7Ei5x6Qが低レベルすぎて話にならない所をやんわり流してるんだろ。
そうなのかい? 君のはデコレータパターンとコンポジットパターンの組み合わせだよ もしくはパターンに当てはめられるのが嫌だったのかな ごめんよ・・・
クラス?継承?new?知らんがな(´・ω・`) 構造体最強ヒャァハァァァァー
よう、俺。
>>682 その結論はオカシイ
このパターン厨の書いてることは、パターンの名前で
ググる事ができる奴が見たら赤面もんのことばかりだぞ…
>>674 の持ってる本がちょっと分厚過ぎるじゃないか?
GoFは、たった23個しか無くて判りやすい図が入ってる
…STG制作にはアンチパターン
>>655 が要る事もあるが、
発想の種子ぐらいにはなるんじゃない?
>>684 いや、俺はガチで会話についていけないだけだww
最近になってポインタの使い道がわかって喜んで関数作って動いてSUGEEEEEEEEってやってるレベルだ
独学マンセー
みんな いったい誰と戦っているんだ!?
ブルマは脱いだらアカンがな(`・ω・´)
このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談 失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。 もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを 晒してみたり、プロジェクトをはじめてみるなどもOK! 何でここ喧嘩と設計の話ばっかりなの? 実際に作ってる奴いるの?
これは自作自演でうpする前フリだな
690 :
685 :2009/03/06(金) 18:57:39 ID:E7ymH2OK
作ってるぜっ(・∀・)半年前に一度うpしてるぜ
頑張ってクラスとか継承とか使ってみるものの、こんがらがって死ぬ 設計がいかに大事かがセッ分かった気がする
俺はObject クラス作って基本、自機や敵、それらの弾、爆発、背景等はみんなObjectから派生させて作ってる 敵から出る弾は当たり判定チェックの関係上、壊せる弾は敵と同じ扱い(Enemy派生)、壊せん奴は別扱い ただ、getxとか使うとイメージ的に負荷かかりそうで座標とかpublicにしてるためStructチックになってしまってるorz 以前は強引にfriend使ってたw まあとりあえず完成させればいいよな、どこかは言わんが以前別スレにうpしてる
>>692 当たり判定は どこのクラスでやってる?
作ってるぜ、劣化サイヴァリアみたいなの。ここのレスはレベルが高くて理解出来ないけど。
この流れなら言える!! ちょい前までゲーム制作ブログのオマケでSTGも挙げてたけど、全部消してバックれたぜw …移転先や安否を気遣うメールは一通たりとも来なかったぜ… orz きっと、色々内情を察してくれたんだ、多分、きっと多分
当たり判定はゲーム本体のクラスでやる予定(以前はグローバル関数でやってた)
>>696 バックれたら 移転先もわからんだろうw
>>697 ミジンコがうじ虫になるくらいの進化じゃないか!
マジレスするならグローバル関数でやるのと大差ないぞ、それ。
JAVAで作ってるのは俺くらいか…… つい最近調べてみたら、なんか東方遊夜雀なんてもんが開発されてたりするのね。 ハードル高いwwww
駄目なのか 他にも敵クラス辺りに当たり判定するメンバ関数作ることも考えてるけど まあ呼び出すところは変わらんけど
普通はbulletクラスかplayerクラスにisHit関数を付けるもんだろう。 だってそうしないと弾固有の当たり判定とかとれないじゃん。
>>697 俺の場合、
class CollisionListener {
public:
int getX();
int getY();
int getWidth();
int getHeight();
void touched(CollisionListener* obj) // objは衝突相手
};
class Player : public CollisionListener;
class Bullet : public CollisionListener;
class Enemy : public CollisionListener;
/* 衝突判定のカテゴリを分類する。(例:プレイヤなら敵、敵弾、地面と衝突。敵弾ならプレイヤ、地面と衝突) */
enum CollisionGroup { Player, PlayerBullet, Enemy, EnemyBullet, Ground };
/* 衝突検知を管理するクラス(ほんとは○○マネージャとかいう名前はダメなんだとかうんたらかんたら……) */
class CollisionManager {
public:
void addListener( CollisionGroup type, CollisionListener* listener ); // リスナ(プレイヤ、敵とか)を登録する
void removeListener( CollisionGroup type, CollisionListener* listener ); // 登録を抹消する
void detect(); // 登録されたリスナの衝突を検知し、衝突したならリスナのtouchedメソッドを呼び出す
};
ぶっちゃけ関連ページが全部消えててメアドだけ生きてるとは普通思わないもんな
>>701 これくらいなら「ダメ出し」があったとしても、クラス設計の善し悪しの話で、
>>702 みたいなのをifで逃がすことになると、クラス設計が下手だと言われる。
その関数の中に、switchやifが沢山含まれるなら、設計を変える事で
良くなる『可能性』があるし、将来の拡張でswitchやifを加えないで済む『可能性』もある
アドホックなswitchやifも許し…
…今クラス設計の話をしてるんだから、参考にすべきだ(゚Д゚)ハッ!
それはそうとおまえらに質問。 クラス名の相談なんだが、敵の弾クラスはbulletでいいと思うんだが、自分の発射した弾はなんて名前にするのがベスト? bulletクラスを継承してないからplayerBulletって名前にするのも変だし……
shot に一票
>>705 EnemyBullet,PlayerBullet
って明記してしまえば後で見ても間違わない気がする。
気がするだけかもしれない。
Object -> Enemy -> EnemyBullet
├ -> Player
└ -> PlayerBullet
みたくなるだろうけど、それでよければ。
>>706 せんきゅー。shotって命名しておいたぜ!
それと、携帯アプリのSTGだとどういうインターフェイスで弾撃たせるのが楽かな?
自動で撃ってしまうとそれはそれで戦略性が低くなってしまいそうなのだが。
>>707 は矢印の方向に継承するってことでヨロ。
クラス図としてみたら逆になっちゃうけど突っ込んじゃらめぇ
プレイヤーの弾はChinkoにして可読性を著しく低下させてる
>>710 おま…それアンタッチャブルじゃないか
触れないです><
712 :
名前は開発中のものです。 :2009/03/07(土) 14:49:37 ID:oFkRuMFA
class OchinpoMilkとかやるだろ。 あとで後悔するんだけど。
確かにシューティングゲームだな
class AbstractManko { private: virtual long ChinkoPlease(size_t) = 0; }; //○月×日作成: すべてのクラスはこれを継承してねw名前変えないでねw
すべての存在はAbstractなMankoから生まれる……
なるほど。playerはmotherShipクラスから生成されて、enemyはalienMotherクラスから生成されるんだな……
ChinkoPlease(size_t) がprivate:って、 ありえねぇーことを宣言するなw。
718 :
名前は開発中のものです。 :2009/03/08(日) 16:29:42 ID:3kCVX1OJ
STGの話題じゃないけど #include <iostream> class A{ private: virtual void aa(void) = 0; }; class B : public A{ public: void aa(void){} }; int main(void){ B b; b.aa(); std::cout << "hello" << std::endl; char c; std::cin >> c; return 0; }; が通るのは何で?
何が疑問なのかわからないが、、、、virtual をオーバーライドした関数はvirtual が無くてもvirtual
タイプセーフが無いC++的にはこうだよ。 タイプセーフな他の言語から見るととおかしいのだろうけど #include <iostream> class A{ private: ? ? ? ? virtual void aa(void) = 0; public: ? ? ? ? void update(void){ ? ? ? ? ? ? ? ? std::cout << "update" << std::endl; ? ? ? ? ? ? ? ? aa(); ? ? ? ? }; }; class B : public A{ public: ? ? ? ? void aa(void){ ? ? ? ? std::cout << "aa() of B called." << std::endl;} }; int main(void){ ? ? ? ? B b; ? ? ? ? A *a; ? ? ? ? a = &b; ? ? ? ? //a->aa(); エラー ? ? ? ? a->update(); ? ? ? ? ? ? ? ? return 0; }
???何で通らないと思うのか? class A の private: virtual void aa(void) = 0; は、どこでも使ってないから捨てられるだろ? ちなみに *aa=NULL; って意味だから。aa(); とかやって実行するのは危険だね。 Windows なら特権エラー(不正な処理を実行しましたダイアログ)かな? class B の public: void aa(void){} は、main 始まったらすぐ実行されるね。ここは、 public: void aa(void){std::cout << "ot"; } とでもしとけば?
>>721 *aa=NULL; はまちがい。aa=NULL;
723 :
名前は開発中のものです。 :2009/03/08(日) 17:01:45 ID:3kCVX1OJ
C++はあまりわかんないです。 不思議だと思ったのは class Aのprivateな抽象関数aaを Aを継承したclass Bでpublicに実体を作っているところです。
「privateな抽象関数aa」は、class Bへ継承させても、継承されてないよ。だってprivateだもん。
725 :
名前は開発中のものです。 :2009/03/08(日) 17:09:35 ID:3kCVX1OJ
>>724 そう思います。
でもこれが通らないんです。
#include <iostream>
class A{
private:
virtual void aa(void) = 0;
};
class B : public A{
public:
//void aa(void){}
};
int main(void){
B b;
//b.aa();
std::cout << "hello" << std::endl;
char c;
std::cin >> c;
return 0;
};
>>724 ごめん間違えた。
「privateな抽象関数aa」は、class Bへ継承されているが class Bのpublic aa();の方が優先だから、
class Bのpublic aa();にしかアクセス出来ない。
ここでclass A の privateやvirtualなbb();とかあれば、継承されるから、
int main(void){
B b;
b.bb();
とかで使えると思う。
729 :
名前は開発中のものです。 :2009/03/08(日) 17:18:35 ID:3kCVX1OJ
抽象関数を持つclass Aを継承したclassは、 class Aの抽象関数を実体化しなくてはいけない。 と思っていたのです。 そうではないのですね。 javaから入ったので不思議でした。
733 :
名前は開発中のものです。 :2009/03/08(日) 17:31:31 ID:3kCVX1OJ
privateな抽象関数を持つclass Aを継承したclass Bが実体化出来るのが不思議。 同class Aの抽象関数aaと同じ名前のpublicな関数をclass Bに作ったことで動く事が不思議。 同class Aの抽象関数aaを継承したclass Bでで作らないと実体化できない事が不思議。 なんかそんな感じです。 すみません。
プログラム板の初心者C++スレでやろうぜ・・・
Javaは違うのかもしれんがC++はそういう仕様なんでしょ メンバ変数も違うアクセス修飾詞でオーバーライドできるし 抽象関数を持ったクラスはそれを派生させて実装したクラスでないと実体化できんのはJavaでも同じでしょ
736 :
名前は開発中のものです。 :2009/03/09(月) 00:20:55 ID:vdPDd+Q/
javaって派生先の仮想関数のアクセス修飾を変えれなかったんじゃなかったっけ?
737 :
名前は開発中のものです。 :2009/03/09(月) 00:54:10 ID:4v1RPow6
オブジェクト指向も度がすぎると、使われもしないゴミクラスが 沢山残る罠。
738 :
名前は開発中のものです。 :2009/03/09(月) 01:02:27 ID:4v1RPow6
↑ただ単に今一、配慮を怠ったクラスを書くと そういう事になると言うのをいいたかっただけ。
継承が多くても、STG中にキャストする様なオブジェクトとかあんまり無いと思うけどな オブジェクト指向とか言うほど大げさなモノでも無い 抽象基底クラスを作り、それの配列かコンテナに継承した子のオブジェクトをいれる 遷移するモノならインターフェースを作り、継承した状態のオブジェクトを保存しておくだろ あんまり思い浮かばない。 楽につくる事が優先だ
敵とか敵弾とか継承してもどうせ分けて扱っちゃうし・・・
け、継承って何だ、クラスって何だ 敵の構造体とか、弾の構造体でいいだろっ 動的確保?知らんがな(´・ω・`)
いちいち動的確保なんかしてたら弾幕の生成でめちゃくちゃ処理落ちする 俺は最初に作っとくの
ボス戦とかどうしてるんだ。 予め発射される弾の数を決めてるってことか?
一万発分くらい確保しとけばおkkkkkk
>>743 一体何万発確保するつもり?
決めるといっても、せいぜい2〜3000発程度。これ以上多いとメモリ云々以前にゲームとして無理。
いや、そういう意味じゃない。 ボス戦だと、ボス倒すまで延々と戦闘が続く訳じゃん。 合計弾発射数は、実質無限な訳じゃん? ということは、どっかで弾リストのクリーンナップでもしてるんだろ? どうやって要らない弾とそうでないのとか分けてるのかと。
それとさ、普通はbullet[]にしろリストにしろ、実際に格納されてるのはbulletクラスを継承した StreightBulletクラスとかAccelBulletとかcurveBulletな訳じゃん。 newしないでどうやって使いまわすの?
>StreightBulletクラスとかAccelBulletとかcurveBulletな訳じゃん。 こんなことしてねーもんwww
画面外に出たりどっかにぶつかったら未使用状態に戻せばいいだけ クラスだけで動作変えてるならそりゃnew必要でしょう
ちなみにこれ >どうやって要らない弾とそうでないのとか分けてるのかと。 リスト2つ作ればいいじゃん
クラスだけで動作変えるとかないわ 本人は継承を有効活用してるつもりだろうが、無駄でしかない
>>746 俺リストよくわからん
弾にフラグもたせてて設置されているなら1、設置されていないなら0
置かれた順にソートもしてるぞ。設置する時に空いてる弾拾ってきて構造体の仮想連結の最後にくっつけてフラグON
弾が削除される瞬間に前後の番号の弾連結してから弾の構造体のメンバ初期化してフラグをOFF
>>750 >>492 (というかそこからの一連の流れ)みたいな感じ?
あと動的確保するだけでそんな処理落ちする?
クラスだけで動作変えるってのがよく分からない
あとそうじゃなかったらどう動作を変えるの?
えー、みんな曲射弾とか加速/減速弾とか誘導弾とか重力弾とか拡散/炸裂弾とか別々のクラスにしてないのー? 別々のクラスにしておけば拡張が簡単だよ?
>>747 うん、newしないと継承が使えなくなって不便な面はある。
でも弾が多くなってくると、それを差し引いてもnewしない事によるパフォーマンス的なメリットはあるよ。実際スペックしょぼいノートPCで試したら30fpsが60fpsになったし。
>>753 あぁ、ちょうどこんな感じ、STLは使ってないけど
処理落ちは量によってはする。弾数の多いn-way弾とか、出現と消失が頻繁なときとか。
最近のPCじゃ気にならないだろう。それだけに、こんなに話題が続くとは思ってなかったがw
>あとそうじゃなかったらどう動作を変えるの?
動作の部分だけ別に作る
なるほど。弾種類からswitchしてprivate staticメソッドを呼ぶのかw なんかそれも変な気もするが。
>>754 弾の行動をひたすら書いてるソースファイルがある
特にキモイ動きさせたくなければ無指示でも動くし指示しまくれば弾が増えたりグラフィック変わったりどんな奇天烈な動作もお手の物
>>757 動作分岐でswitchしか知らないのか
弾1発ごとにnewしてdeleteしてたらメモリに断片できまくらない?
total memoryが1MB位しか無いenvironmentなら話はotherだが、 今時そんなところを気にしても仕方ないぞ。 心配ならboost::pool使っとけ。 booooostが気に食わないなら、弾の継承クラスを全て包含した共用体で配列を作って placement newすればいい。
>>753 なるほどね、大体把握(したと思うw)
>動作の部分だけ別に作る
これってどんな感じ?
俺のイメージ的には
bullet{
bulletがもってるステータス(位置とか)
moveA(){ /* 動作A */};
moveB(){ /* 動作B */};
}
こんな感じなんだけど
それとももっと手続き的?な感じなのかな
関数ポインタ持たせてもいいけど、動きはスクリプトにして実行時に読ませることもあるしなあ
>>763 弾に直接はもたせない。デリゲートする。
スクリプトはもう別の話だろう 設計自体が大きく変わる
>>765 言語にもよるだろうけどdelegate作るとnewと同様コストかかんない?
>>767 デリゲートっていうと大げさか。所詮ポインタ演算だし。関数ポインタとどっこい。
気に食わなきゃ
>>762 でもしてろってこった。でも「いちいちnew」は絶対にやだね。
1フレーム内で100も200もnewしなければいいだけの話で、 new/deleteをそこまで毛嫌いすることも無いと思うお。 ちなみに俺はnewしたものはdeleteせずにプールして使いまわしてる。 クラスごとにプールが出来てテラカオスw
>>766 そういう設計の話もしていいんじゃない?
というか参考にしたいから色々話をしててくれると助かる
>>768 うん、とりあえず「デリゲート」ってのを初めて知ったよw
簡単にググって調べただけだから全然理解できてないけど
オブジェクト指向版の関数ポインタみたいな感じかな?
>>763 の例でいくとbullet以外にmoveobjがあって
その中にメソッドmoveA、moveBがあるみたいな感じでおk?
思ったんだけど「STG」でまとめてるけど弾幕系なのか否かで最適な設計も変わってくるよな
俺はID:c/sep/SWに突っ込まれたから答えてただけ
>>770 まぁそんな感じ。汚いから多分もっとちゃんとした実装考えるけど。
>>770 スクリプトの解析は実行時にやるしか方法はないのか?
いつも思うんだけど、このスレでは一度newとdeleteを自分で定義する方法を 教えた方がいい希ガス。 newが重いなんてのは、newをオーバーライドできることを知らない奴の戯言だろう。
アブストラクト尺取りパターンっていうあれだな! ……すまん、それってjavaでもできるの?>newのオーバーライド
お前それただjava言いたいだけちゃうんかと
>>776 Javaはそもそも演算子オーバーライドをサポートしてないな。(文字列の+除く)
C#もnewはサポートしてないと思う。
ともかく。 いちいち弾丸を作成させる際にnewを使わないのは、ゲームにおける総使用メモリ量をむやみやたらと増やさないためだろ? だとすれば、bulletクラスの中に総ての弾丸の動作なりパラメータを突っ込むのも、ましてや弾丸ひとつひとつがスクリプト動作なんてのも、 決して奨められるべき軽量化の仕組みじゃないんじゃねえか。 まあ、弾丸の最大出現数くらいは制限をかけてしかるべきだと思うけども。
ID:c/sep/SWは
>>757 からちっとも成長がないな…
ひとつのパターンに凝り固まって他の可能性とその技術を考えられないんだな、 ある意味、全くの無知よりたちが悪い。
人それをバカの壁という
784 :
名前は開発中のものです。 :2009/03/09(月) 20:58:05 ID:xoToA8tC
何でもかんでも出来る1000byteくらいの弾クラスを10000発用意しておいてもメモリは10MBだろ。 PCで作ってる分には何ら問題ないじゃん。 newをゲーム中にしたくないのはコストがでかくてボトルネックになるからだ。 とマジレス。 自信ないけどマジレスになってるよね?
>>784 「1フレームあたりX回以上newすれば処理落ちが発生する」とかいう目安というか、カンみたいなものがあるなら良いんじゃね。
実際にnew/deleteがどれだけ重いのか評価する手法でもあればいいんだが。
newの実質的なコストって生成時にmallocを発行してる部分くらいじゃないの。 ま、デストラクタがあれば、そこも処理に影響するんだろうけど。
>>785 >実際にnew/deleteがどれだけ重いのか評価する手法
メモリ断片化とか色々あって、線形的には求まらない予感
エンドの環境依存も大きいし
俺が賭け事で弱いので、カンとかあんまり頼れない
実際にゲームを作ってみて重いと感じたら別の方法を模索すればいいだけの話だと思うんだがな。
やっぱ new にはコストかかるのか 俺はそうだと思っていったんある程度の量を最初に確保してから使い回そうと考えたこともあったな 結局面倒になって適宜 new にして使ってるけど まあ俺は激しい弾幕使ってないから大して困らないのだろうけど いったんある程度の量を最初に確保してから使い回す方法を取ってる本もあったな
メモリの断片化か・・・根深い問題だな。自由度を増やせば増やすほどに異常が増えていく。 ある程度複雑になると、突然例外大発生だもんな。どうにかならないものか。
性的確保&構造体リスト最強説 256本もリスト作ったから変なソートいらないZE☆
関数WinMainの中にすべてを詰め込んで、 「シングルトンって言うのかな、等身大の自分に合った小悪魔的デザインパターン☆」 とか言ってるやつってなんなの
名前聞けばいいだろ
タスクマネージャ使うと分かると思うけど、東方は普通に50MBとか食ってるぞ たぶん起動時にものすごい量の弾を確保してるんだと思う それにしても、あの化け物じみた描画速度はなんなんだ・・・・
構造体リストと普通のジェネリックなLinkedListってなんか違うのか? むしろ、リスト構造そのもののパフォーマンスでいえばArrayListの方が高い訳だし、構造体リストにこだわる必要は無いような。
newのコストもだけど、GCがある言語(C#,D言語等)ではGCが動くコストも馬鹿に出来ない。これはnewする瞬間じゃなくてゲーム中常にかかる恐れがあるから性質が悪い。
構造体リストに限定した話なんて誰もしていない件
>>795 まあ片手間とはいえ本職ゲームプログラマの作品だし・・・・・
ただ、いくら弾幕でも弾はせいぜい同時1000発ほど
容量を食ってるのはテクスチャとか音声だろう
DirectX本スレでも東方ネタで酷いコンニャク問答があったな さすがにこのスレにはPix for Windowsと東方(体験版含む)の 両方がそろえられないパソコン初心者は居ないだろうな?
何の話だ
>>795 起動時にものすごい量の弾を確保
>>799 せいぜい同時1000発から
が激しく可笑しかったという話
>>800 Pixなんちゃらも初めて知ったし東方は要るの?
東方をやろうとも思わないわけなんだけど
PIXはDirectXのSDKいれてりゃあるだろ。 オレも東方は動画でちょっと見ただけだな。
>>803 否
東方が特別とは思ってない
たまたま、dat落ちしていたDirectX本スレのネタを思い出したぐらいの関連
そのたまたま思い出したネタが あたかもこのスレの人間全員に通じるように いきなり語りだした心理状態が理解できない。
>>804 ほんとだ、入ってるわ。知らんかった
>>805 東方のことはわかった
でもPIXの方は使えてないとダメって意味じゃないの?
ここにくるからには「ゲームを作りたい」と思ってるのは確かだけど
DirectXの扱い(というか製作工程?)に熟練してるのを前提にしてるのはおかしくない?
そりゃ例えばC言語の基礎がわからないとかなら話は別だけど・・・
そもそもプログラマしか居ないわけじゃないし…
自治厨みたいに取られたとしたら、誤解だ 滑稽な笑い話だと思ったので、キツメの冗談をいれただけ /_ | /. \ ̄ ̄ ̄ ̄| / / ― ― | | / - - | ||| (6 > | | | | ┏━┓| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | | | ┃─┃| < 正直、すまんかった。 || | | | \ ┃ ┃/ \________ | || | |  ̄  ̄| 自分の環境でもC++は現役じゃない、読めても書けない だが、このスレは役立ってる もっとやれ
今日のキチガイはID:BXbMSorNか
はいはい、自虐風自慢自虐風自慢
よくわからんが、DXの重さとプログラム自体の重さがごっちゃになってないか?って話だろ多分。 だって、テクスチャとかってDXならVRAMのほうにキャッシュされるじゃん、とかそういう感じ? そもそも東方で使ってるテクスチャとかイメージとか全部足してもそんな大きいものにならんよな。
>>795 東方はスタート時に最大2000の弾の構造体用意して弾作るときに空きフラグ探してるだけのような雰囲気だけどね
弾幕眺めていると弾作成順序と描画順序が合ってないときがあるし
まったく話が先に進まんね
>>795 の真意がわからないけどその前までの話は動的確保か静的確保かって話でしょ?
俺は詳しく分からないけどnew、deleteが原因で重くなるってのはどれぐらいからなの?
あと話変わるけどみんなどんな開発環境でやってる?
今どんな感じで進めようか考えてるところなんだけど色々参考にしたい
c++でDirectX使って自分でライブラリ作って進めるのとかってかなり根気いるよな?
やっぱDXライブラリとかseleneとかでやってる人の方が多いのかな
>>815 対象OS: Windows/Linux
エディタ: vi
使用言語: C++, Perl
コンパイラ: gcc
ライブラリ(GUI): SDL
ライブラリ(画像処理): SDL_image, SDL_ttf
ライブラリ(音声処理): SDL_mixer
Windows専用: MinGW(Windows版gcc), MSYS(Autoconf実行環境)
その他ツール: Autoconf, Automake(Makefile自動生成), make, Subversion(バージョン管理システム), Trac(バグトラッキングシステム)
画像関連ツール: GIMP(ペイント系のお絵かきソフト?), 発色弾(爆発画像生成)
音声関連ツール: Rosegarden(MIDIシーケンサ), Audacity(DAWソフト), OggEnc(OGG Vorbisエンコーダ)
>>815 私は勉強のためにC++とDirectXでやってますね。大規模なライブラリを使うのにはやや抵抗が。。
初心者脱却すればそういうこともなくなるんでしょうかね。
819 :
815 :2009/03/11(水) 02:06:14 ID:p1QxzQFQ
おお、結構色々あるんだな ゲームを早く作るってことなら既成のライブラリ使った方が速いだろうけど DirectXの勉強もしときたいんだよな なかなか悩ましいところだ
820 :
名前は開発中のものです。 :2009/03/11(水) 03:45:10 ID:VaF0H100
解像度ってどうしてる? 640x480もいいけど320x240の荒さも美しい。
縦長だろ常考
8*16最高
>>820 Mode Xか。
Mode 13hも便利だったけど。Mode Xもいいよね。
バカのバカによるバカのための井戸端会議 時々天才現る煽りもあるよ でいいですか?
ジャンル: シューティング 対象OS: Windows/Linux 使用言語: C++, Perl コンパイラ: gcc この時点ですでに終わ(ry それに気づかずにレスする奴も終わ(ry 日時: 2008/09/04 13:45 てか半年前ですか
#include <stdio.h> class Object; class Object{ public: virtual void Insert( Object* object ) = 0; }; class Penis : public Object{ public: virtual void Insert( Object* object ); }; class Vagina : public Object{ public: virtual void Insert( Object* object ); }; void Penis::Insert( Object *object ) { if( object == Penis ) // 型判定 printf( "OMG!!\n" ); } void Vagina::Insert( Object *object ){ if( object == Penis ) // 型判定 printf( "YES!!\n" ); } 型判定の方法忘れた
typeofか.classだろ
>『様々な質問に対する万能レス』 > >Q. 制作が進まない。スレがうまく機能しない。盛り上がらない。人がいない。 > やる気がでない。思い通りにいかない。雰囲気が悪い。なんとなくムカつく。 > 気に入らない奴がいる。作業しない奴がいる。他企画を潰したい。 > >A. まずは自演しろ、話はそれからだ。 を実演してくれてるだよ 生暖かく見守ってやれよ
例えば何かを失うとしても 守っていかなきゃ ひとつだけは
らめぇ
「悔しいのに・・・感じちゃうっ(ビクンビクン」
public class Loli extends Applet { いやぁ、らめぇ……そんな、こすっ、たらぁ…… なんか、んっ、で……ちゃう…… おしっこ、おしっこでちゃうよぉ…… あン、いやっ、やらぁ……! ん、んんっ、は、はぁ、あ、あぁぁ! だ、めぇ……きちゃ……んはぁ!! あ、ああぁぁぁらめぇぇええぇぇ!!!! あっ、くっ、んぁ、ひ、あああぁっ!!!! }
(´・ω・`)ハァハァ
(´・ω・`)やんのかてめー
しゃぶれよ
この一連のレスに新しいSTGのアイデアが隠されているかもしれない。
自機が精子で卵子を目指すSTG作れ
そのへんはフィロソマやR-TYPE凾ナやってないか? ・・・自機じゃないか
839 :
826 :2009/03/17(火) 21:02:04 ID:2sMEY88Z
続き void main() { Object *penis = new Penis; Object *oninnin = new Penis; penis->Insert( oninnin ); }
>>839 コンパイルエラー「移植性のない挿入行為」
おいおい、ウィンドウズプロフェッショナルゲームプログラミング読んだやつ居ないのかよ。 一般流通している専門書で CCSakura->InsertStick(); //サクラたんに肉棒をハァハァ みたいなのを載せた名著なんだが。 そろそろちょっと古いか。 多分2002年辺りの本。
CCSakura->InsertStick(); //サクラたんに肉棒をハァハァ に一致する情報は見つかりませんでした。 検索のヒント: ・キーワードに誤字・脱字がないか確認します。 ・別のキーワードを試してみます。 ・もっと一般的なキーワードに変えてみます。 ・キーワードの数を減らしてみます。
その1行だけで誰が書いた本かわかるから困る
コードとコメントが一致してないが
そうだよな。 stick->tukiage()とか stick->grind()とかを実行した後にorgsumイベントが飛んできて、その時stick->shotzamen()が呼ばれてstickがdisElectになって、 それでstickを格納してるotakuクラスのgetMode()がkenjyaModeを返すようになって初めて //さくらたんハァハァ だよな。
CCSakura->InsertStick(); だと、 //サクラたんがスティックを挿入 と書くのが自然。 引数が無いし文脈もよく分からんが、少なくとも「挿入される」とは読みにくい。
こっちでどうだ? Oresama->Insert( CCSakura );
やねうらおさんの本か!なら仕方ないw
私は、いのりがだぁぁぁい好きです。とくに、プリキュアになった時が、1ばーんすきかなぁ… 皆さん。どうかぁぁぁぁぁぁぁ私のいのりを応援してぇぇぇ。 そして、私のいのりをよろしくぅぅぅぅぅ。…っあ、でもぉぉぉぉ もちろん いのり はぁぁぁぁぁ 私の私の私のぉぉ いのり だからね。 キュアピーチちゃんからのメッセージ もかですみすみなぎさちゃん九条ひかりちゃん雪白ほのかちゃん日向さきちゃん夢原のぞみちゃん夏木りんちゃんみみのくるみちゃん水無月かれんちゃん 秋元こまちやん春日野うららちゃん桃園らぶちゃん蒼野みきちゃん山吹いのりちゃん忘年会やつて楽しい食事会やりたい津端あみちゃんとお話おしましたキュアピーチより
マジキチ
CCSakura->OpenHole( Oresama->InsertStick( NULL, NULL ) );
853 :
名前は開発中のものです。 :2009/03/19(木) 16:43:36 ID:X19frRvK
なんというか こう難しいのはダメなんだよな俺 プリキュアのようになんていうかこう魔法でぜーんぶやっつけちゃった みたいな感じのお話が大好きなんだよな 水戸黄門みたいななんていうか、こう悪いやつを徹底的にやっつけるみたいな そういうふうなかんじがいいんだよ
>>853 ボムだけ無制限に連射できるシューティングゲームか?
855 :
826 :2009/03/19(木) 16:51:26 ID:X19frRvK
void rezu() { Object* omanman1 = new Vagina; Object* omanman2 = new Vagina; omanman1->Insert( omanman2 ); } なんていうかおじゃまじょドレミのような雰囲気で プリキュアのポスター持ってるんだけど 親が気になって気になってポスター部屋に貼れないんだよ でも家を借りる金もなくてエロゲーも売って今度のプリキュアの映画代に したけど全然足りなくて親から借りてる車で流す音楽は友人からもらった 違法mp3を変換して無理やりCDに焼きなおして聞いてる けどなんといってもバキの演出の「もにゅ」とかってステキじゃない? 俺ああいうの大好きなんだけどな おすすめなんだけどな そういや仕事してるんだけど薬指が最近動かなくなってきて作業が うまくいかないんだ と書いてみるテスト
856 :
名前は開発中のものです。 :2009/03/19(木) 16:57:30 ID:X19frRvK
『お邪魔序ドレミ』
『おジャ魔女どれみ』
『おジャ魔女どれみ♯(しゃーぷっ)』
『も?っと! おジャ魔女どれみ』
『おジャ魔女どれみドッカ?ン!』
『おジャ魔女どれみナ・イ・ショ』
ドッカ〜ン吹いたw
全部見てるのな こいつ
>>854 そういやここのスレの主題を忘れとった
(i)三 まんこだ!まんこが空を飛んでいるぞ! っていうシューティングを作りたいんだけど、レンダリング重すぎて死んだ
そういや、もう春だったな。
STGって案外作るの難しいのな 超連射68kとおんなじ動きを実装できるようなシステム作るまで三ヶ月かかった
超連射の何処を実装するのに3ヶ月だい?
パーツ破壊や変形を定義しようとすると難しくて、みっちり丸三ヶ月かかった 二面の変形してレーザー撃つ青い敵とかヤバイ なんかもうプログラム書いて十分な達成感だw 素直にSBつかっときゃ良かった あ、超連射だと同じ動きをする敵がいないってのがまだ真似できてないやorz
変形は行列使ってやればすぐに実現できるぞー。 あとパーツとかは個別に作ってステートマシンで管理すれば簡単。 もうちょいがんばれ、先は明るい。
春休みか・・・
触手ってどうやんの ふにふにしてるやつ
>>861 2面ボスのレーザー角度が16段階だかで角度の丸め込みしてるから
その実装でハマるはず
っと、ごめんスレ勘違いしてた
だれか製作環境のスクショうp!
そんな事してなんの得があるのだ。
872 :
名前は開発中のものです。 :2009/03/22(日) 20:35:51 ID:JghWd5dz
タスクシステムとあんまり変わらんじゃん
873 :
870 :2009/03/22(日) 21:45:11 ID:DJ0YmeyC
タスクシステムってなんぞー
「掛けて割る複合代入演算子」と「割って掛ける複合代入演算子」があるの始めて知った。 #include <stdio.h> int main(void) { int a = 10; int b = 5; //2で割って2を掛ける a /*= 2; //10を掛けて10で割る b */= 10; printf("a = %d, b = %d\n", a, b); return 0; } これ実行すると「a = 10, b = 5」って出るからやってみ。
最近の統合開発環境はコメントに色がつくんだよね。 頭の悪いおじさんが知ってるといいけど。
それなりのテキストエディタでもやってるし、大丈夫でない?
>>875 マジレスwwwwwwwwwwwwwwwwwwwwwww
わーすごーいおもしろーい って言って欲しかったんだよ 幼稚園児くらいの子がすぐウンコだの言うのと一緒
釣れるねぇwww
お前らソースコード合計何行ぐらいいってる?
タスクシステムタスクシステムって言うけど、本質的には interface updatable{ public void update(); } を実装したクラスのインスタンスが入ったリストに過ぎんぞ? 全く汎用的な技術なのにいちいち特殊な名前付けるとか分からん
おい、聞いたかいボブ、日本人はジョークの解説を人に聞いてから笑うらしいぜHAHAHAHA!
ついでに言うなら、タスクシステムのもう一つの肝だとされる関数ポインタをスタックする、ってあれは publicstaticなメソッドと引数を格納するリストでしかない。通常、その設計はデリゲートと呼ぶ。 一般的なデリゲート機構だと普通にデリゲートオブジェクトのnewが入るのでそこらへんは微妙に換える必要があるけど、 どちらも一般的な技術だ。 こんご、タスクシステムを語るなら仮想なりでもソースをベースとして語れ。以上。
で、ソースをベースに語らずして何が言いたいんだこいつは。 「関数ポインタをスタックする」の時点で馬鹿なのは分かったが。 「タスクシステム」と「デリゲート」がまるで同時に生まれた概念・言葉だとでも思ってんのか。 そりゃ後から「これは普通こうだ」とか言うのは簡単だわなwwwww
タスクシステムスレが別途あるのに、シュ(ry 突っ込んだ時点で、しったかの厨房にも劣るという事だけ判っとけ
>>886 突っ込んだ時点で、しったかの厨房にも劣る厨房にも劣るという事だけ判っとけ
とりあえずワンパンチ入れないと気がすまないのか 実に春らしい展開
厨房は最後に発言した方が勝ちって考えるからな
このスレは参考になりましたか? 大変参考になった まぁまぁ参考になった 参考になった あまり参考にならなかった ○まったく参考にならなかった
>>887 この文からにじみ出る頭の悪さたまらんね
反応する奴もいい加減にしろ
>>890 先生、過去ログや今までのレスも忘れないで上げてください
まぁそれはそうと、話題を引き寄せるか
>>880 DirectXの利用や決まりきったコードを切り出したのも入れて考えると、5000〜6000ぐらい?
かなり改行使うコードだから、一行ifや開始ブロックの改行を省略していけばもっと少ないかもね
・DirectX関連のラッパが3Dに500、Inputに400、Soundに50行。全部まとめたクラスがいて結局1000行ぐらい。
・シーンマネージャとか、基本弾幕コードで400行ぐらい。
・残りが実際のシューティングのプログラムとか、タイトルとかオプションとか。
・ザコ敵は1種類につき60〜100行、ボス系はザコ敵の3倍〜10倍ぐらい。
そういえば、前から疑問に思ってたんですが 普通の縦・横シューで、ザコの敵の動き、 つまり出現して、一定の動きをして去っていく、という動きを スクリプトで指定できるようにするってのは(やった事はないけど)わかるんですが、 ボスの挙動とかもスクリプト化してやったりするもんなんですかね?
そりゃもちろん。 ちなみに、スクリプトの記述にはエクセル使ってるぞ。 そこからcsvにして実際のオブジェクトに変換するのが一般的みたい。
そうですか。 てことは「このパーツが破壊されたら、次にこのパーツが動いて」とか全部 スクリプトで制御してるって事ですか。 凄いなぁ。そういうシステム作るだけで大変そうだ。
なあなあ、enemyクラスが格納されたコンテナってステージ開始時に初期化するだけで、 サイズは不変の固定長配列にした方が設計上はいいのかな。 敵から敵を吐き出すような仕組みを作りたい場合、どういう設計が効率良いのかねえ。
>>896 >>895 はただ出現カウントとか種類とかを数値で指定してるに過ぎないだろ。
動作を細かく記述できるスクリプトを実装するには、パーサが必要なんだし、csvとかのレベルじゃない。
>>898 いや、最終的にはボスの動作も細かい動作の積み重ねだから、
csvで移動オブジェクトを大量に生成するので正解に近い。
(というか、実際に現場ではそうやってるんだってば)
よく言うところのテキスト平文スクリプトで制御ってのは、
余程のことが無い限り使わないらしいよ。
というか、本当に細かい制御がしたいなら下手なスクリプトパーサなど作るよりも
perlとかrubyとかで直接インタフェース叩くらしいぜ。
>>899 別に手段がどうだってそんなことしらねぇよ。そんなもん「スクリプト」じゃないってだけ。
現場がどうとか聞いてないから。
大体、「正解に近い」ってなんだ?実装の真理でもあるのか?
一度そういうのをしっかり構築すれば あとは使いまわしが利くんだろうけど ヘボな俺にはさっぱり想像がつかない。
>>899 うちの現場(笑)ではスクリプトパーサ作って使ってるけど、異端と申すか
スクリプトにも利点はあるんだがね
使える使えないはどうでもいいので お前らのスクリプトがどんなのか具体的に教えてください できればうp!
どんな動きも簡単にすぐ作れる秘技を使っているが教えない
指大丈夫か・・・?
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
大変!写真から指紋が盗まれちゃう!
×保護するほどの価値がある ○晒すほどの価値がない
×実はすごいコードを書いている ○口だけで実装のじの字も知らない工作員
>>906 これなんかのライブラリなの?
書いてあることが理解できないけど
906を見てショボイ実装しか思い浮かばない奴が 俺だけで無くて良かった
>>906 見て、なつかしいと思った奴は何人いるんだろ?
ノシ
やっぱり、古いんだ
<SC>は sub commandだよな?
多分こんな奴で、
char script[] ={
QDD, //下行く (アドレス0)
_IF_EQU,F_whlr,7 //自機との相対的左右判定
QRR, //右に行く
_JUMP,0 //ループ
QLL, //左に行く (※8文字目 アドレスは7)
_JUMP,0 //ループ
};
どう?
>>917 実装はオートマトンとかマシン語とかで、
折角C++使っても全部switchしか手が無い
Excelなら、目的アドレスを自動で吐くExcel式が書けそう
919 :
917 :2009/03/28(土) 13:57:34 ID:+5Y/r4Hn
>>918 どうって言われてもな。たしか、Turbo C++の本だったよな?
外部エディッタを作ってゲームを作る発想は、昔の本にしては評価できる。
が、スクリプトに限定して見るならあまりにも原始的すぎる。こんな所か。
ちなみに俺の場合はC言語っぽい汎用俺様言語を作った。パッと見はC言語モドキだ。
もうちょい早くLuaとか知ってたら、そっち使ってたかもしれない。
920 :
917 :2009/03/28(土) 14:13:33 ID:+5Y/r4Hn
whileがあってforが無いから、扱いづらいけどな。++も配列も無いし。 //敵[0]の動作 int Enemy_0(){ int n; move(角度,速度); n=0;while(n<休憩時間){pause;n+=1;} move(角度,速度); n=0;while(n<休憩時間){pause;n+=1;} move(角度,速度); return 0; } ちなみにpause命令で処理をスクリプトからプログラムに戻してる。
でも俺はオブジェクト指向>ロリータ指向
俺は906が何なのか推測できて、間違ってなければよいだけよ やっぱLuaだな yaccもテンプレートも使わないので組み込みやすくて良い
923 :
名前は開発中のものです。 :2009/03/28(土) 18:55:52 ID:BvaX6KYT
Strategyパターンでタイトル、機体選択、ゲーム中の3つのシーンを作りたいんだけど クラス名にこまった タイトル→ StrategyTitle 機体選択 → StrategySelect ゲーム中 → Strategy??? どんなクラス名がいいと思う?
そろそろXXパターンで組んだってわかるようにクラス名に反映するのはよそうぜ。
敵は楽だな 基本 → EnemyPrototype 敵1 → Enemy01 敵2 → Enemy02 敵3 → Enemy03 敵4 → Enemy04 敵5 → Enemy05 これは楽だね プロトタイプパターン
機体ごとにパラメータを変化させるにはDecoratorパターンが有効だね 基本 → DecoratorPlayer 機体1 → Player01 機体2 → Player02 機体3 → Player03 機体4 → Player04 機体5 → Player05 機体6 → Player06 いやぁパターンは楽になるね
そうだな お前は春休みぐらい友達と何処かに遊びに行けよ
>>927 >折角C++使っても全部switchしか手が無い
ID:BvaX6KYTは 「906はショボイ」の一言を伝えるのに こんなにレスを消費しないイケナイという事がわかった 大変だね(´・ω・`)
>>929 こんなにレスを消費しないイケナイという事がわかった
こんなにレスを消費しない"と"イケナイという事がわかった
そうだな お前は春休みぐらい友達と何処かに遊びに行けよ こんなにレスを消費しない"と"イケナイという事がわかった
老害ジジイをみて思ったのだが、能力がないくせにプライドだけは一人前の使えない 新人の30年後の姿なんだろうね(逆なら、ジジイの30年前の姿が今の新人)
定年過ぎても独身で女には全く縁のなく、 オタク系や変態男が多い。 定年に近い人に変な人が多い気がした。 簡単に言うと動物園 正当化するあたりがね、DQNを通り越して変人だと思う。 学歴がどうこう言ってるやつにまともな人は少ないw 陰湿なやつ多いし、なんか終わってるというか! 60歳以上のじじいに変人多いよな マンコ、マンコってレンコする奴 たち悪い!高卒で入って今年でI年目になる女!チクチク言ってくるよ…器せまっ!! ってしょっちゅう思ってる自分がいる☆
またキチガイが沸いてるよ
すいません 私独自の開発した 対キチガイミサイルなんです
2ch歴浅いけど、本物キチガイと遭遇したよ 過去ログの幼稚なパターン厨かと思ったら、それ以下だったな
938 :
名前は開発中のものです。 :2009/03/29(日) 01:00:46 ID:Ol+RNP7n
ぉゃっょ
ヵッォ、ぉゃっゎ ぁっぃ ぉゅょ
老害老害っていつも同じこと言ってるけど どっかでおっさんにこっぴどく叩かれたんだろうな
はいはい勃起勃起
>>923 「画面」のクラスなんだから、パターンは関係ねー。
ここでの弾クラスがbulletで敵クラスがenemyのように、分かりやすいプレ(リア)フィックスを点けれ。
一般的には2Dゲームだと、表示系がCanvasになるから、
mainCanvas titleCanvas selectCanvas みたいに付けるのが一般的だが、
3DゲームだとSchineとかにするのがいいらしいね。
全般的にはもっと抽象的にViewとかにしてもいいかもしれない。
某本によれば、メンバ関数だけど drawGameTitle とか drawGameMain だったりした
>>941 老害のおっさん以外だったらこういう奴とも仲良くできるような事書くなよw
何処でも相手しねーよこんなの
組み込み言語で繰り返しや、sin,cosを直にスクリプトに書けるのもスゲーが、
配列で運搬出来る様な原始的なスクリプトも自動生成出来るのでおいしいです。
富豪的には自動生成した物を
続き 富豪的には自動生成した物を、組み込み言語で読み上げたり、中に ハードコーディングしたりとかも出来ちゃうんだろうな
そうや、BulletMLは使っている人いないのか?
29日午後8時55分ごろ、大阪市北区角田町で、大阪府枚方市のネイリストの女性(21)が 、近づいてきた2人組の男に「遊ぼうや」と声をかけられた。女性が無視したところ、男の1人 がいきなり女性の顔面を殴り、ナイフでほほを切りつけた。男らは走って逃げ、女性は顔に 軽傷を負った。女性は友人女性(21)と一緒にいたが、友人は無事だった。曽根崎署は 傷害容疑で捜査している。
はいはい勃起勃起
意味判らん
>>943 Viewは、World*View*Projを何度も使う3Dではややこしくないか?
//テーブル初期化 : 45[SIN] = 2[SQRT] / 2.0; : ↑この前こんな感じの見かけたんだけど、今時これはないと思った
szExceptionTitle db "Exception",0 szWindows2000Required db "This application requires NT 5.0 (2000) or later versions of Windows system",0 szErrorSymDefFileNotFound db "The symbolic definition file has not found",0 szErrorSpecSymDefNotFound db "A specific symbolic definition has not found",0 szErrorFileNotReadable db "Could not open or read a specified file",0 szErrorInvalidSize db "The size of symbolic definition file is invalid",0 szErrorBomMismatch db "The byte order mark of symbolic definition file is not the UTF-16 unicode format",0 szErrorOutOfMemory db "Out of memory",0 szErrorMessageFormat db "A fatal exception has occured at procedure ID %08u:",0Dh,0Ah,0Dh,0Ah,"%s.",0
push OFFSET PerformRandomSeedExchangeProc push 1 push SIZEOF PT_EXCHANGE_RANDOM_SEED call ExchangeData test ecx,ecx mov eax,[lpLargeBuffer] jl ProcessTerminated cmp [eax + PT_PUBLIC_CONTROL_WORD.ControlWord],ACT_EXCHANGE_RANDOM_SEED jne @b cmp ecx,SIZEOF PT_EXCHANGE_RANDOM_SEED jne @b cmp [bHost],0 lea ecx,[edi + CONTEXT.regEax] jne @f mov eax,[eax + PT_EXCHANGE_RANDOM_SEED.Seed] mov [ecx],eax
もはやCコンパイラを自作したほうが楽なレベル
>>952 double sin[360];
double sqrt[1000];
sin[45] = sqrt[2] / 2.0;
ってこと?
何気なくsinとかatanとか使ってるけど、結局それらの関数って 本来めちゃくちゃコストがかかる計算のはずだよな? なら、やっぱりゲーム的には精度落としてテーブル実装にするのがモアベターなのかなあ。
>>957 計算式で求めない確定した数値なら、テーブルのほうがベターじゃねーかな。
結局は、作り手の選択な部分なんで、絶対な解法というのはないよ。
携帯ゲームなら効果あるかも、って認識だ 今時のPCゲームで数学関数がボトルネックになるなんて考えられない そもそもそこを気にするんならまず描画をやめれ
プロファイリングすれば分かるが携帯とかでも無い限り
>>957 案は逆に遅くなる
下手な考え何とやら
じゃあ座標も少数型でいいんだね?
>座標も少数型
DirectXなので当然そうなる
というか、
>>961 の脳内にだけ誤差とかで上手くいかない状況があるんじゃね?
計算処理がテーブル参照一回分よりコスト低いなんて普通に考えたら信じられんのだが。
まあ、バカにはわからんよ。 テープル参照と三角関数のベンチマークを ランダムな引数で比較してみろよw
CPUの動作を理解しないと、テーブル参照と三角関数の速度差は理解出来んだろうからな。 つ〜か、キャッシュ絡みの動作は分かりにくい。
少なくとも俺が組んだプログラムでは テーブル参照の方が10分の1のコストで済んでいた。 どういう組み方すれば三角関数の方が早くなるのか教えて欲しい。
関数のほうは、#pragmaとかで処理系の最適化を効かせた? まあそれでもテーブルの方が速いってことは十分ありえるが
繰り返す話題だけど、環境依存があって当然の物の話だろ?
>>966 のPCで特殊な結果が出たなら、珍しいねとしか言えない
環境が分からんから話が交錯するのです。 速度とか書き込む前に少なくともOS・CPUスペック・RAM容量・言語・住所・氏名を明示しましょう。
この手の話題、過去に何度も出てくるけど、 ベンチマーク用のサンプルソースが示されないのはなんで? 論ずるよりもそれ実行すれば一発で納得できると思うんだけど そんなに特殊なプログラムなの?
描画以外の速度なんざ誤差 可読性重視
sinfじゃなくてsinを使うとコンシューマーでは遅くなるが。
ああ俺はDXライブラリを使ってたから… DirectXなら当然のことなのか ついでに動的使う負荷も無視できるのかな あれってvirtual宣言した時点で動的と判断されて負荷かかるのかな
コイツってさ、質問が意味を成してないよな
設計する為に継承したり、インターフェース用意したりしてるんじゃねーの?
手元に1行も自分が書いたソースねーだろw
まさに
>>888
// sin関数 dblData = 0.0f; intTime1 = GetTickCount(); for ( i = 0; i < 100000; i++) { dblData = sin ( 0.5f); } intTime2 = GetTickCount(); intKekka1 = intTime2 - intTime1; // グローバルメモリ参照 dblData = 0.0f; intTime1 = GetTickCount(); for ( i = 0; i < 100000; i++) { dblData = dblSin[i]; } intTime2 = GetTickCount(); intKekka2 = intTime2 - intTime1; これで、intKekka1が16、intKekka2が0 コンパイラ VS C++ 2008 Dual core 1.6GHz メモリの速度は忘れた。 C++のsinが多項式でいってるのかとか、どこまで精度だしてるかは不明。
100000→1000000で intKekka1が188、intKekka2が15 VS C++のsinだとメモリ参照したほうが早い 他のコンパイラは、ここになかったんで不明
関数がvirtualであることと擬似sinとライブラリ組み込みsinの速度が違うことに関係は無い……
どう見ても釣りです。 本当にありがとうございました。 キャッシュを一言も挟まない辺り狙ってるなw
979 :
978 :2009/03/31(火) 20:11:04 ID:AlfaWHG9
>>975 >Dual core 1.6GHz メモリの速度は忘れた。
Dualとか関係無いのはさすがに判るよね?
そこに書かなきゃいけないのは、CPUの2次キャッシュの大きさと、dblSin配列の大きさ
>>978 文句ばっか言ってないでお前の環境での結果を見せればいんじゃね?
>>975 いや、sin[i]じゃないだろjk。
public double sinex(double rad)
{
for(int i=1;i<tbl.size();i++)
{
if(rad>tbl[i-1] && rad<tbl[i])return tbl[i];
}
return 0;
}
とかこんな感じじゃね?
いやごめん忘れて。角度に関して、最初から整数で丸める実装にすればいちいちテーブル範囲参照しないでいいんだな。おkだ。
>>975 テーブルを頭から走査したら駄目だろw
それでベンチマークになってると思ってるのかね。
それと、そのコードって最適化かかるとまずいんじゃない?
変数をvolatileで宣言してれば平気かもしれんが。
>>979 整数実装にすれば(0が0度、64が180度(1PI),96が270度(1.5PI)みたいな設計にしてるなら配列のサイズ関係ないっぽいぜ。
もちろん、それの前処理としてのiが渡ってくる過程が重要になるけど。
)
それにしたって*1000くらいしたあとに %128とかで片付ければいいだけなのでそんなにコストがかかってるとは思わないけどな。
>>979 2次キャッシュが1024Kbyte
dblSinの大きさは、8000000byte
>>983 for ( i = 0; i < 1000000; i++)
{
intNo[i] = ((float)rand() / (float)RAND_MAX)* 1000000.0f;
}
dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 1000000; i++)
{
dblData = dblSin[ intNo[i]];
}
intTime2 = GetTickCount();
intKekka2 = intTime2 - intTime1;
ランダムいれてみて、intKekka2が31。
今のやり方だとまだテーブルのほうが速い。
>>977 ライブラリ組み込みのsinの求めかたってコンパイラが違っても
計算のやり方同じなん?
gccでもVCでも同じ?
別にvirtural とsin との問題に絡めて聞いたわけでなく 速度繋がりでついでに別個の問題として聞いたわけだが
ライブラリ組み込み関数って大抵はgccの方が圧倒的に遅いんじゃないかなw
つーか、全体の処理の中でボトルネックになってるかどうかを確認するべきだと思うんだが。 今時三角関数省いたくらいで喜ぶなよ。
シューティングなんぞループと加算と描画と三角関数くらいしか使わないもんだし、その中の一つ が削れただけでも影響は結構大きいかもだ
「テーブル参照より三角関数の方が早い」って言う人がいて、 「サンプルプログラム示して実行させれば誰もが納得するだろ」って話になってるのに 「環境で変わるから〜」とか 「三角関数省いたくらいで喜ぶな」とか意味わからん。
現実にはミスキャッシュが起こるわけで、ソレの再現をすればよい 734msのダミーコードを追加した intKekka1 750 実質 16ms intKekka2 766 実質 32ms for ( i = 0; i < 100000; i++) { for ( j = 0; j < 100000; j++) tt = otherMemory[j]; //ダミーコード } intTime2 = GetTickCount(); dummyOnly = intTime2 - intTime1; for ( i = 0; i < 100000; i++) { dblData = sin ( 0.5f); for ( j = 0; j < 100000; j++) tt = otherMemory[j]; } intTime2 = GetTickCount(); intKekka1 = intTime2 - intTime1; // グローバルメモリ参照(←ヒープでいいよね?) dblData = 0.0f; intTime1 = GetTickCount(); for ( i = 0; i < 100000; i++) { dblData = dblSin[ intNo[i]]; for ( j = 0; j < 100000; j++) tt = otherMemory[j];
現実には割と続けて使われることも多いわけで、 そこまで明らかにミスキャッシュを誘発させるベンチはどうなんだろうね。 あと、dblSin[ intNo[i]]; だとテーブル二段階アクセスになるから ちょっと不利な計測の仕方でしょ。
誰か次スレたのむ
>>994 doubleData[i] = (double)rand() / (double)RAND_MAX;
なる配列を加えて、
dblData = sin ( doubleData[i]);
にした
kekka1 734
kekka2 781
確かに、画像の回転ぐらいやらせんと説得力ないな
妊娠してしまいますが
埋め
シューティングで使う角度って10万も分割するのか……。
1000 :
名前は開発中のものです。 :2009/04/01(水) 00:12:11 ID:HvCh7B+t
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。