スマホの専ブラの次スレ立て機能マジ便利 テンプレ単純だとさくっと作れる
前スレの1000>1000ならC++が廃れてもう少し普通の人間に扱い易い言語に置き換わる お前が作れ いやまぁ、俺も作ってはいるんだけどな……
C++11はだいぶん使いやすいぞ
8 :
名前は開発中のものです。 :2013/01/12(土) 09:42:32.90 ID:/dzovcJU
>>Dがあるやん
最新版への自動更新とかって、どうやってる? なんとなくのやり方は想像できる(固定URLにメタデータファイルを置いて自身のバージョンと比較する等)んだけど 俺が知らないだけで、世の中そういうライブラリやツール、サービスがあるのかなって。
公式サイトでお知らせしてるよ
>>12 そういう処理を自動的にやってくれるフリーソフトあるよ
起動するときにそのフリーソフトを起動して、あとは設定通りにバージョンチェックして目的のアプリを起動
作者側が自分のアプリにそれを組み込んで配布していいのかどうかはわからないけど
>>12 こういうやつ?
http://code.google.com/p/wyupdate/ でも通信要素がないゲームの場合は“自動”更新機能とかあんま入れないよね
通信対戦機能もインターネットスコアランキング機能も無い、スタンドアロン
だと思ってたソフトが不意に通信始めてセキュリティソフトが警告ダイアログ
出したら「何これキモイ」って思われたりするし、神経質なユーザーから
クレーム来たり、対応が面倒くさいよ?痛くもない腹を探られるのはあんま
気分のいいもんじゃないから余計なことしないという結論になりやすいと思う
一方、最初から通信要素ありのゲームなら前述の懸念もなく、自動更新機能を
組み込むくらいそのプログラマにとっては造作もないことなので、そもそも
>>12 みたいな質問には至らなかったり
18 :
12 :2013/01/12(土) 22:39:46.59 ID:Q2O9dlnY
>>13 ぶっちゃけそれでも問題ないんだけどね。
タイトル画面、あるいはゲーム起動時に出るダイアログに、
「ブラウザで公式サイトを開く」というボタンを付けるだけでも違いそうだし。
>>14 そうそうそんな感じの。
自分の場合は同人/インディーズゲーム想定だが、この界隈でメジャーなものがあるのだろうかと。
>>15 ソフトウェア名でぐぐってみたけど、結構メジャーっぽいね。検討してみる。
別にゲーム起動時に自動じゃなくても、「最新版をチェック」ボタン→「更新」ボタン押下で自動的にDL&置換でもいいんだけどさ。
ユーザ自身に、ウェブサイトからダウンロードして上書きしてもらうという部分を省略出来ればいいので。
小規模なものでよければ、通信前提のものは作ったことあるよ。
ロビーもマッチングも無い、ただサーバ側のIPアドレスを直打ちするような代物で、
バージョン管理も、ホストとクライアントのバージョン情報が違ったら弾く、くらいしかやってなかったけど。
実行ファイルの更新したい場合ってどうすんの?
>>19 幾つかパターンはあるようだが、その一例を挙げると
(1)アプリケーション本体の実行ファイル(本体.exe)とは別に、本体.exeを起動して終了するだけの 実行.exe を用意する。
(2)ユーザが 実行.exe を起動する。
(3)実行.exeは最新版をチェックしてダウンロード。一時ディレクトリ update/ に置く。
(4)update/にある差分のうち、自分自身(実行.exe)以外のデータを更新する。単純な上書きでもいい。
(5)本体.exeを起動し、自身を終了させる。
(6)update/に 実行.exe の差分があれば更新。
(7)ゲーム画面へ。
こんな感じ。
一つ一つ考えていけば難しいことがないように思えるね。 アップデートするデータはSkydriveとかにおいてできるのかな。 アップデート失敗したら手動上書きでやってもらうことも出来れば助かるな。
そういうストレージサービスをシステムに勝手に組み込むのってアリなのかな? サーバ機能を提供してるわけじゃないから怒られそうw
>>20 googleが1秒以内に検索結果を出してくるネット上で「そんなの知ってた」の後出しか…
ここまでの馬鹿は初めて見た
「『ググれ』で追い返せよ」で済むことを ここまで汚い言い回しにすることができるのか ある意味感動ものだわ ここまでのバカは初めて見た
とりあえず嫌味言おうとするのは何とかならんのかおまえら
せやな 人間関係悪くするだけでっしゃろ いづれ己にも返ってくっとばい
そもそも20のどこに後出し要素があったのか…
12からの流れはそう見える
そうか、それは失礼した。
>>18 同人か。通信対応の作品がたまーにパッチの自動取得(適用)機能搭載してるね
実際にやるサークルが少ない(or搭載したい機能としてあまり話題にならない)のは
ゲームにとってはやっぱり枝葉の部分だからってのが一番大きいかもねぇ
(
>>15 で書いたような懸念も絡んでくると組み込む意欲下がるしね)
個人的には、p2p(BitTorrent)で自分のゲームが同人ソフト詰め合わせzipの中に
あるのがたまにムカついてて、不正使用防止(主に中華対策)のためにゲーム内容に
何らかの通信要素を盛り込んでユーザー認証ありの常時接続必須の仕組みにして
パッチもログイン状態でないと入手不可みたいにしたいなーとかたまに考えるけど
運用コスト考えるとどうしても二の足を踏むんだよね
>>21 ,22
利用規約よく読んでから使えばいいと思うよ。API公開されてるんだしさ
中華対策なら、禁止ワード入れとけば良いんじゃね?
邪悪江沢民とか?んー、狙い撃ちしてると露骨に分かると逆恨みされそうだしなぁw
p2pネットワークに更新データ放流してサーバー無しで自動更新サービス運営ってできるのかな? p2pよくわかってないけど
>>33 かつてWinnyだったかが、クライアントのバージョン情報も一緒に流すようにしていて、
P2Pネットワーク上で新バージョンを見つけたら、ユーザに更新を促すという仕組みをとっていたと聞いたことがある。
実際の更新データは、流石にウェブからDLだったと思うけれど。
怒っていいぞ
p2pで共有してもファイルが正当なものかチェックする機能は最低限必要だし サーバなしってわけにはいかんのじゃないかな
・配信の制御ができるのか。何らかのミスで配信停止したくてもできないとしたら? ・人気のない(マイナーな)ファイルとP2Pネットワークの組み合わせは適切なのか? ・ゲームプログラムに名の知れたP2Pネットワーク(仮にBitTorrentとしようか)の クライアント機能を組み込むとして、それはユーザーが望む結果になるのか?
例えばBitTorrentクライアント機能を搭載するとして、それが活性状態になる事で 生じる副作用、色々あるよね。昨今のISPが実施してるDPIによる帯域制御に ひっかかったりしたらユーザーは普通にブチギレると思うんだよね。だいたい 知らん間に勝手にP2PネットワークのピアPCにされてるんだから、そらもう 「何これキモ杉」って思われて2ちゃんに晒されちゃうと思うよ
MacOSのゲームをWindows用に移植できる技術を持った人いますか? 頼みたいことがあります
予算は何百万から?
話が通じない(話を聞かない)人間なんだなぁ、という事はよく伝わってくる
人の言葉らしき文字列を自動投稿するスクリプトでしょ
多分C++で書かれたWindowsプログラムに違いない。
移植してください 頼みますよ リメイクでもいいです
そもそもMacで使われてるC言語はObjective-Cであって、C++とは別物なんだがな WindowsからMacへ移行し、会社も移籍となるとなかなか難しいだろうな
XCodeでもC/C++のコンパイルは出来るよ。 ただし、ウィンドウのハンドルを取る手続きはObjective-Cじゃないと資料が見当たらなかった。 システムAPIはObjective-Cに特化している印象。
>>50 たぶんCで作られてると思います
OS9の時代なので古いゲームです
画像を表示するのにもQuickDrawを使ってます
OSX10.7からRosettaがなくなってPPCのOberinは動かなくなりました
古くからMacを使いウルティマオンライン風の2Dオンラインゲーム開発を熟知してるゲームプログラマーの方お願いです
Oberinを救ってくださいDavid M. Bourg、Glenn Seemannに問い合わせて共同開発してリメイクしてくださいお願いです
他人任せにしないでください。 あなたが権利者から許可を取り、プロデューサ/ディレクタ/プロジェクトマネージャになるべきです。 その上で、開発チームを立ち上げてください。
他人任せで成功したプロジェクトなんて聞いた事がない。 自分が中心になって製作するサークルでも9割以上が潰れると言うのに。 レスすらまともに読む気ないのに協力してもらえるなんて、どういう思考回路してるんだ? いい加減しつこい。諦めてmac買えよ。中古なら安く買えるだろ。
>>50-51 みたいに相手するから余計につけあがる。
責任取って他スレに誘導しろよ。
>>55 おそらく中古MACを買う予算より少ない金額で「仕事の依頼です!」とか言いそうで、
プログラミングできる人間側にしたら好きになる要素がないよねw
2chでプログラマ探してる時点でろくなもんじゃない
QuickDrawって廃止されてQuartz 2Dだよね。 たぶんMacのQuartz 2D使ってゲーム作れるレベルの高い人は日本にいないから移植も無理だろ。
洋書有利だな。
どうして Windows に nanosleep が無いことを考えるとイラついてくるな
>>61 ゲーム作るんならグラフィクスはOpenGLじゃないの
2Dゲーならそこまで低レベルAPIに落ちなくてもいい。 ていうか面倒ごとが増えるから落ちずに済むならそれに越した事は無い。
つまりDXライブラリ最強ってことですね
#include <iostream> #include <map> class A{ public: int val; }; int main(){ std::map<int, A> Main_A; std::map<int, A> Sub_A; Sub_A.insert(std::make_pair(1, A())); Sub_A.insert(std::make_pair(5, A())); Sub_A[1].val = 100; Sub_A[5].val = 50; //Main_AにSub_Aの要素をinsertしたい std::cout << Sub_A[1].val << std::endl; std::cout << Sub_A[5].val << std::endl; return 0; } mapから他のmapに要素をinsertするといったことは可能なのでしょうか? イテレータとかいうやつを使うのでしょうか?
何をしたいかいまいち良く分からんが、 STLコンテナの類で全要素にアクセスするなら イテレータ使うのがよろしい。 C++初心者にはキモイ構文かも知れんが、 まぁサンプル通りのコーディングすれば良し。
イテレータ慣れると[]演算子でアクセスする方が気持ち悪くなってくるね
ムーブコンストラクタで無用なコピーを防ぐとか、そういう話かと
>>69 用途が違くね?
[]演算子ならどこでも一瞬でアクセスできるじゃん。
>>71 mapの場合は絶対にキーが格納済みであることが確実でもfind使うようにしてる
それとはまた違うがvectorもatがあるから[]は使ってないなあ
Vectorでatは毎回範囲チェックするから遅くなるだろ ある程度連続してアクセスするなら無駄
>>70 >>67 の内容から察するにその辺の話だと俺も思うなぁ
C++11 std map pair move-semantics move-constructor move-assignment-operator
とかでググると
>>67 のやりたい事と一致する情報が色々拾える気がする
アルゴリズムでcopy一発じゃないの?
DXライブラリでゲームのセーブ及びロード関係なんですが fopenやfwriteではint型やchar型のデータは読み書きできると思うんですが クラスなどのオブジェクトまるまる保存するにはどのような関数があるのでしょうか? 参考に出来るサイトなんかでもなんでもいいのでお願いします。
オブジェクトを保存できるような形式にすることを「シリアライズ」というが DXライブラリとしてはシリアライズは提供してなかった、はず。 C++としても特にあるわけじゃない。 Boostではあるって聞いた。 データ形式が複雑じゃなければ自分で手でデータを並べてファイル出力。 structを一括とかすると若干見通しがいい。 余談だがこれには#pragma pack(1)とか非標準的な泥臭い話も若干出てくる。
boost::serializationで検索……と言いたいところだけど、 まずはstructか何かに必要なデータを纏めて、それを1つずつ順番にバイナリ出力するところから始めてみてはどうだろう
80 :
79 :2013/01/19(土) 13:51:53.80 ID:tuSK099a
あ、ごめん、リロってなかった
>>77 クラスを読み書きするだけならこんな感じでどうでしょうか…
#include <iostream>
#include <fstream>
using namespace std;
struct Savedata{
int x, y, z;
};
int main(){
Savedata save; //オブジェクト
save.x = 1;save.y = 2;save.z = 3;
const char* filename = "sav.dat"; //ファイル名
ofstream out; //セーブ
out.open( filename );
out.write( ( const char* )&save, sizeof( Savedata ) );
out.close();
Savedata load; //ロード
ifstream in;
in.open( filename );
in.read( ( char* )&load, sizeof( Savedata ) );
in.close();
cout << load.x << load.y << load.z << endl; //確認
}
ファミコンゲームのセーブロードがシリアライズとかしてたかよ 必要なデータを洗い出してセーブデータの構造を自分で考えろよ
ファミコンソフトってC++で開発されてたのか、知らなかったぜ
なんとなく想像はつくと思うけど、 セーブロード機構の実装はめんどくさいよ。
いつどんなタイミングでもゲーム画面をまるごと保存&復元可能にするのと ゲームのプレイデータをセーブできてロード時に適切なシーンへ移行するのとでは かなり実装方法が違ってくるから注意だなあ 前者はアプリ用のライブラリとして組み込めるレベルの機能だけど 後者はゲーム別に高度にカスタマイズしたレベルでの機能になる
一人で思い付きでガーって作っちゃうような小さなゲームに簡易にセーブ/ロード機能を 組み込むにはboost::serializationは楽チンだなぁ。ソースコードが仕様書だから ORMのための仕掛けをわざわざ中間に挟み込む手間はかけたくなかったりするし
保存する必要があるデータが最初から単純で種類も少なければ
手動でテーブル化するコードをチマチマ書いたり、あるいは
>>81 みたいな形でももちろんできるわな
ただ、種類が増えてくると前者は保守性の悪さがすぐ表面化するし
構造(関係)が複雑になると後者もシリアライズ可能にするための
仕組みとかお作法をちゃんと用意してあげないといけなくなるしな
勉強目的(苦労するのが目的)ならともかく、既知の問題が
見えてるんであれば最初から出来合いのライブラリやツールを
どんどん使ったほうがいいと思うぞ
シリアライズはバージョンの違いに対応しようとすると面倒くさいからなー DBからスケルトンを作成する便利プログラムでも探すか作った方が楽
blancoDBみたいな入出力のソースコードを自動生成する方法論かな? あれはあれで前提としてる仕事を選ぶような気がするなぁ ゲームの場合、業務システムと違って「面白さを追求・調整するため」と 称して行き当たりばったりの試行錯誤の繰り返しを開発の中盤過ぎても 平気でやってたりするし、オブシェクトの相互作用の部分に修正を加えまくるから データベース指向なR/Oマッピングの自動化に労力を割いても徒労感の ほうが大きくなるんじゃないかなぁ。ボトルネックはそこじゃないというか
まあアホの子が好き勝手作っても大丈夫なやり方なんてないよ それならツクールとか使えば?ってなる
>>88 シリアライズしたデータのバージョン間の互換性問題は
ゲームのセーブ/ロード用としては気にする必要なさそうだけどな
ゲームをリリースしてからゲームプログラム側でシリアライザブルな
クラスの定義を修正することがあるかというと、ほとんどないだろ?
ゲームをリリースしてからシリアライザのバージョンを変えることが
あるかというと、これもまぁ基本的にはないだろ?
セーブデータはDBを使って、アクセサー(のインターフェース)を
自動生成するフレームワークを作れば楽、というのは、別の見方をすれば
オブジェクト指向とは異なる(例えばRDB)をバックエンドで使うから
だから変換機構を介在させる必要が出てきて、しかもそれを組み込む作業が
機械的で退屈でケアレスミスを起こしやすいから、だから楽になる
とも言えるわけで
>>91 訂正
△だから楽になるとも言えるわけで
○だから変換機構の自動生成やらフレームワークを用意することで
楽になるとも言えるわけで
例えばオブジェクトグラフを保存したいとして、これをその辺のフリーの
組み込みDBのテーブルに格納するとしたら、直接に保存出来ないわけだから
何らかの変換機構を介在させてマッピングすることになるよね。
組み込みDBのインターフェースがオブジェクト指向的でないから
何らかの仕掛けを使ってこのギャップを埋めなきゃいけないんだよね
無駄な長文だなw
あんま詳しくないんだけどセーブ機能にデータベースっていうのはSQLiteとか使うの? 最初から表として表現しやすいデータなら便利そうだけど、セーブ機能のクエリのしかたなんて どうせ単純なんだからそれなら別にCSVで保存してもよくねって気もする 階層状のFSMを保存するとかになると表にするのかったるいからmsgpackとか使っちゃうな
お好みでおk
シリアライズはヘッダ情報どうしてるか聞きたいわ ファイル全体のはもちろん必要だがクラス自信も自らのヘッダ情報を勝手に書き出すようにしといた方がいいよな
boost::serializationの場合はサンプル通りのおまじないコードを入れとくと 何のクラスの何のメンバが保存されてるのか、って情報はXMLファイルに 書き出されるけど、そういう話ではなく?
>>97 ああ、自作の場合ね
今のところサイズとクラスの名前程度しか書き出してないんだよな
セーブしたいクラスを、SaveとLoadを持つインタフェースを継承させて作る場合
バージョンを保持させる方法とそれに対応するLoad方法をどういう風にすべきか悩む
そもそもバージョンって、クラスに変更があるたびにversionIDを変化させて対応する方法と
変更したいクラスを継承して、そのクラスを使うようにするのとではどちらがスマートなのかな?
>>98 バージョンアップのために継承はちょっとないな
ソース管理が煩雑になりすぎる
versionidでif文だな。 バージョンアップで増えるメンバなんかせいぜい1、2個にしかならんし、 ソースもその方がスッキリさわやか。
>>98 自作の場合かー
俺はシリアライズするクラスは基本的に変更しない派だったな。シリアライザを
自作する場合、手の込んだ事をし始めるときりがなくて脇道にハマるので避けた。
クラスの変更許すとしてもメンバ追加のみ。メンバ削除するなら一旦仕切り直しで
既存データはバッサリ廃棄。どうしても捨てられないデータを新クラス用に
流用したい場合は仕方ないのでトランスレータ(コンバータ)作って新クラスの構造に
適合させてた
ちなみにメモリプールをガバーっと丸ごと保存する富豪的なやり方だったので シリアライズ/デシリアライズの仕組みを保存対象のクラスが(ほぼ)意識せずに 済んだ。参照についてのちょっとしたお約束を守るだけで、シリアライザ絡みの 仕組みを保存対象の定義・構造に侵入させなくて済む。ソースが汚れない
>>99-101 ありがとう。
>>102 俺も一括でガバっとやってみたいんだけど、ポインタを正しいのに変換する前に
一時的に古いアドレスがshared_ptrとかweak_ptrに入っちゃわない?
茶はNINE
>>103 pool_ptr(poorじゃないよ)という胡散臭い自前のスマポを使うので無問題だた。
中身は基本的に配列添字かプール先頭からのオフセットアドレス。あとは必要に
応じてインクリメンタルIDが入ってたり
ベクトルの長さというか大きさというか、ノルムの絶対値を表したいときの英単語って何使ってる? Scalarってなんかベクトル関係ない気がしてしっくりこない気がするんだ
速度ならspeed、距離ならdistanceみたいにパラメータの意味で名前つけてるな 名前つけにくいやつならlengthとかかな?
何のひねりも無しにlengthでいいと思う。magnitudeともいうのかな。 でもscalarは明らかにおかしい
両方サンクスサンクス、length良いね
はしごとかブロックのクラスの親クラスをつくろうと思うけど、オブジェクトクラスって名前じゃあれだし、なんかいい名前ないかな。
lengthって何?
113> マップチップは別にあるんです。障害物にしようかな。
変数やクラスの命名は専用スレあるだろ
おで 英語 だめ 意味 教える おで 喜ぶ
IDE というか、エディターのことなんだけど Visual Studio C++ Express 使ってコーディングして思ったことで クラスの private なメンバとかメソッドとかをインテリセンスに表示しない方法ってありますか? 呼び出せもしないメンバとかが候補に出てくるのが非常にうっとうしいので・・・
名前の頭にアンスコ付けて下の方に表示させる
なるほど最初に_がついてるのってそういう理由だったのか
アクセス制限の出来ない言語なんかだと、常套手段っぽい
アンスコ付けると一番上に表示されると思ってた。 普通にアスキー順かと。
何らかのシステムやエンジンでのコードでアンダースコア付いてるイメージがある そのシステムやエンジン上で走るインスタンス用のクラス、スクリプトではアンスコ付けない
ユーザーが頭にアンダースコア使うなよ予約済み識別子だから未定義動作になるぞ
それは知っててやってるんじゃないかな。 実際便利だろうし、どっちを取るかっていう。
じゃあz_ってつけるか
ダメになったら書き換えればいいだけだし問題ない みんなやってる
駐車違反みたいなもんか
未定義は文字通り「決まってない」ってだけで、理解した上で個々に使う分にゃ何も問題ないよ。
ファミコンのスーパーマリオブラザーズって、 なんで後ろに戻れない仕様だったの? 敵の管理面倒になるとかあるかなあ
>>130 今なら疑問だけど、当時なら考えも及ばなかったからでしょ
ロードランナーが掘りっぱなしの仕様だったら、それはそれで受け入れてるんじゃね?
色々と制限が厳しかったからな
出来ることを絞ることで、とにかく前へ進め!という開発者からのメッセージという可能性も。
後ろに戻れない理由があるとすれば、 ?ブロックの状態やコインの有無を記録してないからじゃね。 例えば、一回叩いた?ブロックを一旦画面外に出して再度戻ったら また復活するのを防ぐ、って言うのが筋の通る説だと思う。 ?ブロックだけならまだしも、コイン一枚一枚の取得を記録してれば 当時のゲーム機(カセット)の性能じゃ厳しいものがあったかもしれない。
マリオ3はカセット側のRAMでも使ってたのかな?
540 自分:NAME OVER[sage] 投稿日:2013/02/06(水) 22:56:08.62 ID:???
ファミコンのスーパーマリオブラザーズって、
なんで後ろに戻れない仕様だったの?
541 返信:NAME OVER[sage] 投稿日:2013/02/06(水) 23:30:52.59 ID:???
>>540 アレはおなかを下していて便所へ必死に向かってる最中です
急いで向かってる最中なのに戻る必要がありますか?
542 返信:NAME OVER[sage] 投稿日:2013/02/07(木) 00:33:21.55 ID:???
>>540 マジレスすると、後ろに進めるようにしてしまうと(勝手の分からないプレイヤーが)
行ったり来たりしまくって制限時間内にゴールにつかない可能性があるので、
一度行ったら戻れないように強制的に前進させる措置です。
「あの一本道のゲームで迷うアホな奴なんざいるのかよww」と思いたくなりますが、
ドラクエでも「城外から出発させると、王様に会うことすらできずに死ぬアホがいる。」と、
開発中に判明したため、鍵のかかった王の間からスタートに変更されたそうです。
吹いたw
素朴な疑問 俯瞰の2Dゲーム等で プレイヤーキャラの方向の角度0は右方向が一般的なのかな?(上方向が-90度 下方向が90度) それとも上が0度なんだろか
2Dで角度使うこと自体が稀だが、スプライトを回転させるようなときは上を0度にしてるな まあ0度がどこ向くかってこと自体にあんまり意味はないし作るヤツ次第じゃないの
俺は右が0度でそこから下向きに角度が+ってのが好きだけど
>>140 の言うとおり
作る奴が創造神なわけだし好きにすればいいと思う
そそ、想像主の思うまま 座標の関係上、デフぉの計算結果をまんまぶちこんだらおまいさんの書いた通りにはなるが
俺も上がゼロかな、何となくだけど。
自分は計算結果そのままブチ込みたいんで右かなー。
俺も悩んだけど、結局上を0にした。 そのほうが直感的にわかりやすいし、そもそも角度計算専用の関数をいくつか作るだけだったしな。
基準をどこに置くかというだけだから好きにしろ
滑らかに動くカメラってどういう処理だろう 滑らかというか、動かしてもカクカクしない動きというかモンハンみたいな感じ 動かし始めを加速、押している間は一定、離したら減速であってるかな
148 :
名前は開発中のものです。 :2013/02/11(月) 02:18:02.99 ID:PiTdn23M
>>147 スクリーンの基点の座標を2つ持っていて、現在座標と最終到達目標地点の座標。
二次元で、現在値を(px, py)、目標を(tx, ty)とした場合、
次のフレームのスクリーンの基点座標(nx, ny)について、
あるパーセンテージqをひとつ定め、
(nx, ny) = (px + (tx - px) * q, py + (ty - py) * q)
で計算する。
わかりやすく言うと、表示領域の移動を加速度で制御しているだけ。
リフレッシュレート可変だと微分方程式解かない駄目じゃね?
そのカメラの動きって、精密な操作を要求するゲームだったらトッププレイヤークラスになるとイラつきそうだな モンハンみたいなアクションゲームだと確実にいらない演出
>>148 これ補完の式だよね?
ボタン押してる間動かす、みたいなのには向いてない気がするんだけど
目標値をボタンで変化させてカメラの移動量を
>>148 で計算すればいいのか
現在値と目標値の間が離れてるほど移動量が大きくなって
目標値の移動量と計算結果が釣り合うと等速になるわけか
なるほど
パッドゲーで3Dアクションしようと思ったら視点操作悩むよね 一応ユーザビリティのためにみんなの鉄板策を聞いておきたいんだけど TPS方式(カメラの向きがキャラの向きと同一)は操作に対する旋回速度の調整が課題 @L-R → 旋回速度や上下の視点移動をどうしようかと悩む A右スティック → 右側4つのボタンと同時操作を要求するか捨てるかどうかを悩む モンハン方式(カメラの向きがキャラの向きに遅れて自動で追従していくタイプ)は キャラをターゲットとしてカメラが回転するため、カメラとキャラの距離(視野の広さ)が大事 @任意ボタン1つ → 押した瞬間にカメラが強制的にキャラの向きへ旋回。(クイックターン?) AL-R → 自動追尾に負けず回転できる。同時押しで@の効果など B右スティック → 左右でA、押し込みで@、上下でキャラとカメラの位置調整、など多彩
MHP3の討伐動画を色々眺めてたんだが このカメラアームのプレイヤー中心垂直軸回転ってアナログコントローラで 操作してるんだよね?もしそうなら入力データに弱い平滑化フィルタを挟むと コリッ、ヌルッとした動きにはなるよ あと、このカメラの平行移動成分はプレイヤーにきつく拘束された動きだよね。 自キャラに対してカメラがグニャグニャとフォローすると吐き気が起きるから 平行移動成分は基本的にキビキビした動きが好まれるし、キャラとの相対距離は 極端な話、固定でも大丈夫だよ
>>156 これ面白いね
頑張って敵の動きを目で追ってたら頭クラクラしてきたけど
画面中心でちょこまか動くキャラとパンツだけ注視して
敵と背景無視してたら結構楽しめたよ
というかこんな飛びまわれる3Dアクションでネトゲとかすごい時代なんだね FPSじゃなくてゲーセンのガンダムみたいにロックオンして戦うタイプなのかな
〜は既に**.objで定義されています。が滅茶苦茶でてくるようになったけど、 これってincludeの仕方の問題? エラーが出ている変数は1箇所しか宣言していないし。
ヘッダでexternでない変数を宣言しちゃ駄目だよ
c++でゲーム作るのに分かりやすい書籍orサイト教えて下さい
ニコニこで1時間でテトリス作ってみた見ると良いよ☆
>>162 「ゲームプログラマになる前に覚えておきたい技術」
しかしセガ本ももうだいぶ古いんだよな C++をオブジェクト指向ベースで教えてくれる新しい本が欲しい
それはいくらでもあるような、、、ゲームに特化してってこと?
もうC++は時代遅れってことだよ はやくC#かJavaに乗り換えないと 間に合わなくなってもしらんぞ!!
D 「やあ、呼んだ?」
スマポでシコシコやり始めてからC#で良いじゃんって思ってきた 企業とかが自前のCライブラリとか抱えてないかぎりC++でやる理由なんてない 今から始めるっていう素人は断然C#とJavaがいいと思うよ
スレ違いうざい
ネイティブで組まないならもうRPGツクールでいいじゃんって気がするけど
アクションゲームでステージセレクト(スーファミのマリオみたいな)と アクションステージに分かれる場合で、キー入力時のプレイヤーの動きが違うんだけど こういう場合はstatusFlgみたいなのを持っておいてそれの分岐で キー入力の制御をしたほうがいいのかな?
小規模ならそれでも良いけどこの際にゲームシーンについて勉強してはいかがだろうか
stateパターンみたいな方法ですか?1回みたけどいまいちメリットが分かってなくて 使ってませんでした。もう1回解説ページみてみます。
>>173 >>175 >Stateパターン
それもいいけど、まずは各シーンを関数化してみると良いんじゃないかな。
>>176 今、親クラスを作ってそれを各ステージクラスに継承させてます。
それでステージ管理クラスにlistを宣言してその中に各ステージクラスを管理させてます。
1個ステージ作ったからフィールド画面を作ったんですけど、プレイヤー移動とかが
アクションステージと勝手が違うからどうしよーと今悩んでて手が止まってました。
アクションステージなら右押したらx+1とかしてましたけどフィールドはその時選べる
ステージが変わったりするからどう制御すればいいかとか。
>>175 キー入力を管理するマネージャー1個作って、
if文でも何でもいいから条件次第で操作対象が変わるように作る。
これをコード的にすっきりさせるとstateなりのパターンに進化する。
2行目が分からないで3行目やろうとしてもメリット分からないかもしれない。
とりあえずこれでやれ while(1) { update_key(); switch(state) { case STAGE: stage(); break; case FIELD: field(); break; default: break; } flip(); }
うーん、>173が何に悩んでるのかサッパリ分からん。 キー入力を検知して、プレイヤーキャラクターを動かす方法が分からないわけでもない。 シーン管理が全く出来てないわけでもない。 アクションシーンと同じように、キー入力を検知すれば良いよとしか言えない気がする。
すみません。多分自分でもなにに悩んでるのかよく分からなくなってたのかも。 よく考えたらプレイヤーが移動する座標をどう決めようか悩んでました。 上下左右を押すとフィールド中の各ステージに移動するようにしようとおもってて、まだ行けない所とか行ける場所とかをどう制御してるのかを他の人に聞いてみたいです。フィールドクラスは毎回deleteするつもりだから保持できないんですよね。
stateパターンやね。 各々の状態で必要なパラメータを管理しやすい。 フィールドで必要なパラメータも担当stateに保持させておけばいい。 アクション画面でもマントマリオとファイヤマリオの 挙動・変数管理は異なるからstateパターンはオヌヌメ
ついでに言うと、キャラの位置情報程度ならとにかく、 ステージクリアフラグや道の開通フラグはフィールドクラスが持つべきだね。 どんなプログラムか知らんが、頻繁にフィールドクラスを deleteするのはおすすめしない。
全部シングルトンでおk
シングルトンて生成時にエラーだしたときどう処理するのがいい?
プログラム終了
return null through assert
assertは違うか
>>183 分かりましたー。
とりあえずdeleteしないような作りに修正してみまーす。
敵とかはステージ終わったらdeleteするけどゲーム続ける間ずっと使うようなものは
メモリに保持しつづけてたほうが良さそうですね。
ポインタにNULLを入れて何回でもdeleteしてやる
シーシーシー シーシーシー シーシーシー シーシーシー シーシーシー シーシーシー シーシーシー ろくなもんじゃね〜〜〜ぇ〜〜〜〜〜 ごめん。 深い意味はない
プログラム板のWin32のスレが全く機能してないんだが 既存の人がメシのタネ守ろうと必死なのかな、なんか悲しくなってくる フリゲスレみたいなのが荒れる理由はわかるんだけどねぇ
そういうのここで喋られても…
あそこはただの墓標だから 思い出した時にお参りに行く程度の場所だと思うべし
Win32APIを使って何をするかと言われてもな。 大概のことは.netでもどうにでもなるし、ゲームで必要なことは Windowの作成絡みとスレッド絡みであとはDirectXだし、 よっぽど無茶な事を考えない限りはWin32APIは使わないからなぁ…… ネット絡みとか、VirtualAllocやHeapAlloc関連でメモリーを自前で管理するとか、 UIを自前で作るとか、せいぜいそのくらい?新しいAPIとか増えてるには違いない けれども日本にはあんまし情報が入ってこないし……
行って納得した。荒廃しまくってるな。
WebProgのPerlスレも同じように変なのに占拠されてる 名前は知られてるけどちょっと落ち目なスレと理解すると そのうちC/C++も……かな
C#はお気楽に使えるけど、C++の代わりにはならない部分が多いなぁ
よしぼくにお題をください! 完全なるnoobで何も作ったことないけどそれを目標に取りあえず頑張ってみるんだ!
>>33 >そんな便利な方法がスクリプトを使う以外にあるなら教えて欲しいな
便利な方法というか、機能分割やら結合度ならは構造化設計の基本だし
これは別にスクリプトでなければ出来ないというような話ではないかと
>例えばマルチスレッドは、同期の問題やらメモリーの問題やらがあるから扱いに手間がかかりすぎる
どういう使い方をしてるのか知らないけど、ターゲットハードウェアが
そこらのPCであればSMPの素直なスカラー機だから並列プログラミングに
ついての先人の知見は豊富だし各種ライブラリもあるわけで
で、スレ趣旨に従って無難に2DSTG前提とすれば計算リソースについては
別に厳しい要求にはならないわけで、並列処理の粒度が粗い、オーソドックスな
マルチスレッドプログラミングで問題ないわけで。例えば
・ファイルI/O
・サウンド
・グラフィックス
・OSとのメッセージ処理
・ゲームのシミュレーション部
のような分割単位で。シミュレーション部なんかシングルスレッド処理でも
別に問題はないと思うよ?
>後、スクリプトの保守性の容易さもスクリプトを用いる要因として挙げておく
>バイナリーデータで作業するよりテキストデータで作業する方が楽なんだよ
>
>他には、プログラムは上から下に読める方が楽というのもあるな
C/C++のソースコードはテキストだけど
ごめん。誤爆した(泣)
ゲームならとにかく他のアプリならWin32API使いそうなもんだけどなぁ。 ここかWindowsスレで質問すればレスはあると思うよ。俺もUIで結構使うし。
とにかくとともかく、一字違うだけでだいぶ変わるな
お前らRTTIって使ったら負けだと思う?
場合によるとしか
じゃあ型名をハードコードするかtypeid使うか
何か適当なコードをでっち上げて欲しい
dynamic_cast大好きです…
>>208 cons_castしまくりです…よりマシ
セーブ&ロードのためにポインタの値(アドレス)をシリアライズしたいとき reinterpret_castしてintptr_tで保存しておくのと static_castでvoid*で保存しておくのどっちが良いん?
そもそもポインタの値は保存しないんじゃ
実行時型情報で思い出した。 シーン遷移周りをStateパターンで組んでるとして、 特定のシーンクラス(派生クラス)にのみ必要なメンバ変数&関数にアクセスしたい場合、どうやるのがスマートかな。 自分はdynamic_castを使うことが多いんだけど、 他にも派生クラスではなく基本クラス側に持たせる(関数ならオーバーライドしておく)とか、 あるいは汎用変数やmapクラスを用意するとか、色々と考えられると思う。
基本クラスに持たせるのは、コード数は減るけど可読性は落ちるから辞めた方が良いとおもう 全シーンで利用出来るものを用意して、 使わないシーンからはアクセスしないだけで良いんじゃないかな。 同一レベルのstate複数個で使い、かつstateレベルで共有しているなら、 他のstateで使えても問題ないんじゃない?
インタフェース(基底クラスでもいいけど)に無いメンバ呼び出しは筋が悪い気がする できるなら外に追い出したい
普通の関数と仮想関数はそれだけで5〜8倍程度の速度差があるわけだがどの程度気にするべきか シーケンスはどこまで分割するべきか 常に悩みながらやってます
>>213 俺も同じようなことで悩んだけど、調べても考えても
dynamic_castかシリアライズ→復元でお茶濁してるのしかなかったんだよね
自分の解決では結局のところ『特殊な機能』を使うんだから、
修正が入ったらそれを使用してるクラスはどうせ丸ごと変更になるだろうってことで
必要な部分をシングルトンっぽく露出させて使うにしたよ
COMみたいなインターフェースは大げさだし記述も両方で大変 Cで書くような構造体にサイズとか種別IDいれて後ろに付け足しは汚いから dynamic_castが結局シンプル 個数が固定で決まってるなら外に出しちゃう
偉い人に聞いてみたら、生成した派生クラスを親クラスのポインタに渡すときに、 別途に派生クラス型の変数を用意しておいて、そっちでも保持しとけばいいんじゃね?ってゆわれた。
そもそもどういう使い方しようとしてるからわからんからなんとも言えんね Scene(インタフェース)のListに対して順番にUpdate()かけるだけなら他の関数なんて使う余地ないし シーンAの中で、シーンBに対して何か特別な処理がしたい場合において ↑のSceneListからアクセスしようなんざ愚かだよ。 シーンAに対してシーンBを本来の型でSetする機会が必要
自分がよくやるのは、ステージセレクトシーン←→ゲームプレイシーン でステージIDを渡すとかかなー。
222 :
221 :2013/03/01(金) 16:59:58.23 ID:L5FLY5wp
途中送信しちまったい。 まあこれくらいならdynamic_castは必要ないけど、特別な処理をさせる例として。
223 :
名前は開発中のものです。 :2013/03/01(金) 17:10:39.47 ID:avTV/sid
シーンAの中でシーンBにアクセスするというところが間違ってると思う アクセスしたくなるということは同一のシーンでやるべきものだ
汎用的につかえるデータを親クラスに持たせとく
一つインタフェースを作るとそれですべての要件を満たそうとすることあるよねw
シーンという抽象モデルでは説明出来ない属性(ステージID) シーンという抽象モデルでは説明出来ない通信(ステージIDのやり取り) シーンという抽象モデルでは説明出来ない関係図がそこにあるんだから シーンとは別の(独立の)抽象モデルを用意して、シーンなんか介さずに そいつ等同士でステージIDをやり取りさせたほうがいいんじゃないかな
むしろそれ普通だと思うが
あ、ごめん。
>>226 アンカー忘れ。
>>221 宛てだった
>>227 うん。このスレの他の人もそんな感じの事を言ってるのかなーと感じてたんだよね。
あと、
>>219 の中の偉い人?の言ってる事は「シーンがステージのスーパークラス
ってのが何かおかしくないか」という示唆を含んでるように読めるなぁ、と
意地悪な話、例えばステージの途中でカットインでムービーシーンが入って
またゲームに戻るというようなゲームにとっては、ステージの中に幾つもの
シーンがあることになるわけで、シーンとステージの関係はis-aじゃないよね、と
シーンっていう言葉の捉え方が色々あるのかな。ゲーム界隈でのその辺の慣習は
よく知らん
>シーンっていう言葉の捉え方が色々あるのかな。ゲーム界隈でのその辺の慣習は >よく知らん それあると思うわ。単純に 「シーン」 とだけ言うと 場面 でしかなくて、 それが例えばゲームロジックとしての論理を含むのか、あるいは描画物だけの物理を含むのか、 みたいな切り分けは、千差万別かなと思う。 人によるってのもあるし、その時の製造物の都合ってのもあるし。 複数人で作業するような場合、その案件の頭でキメとして置く(設計範疇)かなと思う。
参考になるもの無いかなと探してみたんだけど、
セガ本だと「シーケンス遷移」という名前で、その中にゲームロジックと描画が突っ込まれてるな。
あくまでも学習用なので、本職がどういうやり方をしてるかまでは分からんけれども。
>>225-226 それもそうかー。
あんまりそういうモデルを増やすのも、混乱のもとだと聞いたことがあって避けてたんだけど、
それでシンプルになるなら採用するべきってことかな。
>>230 いま実装している内容は、って言う「意味」を考えればわかる事だけど、
別に本職だからとかアマチュアだからでわかれる訳じゃないし、決まった教科書がある訳でもなくて、
案件次第やその時の状況次第や、内容次第。
232 :
名前は開発中のものです。 :2013/03/08(金) 02:57:36.03 ID:oANaMNbR
弾や敵にlistを使う場合を学びたいのだが なんかどこも配列を宣言した講座ばかり、、 書き手が受け売り素人だから配列でやってんのかな listやvectorを利用して弾や敵を回す エレガントなプログラム記述方法を教えてくれるサイトはないかな?
やることそんなに変わんなくね?
自分でlistやvector版に置き換えればいいだけじゃね?
listは追加と削除が多いのに使うんじゃないかね。 弾や敵というのは座標を変更または確認するのが多いし、向いていないんじゃないかと思う。 classについて知っていなかったらclassについて学んだほうがおすすめ。
オブジェクトごとの描画順を気にする場合はlist使うね。 使うといっても、イテレータ回したり insert,eraseの基本的な使い方しかしないから わざわざゲーム用のサンプルコードとか要らんでしょ。 処理速度以外は、listで出来る事はvectorでも殆どの事が出来るし。
そんなことも自分で書けないのか 向いてないから死ね
こういうやつの所為でtesとかfoとかwowとか 面白いゲームが作れないんだろうなぁ日本は
そんな面倒な事しないで萌え絵のおっぱい揺らした方が日本の場合売れるし
つまらん、ここ二三年日本のゲーム買ったことない
誰もお前が買ったゲームなんて聞いてないんだが
まあ日本のゲーム業界はまじで下火だわな ゲームじゃやっていけないから駅前のチョンギャンブルの台作ってる会社多いし
>>242 これは職場で感じてることなのか、
それともネットで見た感じの良くある話なのかどっち
>>243 職場に決まってんだろ・・・・。
名前は出せないが。
>>244 その場合って、やっぱアレか
新規事業開拓で新しい業務ジャンル受注開発とかやっぱする感じか
どこだかの会社がインフラ案件請け負いとかに手出してたな
>>245 正直初めた時点ではパチンコスロットのノウハウまったくないから別のそういう会社にアウトソーシングしたりとか
そういう会社でも潰れてるところあるから、そっからノウハウ知ってる人材拾ってきたり・・・・
今までほとんどハード触らなかったけど、いきなりばりばりに機械触らないといけないから苦労してるよ
プログラム組めても、パチやスロのハード面まったく知らんからな
そんなの一回組んだら後は使い回しでグラと音を差し替え作業するだけだろ
>>247 わかってないのに何いってんだ?
パチスロの中の映像チップにも○○製ってあって、会社によって仕様が違ったり、しかも下手すりゃ添付のサンプルプログラムがバグだらけでゴミすぎたりすんだが?
C++スレで何故ゲハの話題になってるんですかねぇ。
パチンコ台がゲームハードと言えるかどうかは微妙だな
業界の話は板違い。ローカルルールみて確認してくれ。
自治厨死ね
>>235 はあ?
お前ゲッターやセッターを作る事を知らんのか?
ネットで講座とか書いてる奴は
>>235 みたいな奴ばっかりなんかなあ
3Dの攻撃判定とかってどうやって作ってる? やっぱり4箇所の変数(XYZ*4=12)でその中に相手がいるか判定するのかな
>>254 classでゲッターやセッター作ってやったことあるよ。
listで作ったことはないが。
254が何に反論してるのかが分からない…
>>255 当たり判定だよね?
基本は2Dと変わらんはずが、それよりもその数式の意味が気になる
>>258 2DはX〜X、Y〜Yの間の座標に敵座標があるかどうかで判定出来たんだけど
3Dはどういうのが一般的かなと思って
ちなみに上のは矩形の四方の点の座標(一箇所XYZセット)のつもりだけど
良く考えたら4つじゃなくてX〜X、Y〜Y、Z〜Zで3つでいいなw
>>259 2Dは矩形内に座標かあるかどうかで判定できたけど、
3Dは直方体で同様の判定するのがポピュラーなのか、って話か?
もうちょっと日本語を推敲しなされw
まぁ(1)矩形(直方体)で判定するか、
或いは(2)オブジェクト一つにつき座標一点を定めて、
座標同士の距離の近さで当たり判定する、のどちらかが一般的。
座標距離の算出は三平方の定理を使う。アルゴリズムは2Dも3Dも変わらん。
ピンボールのボールような衝突角度によって移動方向が変わるケースは
もっと複雑になると思うが普通は上述のどちらかで充分。
「当たり判定 c++」でググってみなされ。
2Dでも回転する矩形同士の判定は途端に難易度上がって泣きそう
あたり判定全部球にしてるわ
263 :
名前は開発中のものです。 :2013/03/10(日) 15:50:08.74 ID:4172Jfr3
比率によるなw
縦長横長はなんとかなるけど、斜めが鬼門
□と◇でいいじゃん
細かい球をいっぱい作ればいいじゃない
だからー、ゲッターやセッターの存在を知ってる奴なら 「座標を変更したり確認したりすることが多いからlistは向いてない」 なんてすっとんきょうな台詞吐くかよ? ってこと。 基礎中の基礎の配列でしか弾や敵を設定出来ないとか バカじゃないのかね。 まあネットの講座じゃ配列で設定した 基礎しか拝む機会がないから listで作ったこと無いとかいってるんだろうけど 恥ずかしいから言わない方がいいよ?w 本来、配列で最初から定義するのはナンセンスなんだからねw
>>235 は、listのコンテナに
classを使えることを知らんのだろw
勉強するべきなのはお前だよww
listは線形探索しかできないから頻繁に参照するような処理には向いてないと思うんだけど なんか間違ってるの?
弾は毎回全部参照して処理するだろうし線形探索でもいいんじゃね
普通は当たり判定とか順次走査で処理するわけだし 特定のオブジェクトの参照はインデックスの代わりにイテレータを持っていれば良いし ランダムアクセスで得する場面がソート後の要素の検索ぐらいしか無さそうだけど
別にリストでもいいけどあんまりメリット無くねって感じ
>>268 listの要素にランダムアクセスするときはアクセッサ関係ないだろ。
アクセッサ知ったばかりで使いたいお年頃なんだろ
multiIndex使えよ あとイテレータをどこかに保持させておくのは危険だぞ
単純に線形探索だけ見ても、vectorの方が速度的に有利だぜ。 うちの環境で最適化かけた場合、所要時間が10倍くらい違う(もっともコンマ何秒の世界だがw) あとvectorの方がメモリ空間を汚さずに済むとか、リソース管理が楽だとかってのは、そろそろロートルの意見か。 データの持ちようによっては、VRAM側にデータを渡すとき、まとめてコピー出来て良いなんてのもあるかな。
おっと、vectorと書いたが、配列のつもりだった。まぁ、同じ様なもんだけど。 探索の所要時間も、イテレーターによるアクセスじゃなくて、直接の場合ね。 vectorが、連続するメモリ空間(配列)で実装されるってのは、確か保証されているはず。
保証されてるね
vectorと変数の配列が一緒と思ってるバカw あと、listを使うメリットが見当たらないとか ほざいてるバカは そもそも配列を宣言することと、vectorやlistを利用することの違いを わかってないだろw
まあ確かにlistは乱数で呼び出すことには向いてない イテレータで回すことしか出来んから。 ただ、だからそういう場合はvector使うんだよ、と。 とにもかくにも、変数の配列宣言なんて なんかの予備用ととして作っとくくらいで 敵や弾に使うなんてメモリの無駄使いでド素人丸出し。 頭の良い講座で配列教えてんのは初心者の為にそっからやってるだけ。 ただ、俺としてはその次、listやvectorで敵や弾を作る講座を書いてやってほしいよな。 バカじゃなけりゃ、削除や追加を頻繁に行うもの(弾や敵)ならlist、 読み込むだけの配列(アニメパターン)ならvector、 これが一番合理的なんだよ。 その理由がわからんならlistやvectorへの理解が足りてないだけ。 理解してりゃこんなこと当然のことなのに、噛みつき返すとは このスレにはに初心者しかいないのか、、 そりゃそうか、知識どころかてめえでゲームひとつも完成させる根性もない奴ばっかだもんな ココは。
俺はvectorを組合せて自前で作ったlist構造使ってる 主にメモリー対策なんだがな
オブジェクト単体のサイズなんて限られてるし、 newやメモリアロークの処理速度ロスの方がよっぽど怖いのだが。 そもそも、STLコンテナの使い道が明らかにおかしいレスが見当たらない。 ID:pXjjQn2kやID:aOvUtiS/は勝手に興奮して何に突っ込んでるんだw
その辺の議論と検証は記憶に新しいんだけど、前スレでやってなかったっけ
listって断片化したりしないの?
そりゃ実装次第だろ
ここまでmapの話題なし
setの話題が出ることは永遠にないな
追加や削除を頻繁に行うものはdeleteしないでプールして使いまわすんだよ。
ちょっと聞きたいんだけれどもSTGで自機と弾のクラスを作るじゃん class Myship{ public: void Updata(); void Draw(); }; class Bullet{ public: virtual void Updata()=0; virtual void Draw()=0; }; でこれらをlistなりなんなりに入れて毎フレームうじゃうじゃするじゃん ここでもし自機誘導弾を作りたくなったら誘導弾は自機の座標を知らなきゃいけないわけだけれどもどうやって教えるのがスマートかな
だからmap使うんだよ 自機オブジェクトのIDは0とか決めといてmapに登録しとけば、 O(1)の速度でアクセスできるだろうが馬鹿が
自機だけでいいなら自機の座標持ってるインスタンスのポインタどっかに保持しとけばいいんじゃない
MyShipにGet座標()が無いから、それを実装するかどうかも含めてどうすればいいって意味かと思った そのままでいくなら誘導弾のメンバにstaticで座標のポインタもたせておいて Myshipの作成時に登録したらどう?
O(logN)でしたごめんなさいでした
ん、ハッシュ使うしそれでいいんじゃ?
チキンだからハッシュ使うと衝突やメモリ効率が気になる
攻撃目標が一つだけなら、俺だったら自機をシングルトンにするかな?
stlのmapは木構造だろ、確か赤黒木 だからO(logN)であってる
ミサイルを撃つときにターゲットを渡せばいいじゃん それなら自機に対するミサイルだけじゃなくて、敵に対しても使える
300 :
名前は開発中のものです。 :2013/03/12(火) 01:19:04.97 ID:r7H9poF1
誘導弾は弾じゃなくて敵にすりゃいいだろw なんでこんなことも思いつかないの
>>300 の発想が天才的過ぎてよく理解できないんだけど
誰か説明してくれ
桜花的な
you do done
やりたいことはわかるが、それによってどういうメリットが生まれるのかが見えてこない
最近、宇宙と交信してる奴がいるなぁw
草の人は、他人をディスらないと死んじゃう病だから
グローバル変数でやり取りすれば良いじゃん
規模の小さいうちはグローバルでもいいんだけどな 徐々にまとまり悪くなるよ シューティングとして形になるサイズまで大きくなったらかなり厳しい
やりたいこと
1. for で auto を使った iterator で回したい
2. for で何ループ目なのか知りたい
やったこと
1. for(auto itr= vec.begin(), int count= 0; ...
はコンパイルエラー
2. 仕方なく int count を for の前で用意した
でも、for 内で使う変数だしスコープ的に for の中に入れたい
という問題を抱えてるんですが、何かいい解決策ないかな?
以下に現状のソースコード上げておきます
http://codepad.org/j9OOrEj7
気になるなら { int i; for(){ } } こんな感じでブロック構造にすれば? あとiteratorで回してるのにカウントアップが必要なケースは少ないはず。 ロジックを分離できる可能性があるのでそっち先に検討かもしれない
auto count = std::distance(vec.begin(), itr);
>>311 実装見たら(vs2012)、結果のカウント値に対して線形で重くなりそうだった
ループ内で使うには厳しいかも?
イテレーターからbeginを減算してみたら?
つまんないことにこだわるのをやめるのが一番w
>>312 他の実装は知らないけどVCのvectorならO(1)だと思うよ
vecって名前だけど別のコンテナ使ってるの?
どうでもいいけどvectorのつもりでdequeを使ったらえらい遅かった
よっぽどのことがなければもうつかわねぇレベルw
>>315 off += _Lsst - _First; ってのあるけどvec用かな。
他は、forで回して見つかるまで++iして見つかったら返してそうなコードが
とても気になったw
たいして変わらないだろ。 プリミティブかポインタを入れているわけだろ?
おいおいiterator_tagとか理解してんのか?
いろいろな方法があるもんですね
iterator 使ってるのにカウントが必要な理由として、
メニューにアイテムとかの項目を表示させるとき、
ループ回数を利用してずらして表示させているからです
今回は
>>310 の方法でやってみようと思います
ありがとうございました
>>320 なるほど。
今回はやらんで良いとおもうけど
for_each()とファンクタを理解しておくと設計の幅が広がるとおもう
>>313 が言ってるのはこれ?
d.hatena.ne.jp/kogecoo/touch/20090731/1248994749
こまけぇこたぁいいんだよ
directx11で3Dモデルのアニメーションやろうとしてるんだけど何か良い方法ありませんか? Xファイルからsdkemeshとsdkmesh_animへの変換がお粗末すぎて何も出来ない状態なんです。
>>326 Xファイルをやめればいいんじゃないでしょうか
モルダー。あなた、疲れてるのよ
>>326 なんで xファイル使ってるの
自前でいいじゃない
>>330 DXUT使ってるからなんですけど、、load関数手書きしないといけないのか…?
9+Xファイルなら難なく動くのに11+sdkmeshファイルだとややこし過ぎる。。
>>328 アニメーション無しのモデルはsdkmeshで表示できています。
アニメーション有りのモデルはpmdとか別のファイル形式でってことでしょうか。なんか変なような。
おとなしくUnityちかっときゃよかった
チクショウ! C言語のポインターが解んねーよ!! 難しいお!!
カーネル、シェル、モノリシック、マイクロカーネル… サッパリ解らん…
はあ…、 FBX→sdkmeshを試みるもツールが3年前のもので、更新が多いAutodiskの最新版FBXSDKと仕様が合わない。 まあ当然か。
どうでも良いことだがA列車9とA列車8は3Dモデルのアニメーション使ってないことを発見した。 恐らく処理量が多い故にアニメーションを用いて無駄に重たくしないためか、ARTDINKの技術力の限界だったか。 いずれにしろ工夫でなんとかなるもんかな。
PS4みたいな次世代マシンだと、もうLODとか使わずに 程々のポリゴン数のモデルに制御点?を焼きこんでデータ作成する流れになるんだろうか 多ポリゴン化はハードにお任せするかんじで
ボーンの事だな
なんでも掲示板見て思ったんだけど、最近シングルトン流行ってんの?w
テッセレーションとポリゴン数増加は方向違うんじゃないかな
>>337 >>340 テッセレーションとLODをどういう意味で使ってるのか知らないけど
例えばDistance Adaptive TessellationはLevel of Detailのためにテッセレータを
使うわけで、だからLODとテッセレーションが排他的みたいな話にはならないと
思うけど?
言葉足らずでした。 これからはLODのためにローポリのモデルを何個も用意する必要がなくなっていくんすかね先輩? という意味です
基本的にはMIPMAPのようにLODを楽にやりたい、自動化したいという要求が ずっとあるから、だからテッセレーションを気軽に使えるようにGPUを強化したり APIを改良したりツールを使いやすくしたり、関連アルゴリズムについての パテント縛りを緩くしたりといった流れがあるんじゃないの? 自分は趣味ではローポリ大好き人間だから常にあらゆる計算リソースを余らせてるし だからLODとか(ある意味で)貧乏くさいことやらずに力任せ法で(ある意味)富豪的に 描画しちゃってるけどね
PCは楽でいい。仮に処理が重くなったとしてもハードウェア面で「パワー付けろよ」 で済ましてもなんとなく許してもらえる空気がある(ような気がする)から
3Dモデルを緻密にすると失敗した時が見れたもんじゃねぇ・・・('A`)
はぁやっとジャンプの挙動直った 空に連れてかれてたから謎だったわ みんなモデリングソフトとモーションソフト何使ってる?
俺はメタセコイアとBlender
メタセコイアとmikoto
メタセコは感覚的に作れるので重宝するよね メタセコ作業の終わりはモデリングと手書きテクスチャまでかな ボーンまで入れるのが一般的?
俺はblenderだけ 感覚的に素早く作れるってのがデカい
Blenderで感覚的に早く作れるってお前は天才か。
自分もモデリング入門者だった頃はメタセコ便利って思ってたが blenderのショートカットと機能量に慣れてしまうと、当たり前だけどこっちの方がかなり楽で早い、ってだけ 経験者としてのマジ話
そもそもBlender使いのいる前で「一般的(なワークフロー)」を聞くこと自体に 何やら挑戦的なものを感じざるをえない(被害妄想) というのは置いておくとして、こういうのは一般的かどうかと聞かれても 「場合による」「好みによる」としか言えん気がするんだよねぇ・・・ だって後段のツールの特性、受け渡しやすいデータ形式、それにメタセコが フリー版かシェアウェア版か(プラグイン使えるかどうか)とか、事情は色々だし 今はツールの選択肢が色々ありすぎて悩むのかね。好きなの選んで好きなように やればいいだけなのに、変なのー
何言ってるのかわからないが、好きなの使えばいいじゃない 『天才か』とか変なレスついたからマジ話しただけで、別に他人の道具に興味は無いよ
>>353 昔に比べたらだいぶ日和ってきてる気もするけどね > Blender
すまんこってなんだよちゃんと反省しろよ
なんだよ俺のせいかよw すちんこ
というか、モデリングソフトはいくらなんでもスレチ。
ではここでコンシューマゲーム業界から滅ぼされたドッターの恨み言をwww
やはり、MSペイントこそ至高
Edge使おうよ。どうせ256色も使いこなせ無いんだから。
ドッターのレス、ほとんど無かったのな。ちょっと残念。 気分転換にCG板行ってくる。
数当てゲームできたよ
C言語でRPGを作るとして、 20ターン以内に倒したらご褒美とか ああいうプログラムをC言語で組むんならこんな感じでいい? int t; /*戦闘ターン int bhp; /*敵のHP for (bhp = 0xa0000; bhp <= 0x00; t++) { /*バトル内容の処理 } /*int tが20以内だったらご褒美
for文の中で描画も入力もすべてやってるとか for文の中でコルーチンとか使ってるならいいんじゃね tが初期化されてないけど
戦闘結果をまとめた構造体を渡して好きな処理するってところかな? どのみちC++の方が良いと思うけど
>>367 これforん中、実行される?
あと、tの初期化は?
まあイメージは判るので細かいツッコミはいいとして、あとから読む場合わかりにくい気がするな
while(bhp>0x00 && t>0)
{
//バトル処理
t--;
}
可読性の方として、こっちのほうがマシな気がする
サンデープログラマの戯言だがな
動けばなんでもいいやだったらそれでいいんじゃね?(適当)
>>367 敵を倒す側もいるからwhile( 1 )で無限ループ状態にしてそん中にt++もいれて、
敵のHPまたは味方のHPが0以下のときはbreakさせるって方法のほうがいいと思う。
それで戦闘が終わったらif( t <= 20 )で処理させればいいしな。
>>372 なるほど!
あんた天才だな!
それでやってみます
原始的に見えて高度な話題だなw
375 :
名前は開発中のものです。 :2013/03/25(月) 22:58:12.49 ID:X+5gEBFD
残念ながら今どきループとか、かなり原始的w 高度ではなく中度だね。 上位層には優越感と懐かしさを感じさせるトピック。
いやたぶん別スレッドで描画処理が動いてるに違いない
ループに懐かしさってどんなゲームでもループ処理はしてるだろ
ループが原始的って、今はどうしてるんだ?
イベントドンブリとか(適当)
時代はgoto
デザインパターン使ったりオーバーロード使ったり メタプログラミングしたり手続き指向になってくると ループの感覚が徐々に薄れるかもな
どうするんだろう・・・
383 :
名前は開発中のものです。 :2013/03/26(火) 01:09:58.78 ID:iORSs9FM
objective-cとかだと○秒後に処理起動みたいな繰り返しでループ風にできるな
その繰り返しをどうやってするんだ?
そいつあゲームループのほうかと
誰だって最初はそういうところから始めるだろうに、なんで引きずる必要があるの。
>>385 処理を再帰的に遅延実行して同じ処理を繰り返す
javascriptなんかもそんな書き方するな
Unityも、イベント丼で定期的に呼ばれるだけだな
処理の上流は
>>381 っぽくなってると思うが
フレームワークなんか使って開発してるとプログラマがメインループ書く機会はないかもな ループ自体がないゲームっていうと…コマンドラインで動くテキストだけのゲームとか?
ループ処理がないゲームなんて存在するわけなじゃんw
>>375 がプログラムとか何んにも知らない素人で
昔のゲームはループ処理を使ってたが
今のゲームはループ処理は使ってないとかw
とんでもないことを思ってるだけでしょう
俺はプログラマではないが、それぐらいはわかるよ
まぁタイマにコールバック仕込むとかfiber使うとかやりようはあるけど 処理の繰り返しって意味では普通ループだよな
それ以前にメッセージループ自体がループでしょうにって話が出てこないのが謎
そもそも、プログラマ同士の話はループするしな。
ゲーム起動一発で結果が出るゲームかもしれないじゃん
>>393 別に謎じゃないと思うよ。みんな優しいから
>>375 に合わせてるんだよ
375 : 「私の視点から隠蔽されてる制御フローは“存在しない制御フロー”」
これはぺーぺーの兵隊さんの中の上位、つまり上等兵さんだよ。一等兵に優越する
「下手の考え休むに似たり、余計な事は考えず与えられた道具で仕事こなせ」
という上官命令に忠実。そして使ってる道具も優秀だよ。道具の利用者である
>>375 は道具の実装の詳細を知らずに済んでる。
>>375 が使ってる道具は
OODの設計原則に忠実であることが伺えるよね
RPGのアルゴリズムが知りたい
RPGなんて見た目通りじゃん わからないならプログラマーやめろ
int main(void) { init(); while(1) { check_key(); update_obj(); draw(); flip(); } }
RPGは作るの面倒だよ
ツクールでおk
すごく大雑把な質問投げて、 自分で考えられないから正解下さいってのは良くない
メジャーなジャンルはやり込み・攻略(≒動作を観察≒リバースエンジニアリング) して参考にできる過去の名作沢山あるし、過去の積み重ねのおかげで様式美が色々 あるからオーサリングツールの類も発達してるし、RPGだってツクールとかウディタ 使って素直に作れば取り立てて手間隙かかるジャンルではないよね。楽しいよ まぁ、何でもかんでもホームメイドで通す趣味嗜好なら手間隙かかるのは最初から 織り込み済みだろうし、ややもすれば手間隙かける事が目的化してるような危篤な 人だろうから、面倒とか言い出すことはないんじゃないかな。自己否定になるから
日本語でおk
RPGに限ったことじゃないが 「○○のアルゴリズムわかりません教えてください」系の人間は ヌルゲーマーというか、ゲームあんま好きじゃないよな 対象の事をよく知らんからロジックが想像できるわけねーっつー 我流のシーケンス図とか判定表とか一生懸命時間かけて自作してる その辺の小中高生なんかにはものすごく親近感を覚えるんだが わかりません教えてください系の人間にはどうにも理解困難
結局シナリオを作りたいだけなんだよ 根底のライブラリとか技術にはブラックボックスのままで理解しようとしない 表層のたいしたこと無い画面エフェクトとかの演出には興味持つ
ハード側の技術者から見たらプログラマも同じようなもん
>>406 > 根底のライブラリとか技術にはブラックボックスのままで理解しようとしない
これは別にいいと思うけどな
特にハードウェアに近い、低レベルな部分とか、必要なければ高レベルの
俺もライブラリに全部投げるよ。現にそうしてるしDX11とかよく知らん
元々ボードゲーム好きでN-88BASICあがりの人間なので
ハードがしょぼ過ぎて遅くてイライラして仕方なく一部をマシン語で書いて
計算速度をあげたりGDI(グラフィックス関係のチップ)を制御したりしてたけど
必要に迫られてなければ別に使い方を覚えることもなかったクチだな
>>403 が言うようにテンプレ化してる部分はツールにお任せするのが好き
>>408 訂正
×必要なければ高レベルの俺もライブラリに
○俺も必要なければ高レベルのライブラリに
N88とか懐いな 俺の原体験はmz700だ
趣味でゲーム作る奴の一番の障害はリソース作り
個人的な好みとお断りすれば
ゲームの核心部分、ボードゲームで言えばルールブックとそれに基づいて
ステートの計算とか交換とか状態を遷移させる部分とか
この辺さえ思い通りに作らせてくれるんであれば、それ以外の部分については
ツール・ライブラリ・フレームワークは使いやすきゃ何でもありかなぁ
なんでC/C++使ってるのかって?慣れ、惰性。もうオツムコチコチやねん
>>410 あ、先輩。ちっす
>>408 訂正
GDIじゃなくてGDCだた。記憶が覚束なくなってるな
今ちょうどドラクエもどき作ってるけど結構大変だな きちんと処理考えないと未来の結果まで表示しちゃったりするし スキル関係で色々なギミックを入れてくとさらに混沌としそう
漫画家でも絵が下手にもかかわらず面白いマンガ描く人もいるしな。 とはいえ、やはり絵がうまい人が圧倒的多数だし、 その方が表現したい事を表現しやすい。 ただ技術ばかり磨いてもどんなゲームを作りたいか見失えば本末転倒な訳で。 プログラマは策士策に溺れやすいって言うか。 気をつけなきゃいかん。初心者は特に。 俺は、最初はVB6で、それからC++だったなぁ。 C++に移行したのはVB6がオワコン化したのと遅いのと。 ゲームの規模が大きくなって オブジェクト指向なコーディングをはじめたのは良いが やたらめんどくさかった。それもあったかな。 DirectXは昔から何回もチャレンジしてるが結局身につかん。 結局DXライブラリ頼りだよ。それで充分だからってのもでかいな。
>>414 どの時代のどのタイトルのドラクエを作ろうとしているのかにもよる
FC版のDQ1だったら楽でしょ
BGMと画像を含めても容量は512KBitしかない
容量だけで全てが解れば誰も苦労しないな 容量は、目安の一つに過ぎないから
512KBitぐらいだったら一人でも軽く打てる文字数だと思う BGMや画像を除けば、もっと少ないので それぐらいの文字数だったら楽勝でしょう
実行バイナリと比較して何を言いたいのか。
ID:105lsrMRに、出回っていたドラクエ(もどき?)のマシン語を見せて、分かるまで閉じ込めてやりたいw
STG系でもたまに「○○(レトロゲー)なら簡単に作れるだろ」とか
臆面もなく放言する知ったか坊が出現するしな。よくわからんのう
あと、すぐに「容量」という意味不明な基準を持ち出すところとか
癖なんだろうね。で、他の板でも既視感があるなぁと思ってググッたら思い出したよ
bizplusで目撃した割れ坊の発想と同じだわ
http://dat.2aa.jp/bizplus/1343181212.html > 80:名刺は切らしておりまして[]:2012/08/05(日) 13:50:33.38 ID:A13mDAot
> 30MBくらいの糞ゲーが主流だしな・・・・・・・
> せめて1GBくらいのゲームだせよ
> 84:名刺は切らしておりまして[]:2012/08/05(日) 18:28:31.93 ID:qDUDuH7l
>
>>83 > 何も知らないんだな、最近の携帯ゲーム機用のゲームを買ったことないんだろ?
> 1GB〜3GBが主流なんだけどな。じゃなくても100MB以下なんて間違いなくクソゲー。
> まぁ100メガショックどころか8ギガショック以上が普通なんだよ。
この動物の話し相手をしてたんだけど、やっぱ似てるよね。作る人の視点とは違うよ
限られた容量と性能で表現するのがどのくらい大変なことかわかってないんだな
スーパーマリオ見せたら憤死するんじゃね
アセンブリなら読めるがマシン語はさすがに読めないな マシン語なんて読める人間なんているの?
いにしえのプログラマーは、バンチ穴でプログラムを読んだという
>>425 ハンドアセンブルしてたから多分読めるわ
さすがにもう大分忘れてると思うけど
ファミコン時代のプログラムとかサイズ小さくするためにとんでもないスパゲティコード書いてたようなしろもんでしょ 最近のプログラミングスタイルで作ったらそれなりの規模になるんじゃないの ていうか実行ファイルのサイズとプログラミングの難易度にどんな因果関係があるのかわからん
サイズ=難易度ではなく ファイルサイズが大きくなると それだけたくさんの文字を打たないといけないので大変
>>429 ダメだこいつ
キーパンチャー=プログラマと思ってら
>>430 じゃあ1週間で1GBのコードを打ってみてください
>>431 3dmodelとwavのサイズはいったいどこへ消えてしまったんだ・・・・。
どこでキー打つのが大変って話になったんだ?
>>431 あーわかったわかった
あんたの勝ちだよ 快勝だよ
頭 の 悪 さ で あ ん た の 完 全 勝 利
>>431 ソースコードもコピペできるんだけど知らないの?w
なんだよ ゲームPG志望の学生が多いとおもって C++プログラマがこれ以上減らないように無責任にアドバイスしてたのに おっさんばっかかよw
どのタイプのドラクエって言っても今プログラムするなら DQ1だろうが8だろうがアルゴリズム変わらん気がする
N88-BASICとかハンドアセンブルとか普通に話題に出てきて焦る
>>434 例えばWindowsの電卓の容量が90KBぐらい
一か月掛けて100KBのプログラムを組むだけでも大変な作業だと考えよう
100KBとは、すなわち1MB
一か月で100KBのプログラムが打てる人であれば、
1年かければ単純計算で12MBぐらいのプログラムを組むことが出来る。
つまり、この人が120MBのプログラムを組むには、10年掛かるという計算。
これがゲームの容量が増えれば制作が困難になる理由の正体。
なので、ゲーム会社はたくさんのプログラマを雇って
1つのソフトウェア(ゲーム)を開発している
>>437 >DQ1だろうが8だろうがアルゴリズム変わらん気がする
いや…あの?何言ってるの?
DQ1とDQ8がアルゴリズムが同じ?w
あまりに意味不明なのだが、どういう意味なのか詳しく聞かせてくれないかな?
メインPGがしっかりしてれば、いくら量が増えても複雑にならんよ
>100KBとは、すなわち1MB やばい、この時点で理解できないw
>>440 今の環境で作るならね。もっと言えばwiz#1も同じか?
RPGの基幹部分なんてどれも同じフレームワークでいける
wiz#1を作ればだいたいのRPGカバーできるはず
…まぁカバーというか流用というか使い回しというか
>>414 推測だけど、それはRPGに限らずADVでもSLGでも同じだと思うなぁ・・・
例えば複数の女の子(男の子)を同時並行で攻略してくタイプの、恋愛シミュ?
修羅場回避ADV?一言でなんて呼ぶのかよく知らんけど、まぁ要するに
あの手のゲームを何本か遊び倒しながら状態遷移図でもシーケンス図でも
何か描いてみれば、あれのボリュームも相当なものだと分かると思うよ
>>442 間違えた
1000KBが1MBか
ということは、1か月かけて100KBのプログラムが打てる人なら
1年で1200KBのプログラムを打つことが出来る
MBに直すと1.2MB
10年掛ければ12MBのプログラムが打てるという計算
これで理解できますか?
ゲームの容量が増えれば制作が大変になるという意味が。
>ゲームの容量が増えれば制作が大変になる この部分は身をもって分かるが、それを理解するのに要した理屈はそれじゃない
お前おもしろいw
>>445 マジレスすると、コードの量の多さ、増してやコーディングの困難さは
exe等実行ファイルのサイズなんぞなんの当てにもならん。
実行ファイルには何らかのデータやライブラリを内包しているが、
そのデータやライブラリでサイズが大きく左右される。
砂糖水(exe)の量が多いから含有糖分(コード)も多い、と言ってるのと同じ。
濃度を考えていない。
いい加減、地球尺度でモノ語ってくれませんかねぇ。
多分ID:105lsrMRはシナリオライターみたいな話してる
私の戦闘力は53万バイトです
プログラマの労働の半分はデバッグと無茶な仕様変更による修正だろ
労働の半分はいかなる仕様変更にも耐えうる鉄壁の設計だろ
ソフト開発は建設と似ているとよく言われる 土台の太さを変えずに高さだけ積み上げて行ったら…わかるな
455 :
名前は開発中のものです。 :2013/03/28(木) 20:45:06.07 ID:Cx6P3BmI
容量小さければ簡単ならコードゴルフは誰だって出来ますね
久々に真の勘違い野郎を見たwww
100KBとは、すなわち1MB (キリッ
>1000KBが1MBか 違います
ヘッダファイルの拡張子ってC++だったらhppの方が良いの?
会社を渡り歩いたが cpp,h が殆どだった テンプレート色が強いときはhppにしてる
>>458 女の子に嫌われるww
>>445 コンパイラ使う前提での話になるが、
コンパイル・オプションで、速度を優先したりすればバイナリ・サイズが増える気がするんだが。
サイズはそこそこ変動しないか?
>>452-453 え、そうなの?
ぼっち趣味のゲーム作りなら何も専門業者の真似事して大仰に構えなくたって
作り捨てる感じで勢いでやっちまったほうが楽しいと思うけどな。個人的には
「僕のエターナルフォースブリザードシルバーブレットシステム」とか
目指す趣味もあるんだろうけど、ライブラリ作りが目的化しそうじゃん?
マシン語はC9くらいしか読めません。
R3000ならなんとか
>>444 ノベルパートも並行して作ってますがなかなか大変ですね
簡易スクリプトでもちゃんと作らないと対応できないし
使いやすいスクリプト仕様を考えるだけでも発見は多いです
既読スキップはやっぱり1ビット(もしくはバイト)ずつ記録していくしかないのかな?
466 :
名前は開発中のものです。 :2013/03/29(金) 07:18:43.08 ID:tLT5xEO2
お知らせ 市原警察署の生活安全課の帰化人創価警官の指導の元、 入学式から2週間ほど、在日の創価学会員を主体とした自称防犯パトロールが、 2週間ほど行われることになりました 生活安全課の指導であることと、パトロールであることは、 絶対に公言してはいけないとの指導も、帰化人創価警官より出ています 期間中は2人組の在日の創価学会員が、頻繁に創価批判者の自宅周辺を、 うろつき回ると思われます 日本人の方は、充分に注意してください
>>465 >既読スキップはやっぱり1ビット(もしくはバイト)ずつ記録していくしかないのかな?
ごめんちょっとわからん。それって記録容量が気になるという話?
もしそうなら杞憂じゃん?
ドラクエって小学生でも楽しめる典型的な
日本式RPGだし、初期のものなら
物語のフローはわりと平易で文章量も控えめだよね。実行環境がPC前提なら
既読/未読情報の記録容量なんて、ねぇ?
それより、見せちゃいけない未来の結果が出る
(敷かれた物語のレールを踏み外してるとか
到達できないはずの状態に遷移してるとか)
そっちの根幹部分の不具合のほうが気になるな。中で何が起きてたの?
>>465 改行をするところまでが一つの文章として考えてその文章が100あったときのことを考える。
やっている人が1〜50まで読み終えてまた1から読み直そうとした場合
読み終えた時に50という数字を記録しておいて、1の状態から既読スキップのボタンを押すと
早送りで文章が50のところまで動くようにしておけば文字単位で記録する必要はない気がする。
>>468 それだけだと分岐あるときにこまるんでない
>>469 分岐あるときはまた別々のところに記録しておけば問題ないと思う。
468方式はいいな。容量食わない上に、簡単なプログラムで自動化できそうだ。 ノベルゲー作る予定は無いけど。 質問というか雑談よりだからどうでもいんでない ただRPGにノベルパートという辺りで俺のESP値は尽きた。
>>467 >>468 >>472 例えばドラクエでは味方が全体攻撃を受けた時は
一人目のダメージエフェクト→表示HPの更新→二人目の〜のような感じで一人ずつHPが減っていくと思うんですけど
全体攻撃が確定した時点で味方全員分のHPの内部値を減らしてしまうと一人目のHPの更新をした時点で2、3人目のHPの表示も減ってしまう
という基本的な所でつまずいてました(これは自分の描画の仕方にも問題がありますが)
現在はタスクを作って前の演出が終わるまで内部値の処理を遅らせることで対応してます
既読スキップに関しては
ぐぐってもあんまり情報がなかったので
一般的にはどうやるものなのかなと軽い気持ちで書きました
>>468 さんのやり方も聞いたことがあったのですが
とりあえずスクリプト1文に対して1バイトずつ記録するやり方でやってみます
よく考えたら仮に1万文あっても10kbで済むのであまり問題にならないですね
自分が作りたいのはSLGでノベルパートとはその会話部分でした(ノベルゲーにも転用できる感じで) ドラクエみたいなものとはSLGの戦闘パートに流用するための雛型として作ってました(こちらもRPGにry) どうやら長文を書くのが嫌で言葉足らずになってしまう癖があるようなので これからは気をつけます これ以上スレ汚しするのもあれなんで一人で頑張ってみます ありがとうございました
>>474 転用流用を考慮して組み始める→取らぬ狸の皮算用→失敗フラグがピンコ勃ち
ゲーム作ってる人で、Stateの扱いってどうしてる? 移動してる時は走るStateを1にすればいいんだけど、 何も押していない時に0になる処理ができない… 走っていない時に0ってすると、ジャンプや攻撃でも0のままだし
分割して処理してるなぁ 待機中か行動中か、その上で歩きや走り 移動してない状態が一定時間経過すると待機状態に移行させてる
ちょっと何言ってるかわからないですね
まず状態遷移図を書いて整理しないとどうにもならないけど、とりあえずは キャラのステートとキー入力のステートは分けて考える(キー入力は対応する仮想コマンドに変換しておくといい) キャラステートが変わる行動はメソッド化しておく。 待機中は全てのコマンドを受け付ける。入力コマンドに応じてメソッドを呼び出す。 ジャンプ中はジャンプできない。ジャンプ以外のコマンドだけ受け付けてメソッドを呼び出す。 キャラのステートはswitchでもStateパターンでもいいけど コマンド別にメソッドを呼び出すのはswitchが良いと思う キャラのステートとキー入力を引数にとって行動を決定するタイプよりも 書いた状態遷移図に忠実に実装できるはず
ソニックみたいに一定時間待機でアニメーションとかもあるけどね
質問です。 Game → Field → Enemy, Player (→は、〜をもつ。包含) のようなクラス関係で、 GameがもつscoreをFieldから触りたいときどうしますか? 1. 予めFieldにscoreの参照を伝える 2. scoreをstaticなメンバに変更。どこからでも触れるようにする(または、シングルトン) 3. その他 同様に、EnemyからFieldのメンバを触りたくなることもあります。(EnemyからPlayerの情報を見たり)
Game → Field → Enemy, Player ↓ ↓ ↓ ↓ DataDataDataDataDataDataData
オブジェクト指向なんかいらんかったんや ファミコンもスーファミもアセンブラで神ゲーが作られたんや オブジェクト指向を使うと糞ゲー化するんや
>>478 場合に依るとしか。何ゲーの話なんだよ。市販ゲーで相当するものを例示するとかさ
>>483 Fieldが要求してる権利(だけ)与えときゃいいんだから、基本的に1.でいいのでは
でもフィールド風情がスコアを操作したいなんて「ゲームの支配権は握らせろ」と
言ってるようなもんだから、フィールドさんマジジャイアンだな。というわけで
FieldはGameそのものだから一体化させとけよ
あるいは
1.b. (Gameが)予めFieldにスコアラーを操作(orにアクセス)する権利を渡す。
具体的には、Fieldにスコアラーの(インターフェイスの)参照を渡す。
操作(アクセス)する権利を限定するなら、アクセス制限付きインターフェイスを
用意し、その参照を渡す
FieldはGame(ゲームマスター)を買収しています
487 :
483 :2013/03/31(日) 13:02:38.32 ID:wHCg/llM
>>484 近いのは2ですかね
>>485 完成させることこそ正義ですよね
>>486 確かにFieldがスコアを操作するのはおかしいですね
(Fieldに当たり判定をさせてたら、スコアを弄りたくなってしまって)
機能をなるべく小分けにしたいので、
1.b. 案で行こうかと思います
ありがとうございます。
>>485 オブジェクト指向はゲームデザインを制約する理由にはならん。
オブジェクト指向の弊害は完成を遅らせるぐらいしかないな 使いこなせばメリットは沢山あるけどな
ゲームロジックを極力使いまわそうとか考えすぎて気が付くとツクールを作っていたでござるの巻
結局イベントコードでプログラミングするハメになるな なんにしろツクール2kやウディタですら「できないことはない」って言われるし(3D以外) セーブ&ロードやキー入力、マップエディタあたりのフレームワークは作りたいね
ツクールとまではいかんが、ライブラリならありすぎて困る。 未使用のライブラリがHDDに腐るほど転がってるよw
プログラミングは大型ならまずRPGツクールを作る作業から始めるよな
始めないけど?
それ言う人よく居るよね。なんでかよくわからんけど スクリプトに通す機構は作ったりするけどあんな完璧なGUIは マップエディタとかビジュアルが大事なものにしかしか作らんよね、しかもC#使うわ
まずオープンソースのサイト覗いて似たようなの探す
エフェクトCGってどうやって作ってる? わざわざ絵を描くと手間がかかりそうだし、 ツールを作るにしても、どこから手を着ければよいのやら・・・・・・
とりあえず、パーティクルを弾幕風に撃ち出してみたりしてるけど、 何かちがうんだよな。
マップエディッタは、Tiled使って、csvデータを変換して使ってるな、俺は。
Tiledってタイル番号が1から始まるというのは変えれんのか? 最初全然違うマップが表示されて何だと思ったら タイル番号の始まりが1からだったという
Tiledは、テクスチャを後からでも増やせることを前提にしているから、 あ〜ゆ〜仕様なんだと思う
>>502 0から始まるとテクスチャ増やせんの?
少し考えてみたがちょっと分からん
>>505 いや、もちろんそれは理解してるんだけど
それだとテクスチャを追加できない理由が分からない
255を透過にして256からまた非透過ってのが作者の生理的に嫌なんだろ。 tiledが2byte出力できるか知らんが。 四の五の言わずにcsv出力してからexcelでどうにかした方が早くないか?
>>507 既存の配布されてるタイルパーツとかほとんど0番が透過だと思うけど
それを普通に使ったんじゃダメなのん?
Tailedを使うとそういったタイルパーツが使えないのよね上記のように
最初のパーツが1番になってしまうので
タイルパーツの番号が0番から始まると追加できなくなるって言う
仕様が理解出来なのよ
他のエディタを使ったことないからわからないけど、tiledは何もおかしくないと思う・・・
インテリセンスが死にそう
>>489 弊害も何も、オブジェクト指向とプログラミングは厳密には関係ないからな。
単純に問題の切り分け方、設定の把握の仕方にすぎない。
だから、Javaだろうと、昔ながらの構造プログラミングべた書きも普通に出来るし、
Cで、いろんな制約を悪用してオブジェクト指向プログラミングも可能だし。
完成がおくれるなら、それはオブジェクト指向の慣れのなさか、
問題の粒度が適してないだけの事。
オブジェクト指向がゲームをつまらなくした
3DCGがゲームを詰まらなくしたなら理解できるけどな
どっちもつまらなくはしてないと思うけどな。 ただ単に、目が肥えて、大人になって昔ほど無邪気に楽しめなくなったんだと思うわ。
CGとかがどんどん綺麗になって開発費が高騰して冒険できなくなった
>>516 それはそれで嘘。
アプリなんかは、あきらかにスーファミ時代の一本よりも安く出来るぞ。
それにWindowsとかなら、フリーソフト等ですごい良いのたくさんあるし。
そして、現に今一番売れてる(?)パズドラなんて、開発費糞安いし。
ただ単に、旧来のゲーム会社様のソフトしか遊ばなかった層が、
そういうゲームしか見てこなかっただけだろ。
>>512 >完成がおくれるなら、それはオブジェクト指向の慣れのなさか、
>問題の粒度が適してないだけの事。
その前者と後者(細かい粒度のOOP)の組み合わせは凶悪かつ最頻出かな。
更にこれにデザパタが組み合わさる頭でっかちオナニーコードは最凶
486を書いといて自分で言うのもなんだけど、1.b.は腐敗臭がきつい
OOPするならせめてOODの原則に従ってトップタウン設計で粗い粒度で
取り入れ、一方で構造化プログラミング主体の素朴な組み方で細かな粒度で
部品を整備して、そして全体としてそれらをうまく擦り合わせてくれれば
まだ無難な形に落ち着くと思うんだけどね
オブジェクト指向を何の根拠もなく否定してるやつは コーディングの経験がほとんどない批評家気取りの連中だろ。 もしくはオブジェクト指向を理解できなくて それに振り回されてコーディングできない阿呆。 個人のゲーム製作ならオブジェクト指向だろうがなんだろうが 自由にすればいいと思うけどなぁ。 開発費高騰だとか市販品の出来だとかどうでも良いわ。C++スレなんだし。
高級言語がゲームをつまらなくした
C++と同じでバカが使うと却って生産性落ちるんだよ
道具のせいにしたら終わり
>>523 同感
数年前にこの板の何とかシステムスレで「HSPいいっすよねぇ」って
話を振ったら袋叩きにされたよ。全く。
ゲーム作れない人に限ってHSPに物凄いコンプレックス持つんだよね。
サクサクっとゲームを作れるのが許せないからって色々難癖付けてくるんだよ。
ひどいよね
すいませんさすがにHSPにコンプレックスは抱かないです
まったくだ。自分も昔は、HSPでゲーム作ってたから、HSPを馬鹿にする奴は、たんなる無能モノだとおもうわ。 同じように、Rubyとか、RPGツクールとか、Unityとかをなぜか見下す奴も同様。 C++に最終的に流れ着いたけど、結局は今まで触ったものから得た経験を自分流に使いこなすためだし、 その時に、一番使える言語ってだけで、C++でつくってるから偉いみたいなのは馬鹿を通り越して、間抜け西か見えない。 ( そして、そういう奴に限って、無駄に移植性が・・・・とか言い出すしなww)
>>525 あ、ごめんなさい。あなたの意見にも同意です。
好きにすればいいけど、HSPだけは生理的に無理。 ゲームは何本か完成させてるし、コンプレックスなんてないよ。 ただOOPなしでゲーム作り上げる奴はマジですげぇと思うわw C++スレなら尚更。
>>528 スレ違いになるので「HSP オブジェクト指向」とかでググれ下さいカス
>>529 いくら出来るたって言語仕様に無いんじゃ厳しいんじゃないか?
頼まれてHSPでエクスポーター作ったことあるけど、HSPに限らず仕様にポインタがない言語は面倒だなぁと思ったし
似たようなことは出来たとしてもな
データ構造を参照渡し出来ればポインタ別にいらなくない? HSPでできるかは知らんけど
>>531 ポインタ無しの参照だけだと、例えばvectorとかにオブジェクト突っ込む時大分しんどくないか
特にリストのソートとかになった時とか、ディープコピーの嵐とか真っ先に想像してしまう
それ考えるとポインタ無しはつらい
ツクールが同人ゲームのレベルを下げた
下がっていいだろ。その分俺らは独自色を出せるw
ちょっと、教えて頂きたいんだけど FC、SFC性能レベルのゲームを作っているところなんだけど、 普通に動かす分には問題がないんだけど、 ちょっと画面にエフェクトかけようとしたら めちゃくちゃ重くなってしまう。 今のマシンパワーのPCでもこんな感じになるってことは なにか根本的なプログラムの方法が間違っていると思うので 何か参考になるソースかHPでも紹介していただけるとありがたいです
DirectXとかOpenGL使ってれば2Dゲームなら問題なく動作するはず プログラムが悪くて非効率的なことをしてるんじゃないか
プロファイルを取ろうぜ
逆にどんなコード書いたんだw 今日日、bitbltでも重過ぎるなんてことにはならんと思うが。
その頃はスプライトってのがあって 重ねても重さコストゼロだったんだよ いわせんな恥ずかしい(年齢的な意味で
エフェクトって言ったって色々あるからな エスパーできんわ せめて、ポストエフェクトなのか パーティクル系なのかくらい書いてくれ。
ツクール使えばおk
>>540 スクリーン全体にかけるのでポストエフェクトですね。
流れとしては
1.メモリーにマップチップをロード
2.キー入力
3.裏画面にマップチップを並べる。
4.時間・天候・光源などのエフェクトをかける。
5.画面入れ替え
です。4を飛ばせば十分実用速度なんですが、エフェクトが・・・
実は解像度が4Kレベルとか
>>543 いえいえ640*480で32*32のチップを床・設置物・屋根の3層並べてるだけです
アルファブレンドが重いんだろうな
>>542 シェーダ?
それとも
プログラムでフレームバッファに何かしてるの?
シェーダならポストエフェクトは基本重いから
ポストエフェクト何重にもかけるとどんどん重くなる。
これはグラボの性能にもよるけど。
プログラムで書いてるなら
>>537 で言われてる通りプロファイルとるのが早いかな。
フレームバッファ又はテクスチャに直接何かしてるなら重くなるかもとしか言えない。
>>546 プログラム上でフレームにフィルターをかけています。
現在は試験的に一枚だけ。それでも劇重
ライブラリーの説明にはもともとフィルタリング処理は重いとは書いてあったのですが
重すぎなので・・・
というのも、今まで、リファレンスやネットのサンプルなどを見て、自分のやりたい事に
合わせてソースを書いてきて、一応求める動作をするように組んできたのですが、
我流で覚えてきたので・・・一度、ちゃんとしたソースややり方を見て、再構築したほうがよいなと思いまして・・・
よろしくお願いします。
>>548 ライブラリってなんだよ。
フィルタってのもCPUでやってんのか
GPUでやってんのかも分からんし。
ちゃんと現状を説明しろよ。
VRAMのデータをRAMにコピーして操作とかしてんじゃねーの。
>>549 向こうで聞けと怒られてしまうかも知れませんが
DXライブラリです。
DXライブラリの扱いどうこうの問題ではなく、
プログラム自体の組み方だと思い、こちらで尋ねました。
どうも、お手数かけてすみません
DXライブラリですか。 最近のDXライブラリは知らんからなぁ よくわかりませんが。 ドット単位で画像にアクセスしたい関係 LoadSoftImage CPUで扱うイメージの読み込み LoadSoftImageToMem CPUで扱うイメージのメモリからの読み込み MakeARGB8ColorSoftImage CPUで扱うイメージの作成( RGBA8 カラー ) ・ ・ DrawSoftImage CPUで扱うイメージを画面に描画する CreateGraphFromSoftImage CPUで扱うイメージからグラフィックハンドルを作成する CreateDivGraphFromSoftImage CPUで扱うイメージから分割グラフィックハンドルを作成する この辺りを使ってる感じですか? どちらにしてもDXライブラリとなるとサンプルは厳しいかもですね。 ネット上にありそうもないし。 確かDXライブラリはHLSLかけたような。 ポストエフェクトならシェーダ書いた方が早い気が。 もしくはテクスチャを重ねるなどをしてポストエフェクトっぽくするとか。 何をやるかにもよりますけど。 雨を降らせるとか雪を降らせるくらいならこれで行けませんか? また、DrawSoftImage()この辺の関数はDXライブラリのソースを見たわけではないので予想ですけど。 先ほど貼ったURLと同じようなことをしてると思うので基本重いと思います。
>>553 ご丁寧にありがとうございます。
命令文に関してはDXライブラリーも同じような感じです。
命令文表記はDXライブラリーとは違いますが、やっていることは
似たり寄ったりなので、とても参考になります。
これから試行錯誤しながら、がんばっていきます。
ありがとうございました。
>>554 長文になってしまったので短くまとめると
ソフトウェアというよりハードウェアの問題なのでロジックでどうにかできる問題でもないと思います。
同じ効果が得られる他の方法を考えた方がよろしいかと思います。
がんばってください。
あれ?ID変わった。 0時過ぎたのか寝よう。
なんかピクセルひとつひとつに対してCPUで処理とかしてそうだな
32x32のチップ毎に何回もエフェクト描画処理呼び出してるとか
書いてる言葉と使ってるラッパライブラリから推測して、 多分自分で意味がわかってないような気がする
SoftImage系の命令は激遅だから毎フレーム呼び出すのはNGだと思うぞ
昨日、相談したものです。ちょっと経過報告を あの後、家のPC(VGA:RADEON7650)でこちょこちょ手直ししたら エフェクト処理かけてもサクサク動くようになりました。 で、今朝、別のPC(オンボードのVGA;RADEON4250ぐらい)で 試したら、やはり劇重状態でしたw SFC程度の処理でこれはないわwと思い、 そのPCでも手直しをしてなんとか実用レベルの速度まで 出るようになりましたが、まだまだ、手直しの余地はあると思います。 余裕のある時に本屋にでも行ってちゃんとした参考資料を買ってこようかと思います。 おすすめがあれば教えて頂けるとありがたいです。
>>561 乙
できればどの辺いじって改善されたのか
DXライブラリスレに書いておいてくれると嬉しい
(前スレで相談してた人だよね?)
ナレッジシェアリングってやつだな 回答する人間は基本ギブ側だけど、質問者だってギブ側になれるんだよな。 同じところでつまづくかもしれない後進の役に立てるんだから
仮にCPU処理のソフトウェアレンダリングでゲーム画面を作り上げる場合 DXライブラリなら基本的にはMakeGraphでオフスクリーンサーフェス作って その中に毎フレーム好きなように描きこんではDrawGraph一発で描画 みたいな超シンプルな形になると思うんだが、違うのか? DXライブラリの内部的にはD3DなのかDDなのか等、色々と処理は分かれるが そこはとりあえず脇に置いとく
こちらでレスが伸びたのでこちらで返しますね。
質問前はかなり変なやり方をしていたのを(バックスクリーンに描いたのに処理かけようとしていた)
>>564 さんのような普通のやり方に直して、
マシンパワーでゴリ押しでいけるだろって思って適当に書いていた所を
直していったぐらいですね。
つまり、元々構造的な自分の実装バグを修正した、って事か
>>566 簡潔にいうとそうですねw
ただ、どちらにしろフィルターかける処理は重いですね。
夜っぽくしたい、夕焼けっぽくしただけなら
半透明の色を重ねた方が速いかも
速さの順なら
フィルター<半透明<夜・夕焼け色のマップチップを用意する
って感じでしょうか
シェーダー使えよ
リアルタイムで変更とかしないならマップチップ読み込む時に処理すれば 画像用意する必要ないし描画時に処理も要らない
>>567 俺DirectX9.0c環境でシェーダバージョン2.0固定でレンダ周りの処理(ポストエフェクト:全体フィルタ含む)良く書いてるけど、
別にその用件なら遅いもへったくれも無いぞ
あ、誤解があるとあれなので言っておくと、DxLibは全然触ってないので知らない。 ラッパ的な物は自前か、または既存のゲームエンジン。その時作ってるもの次第
質問いいですか? ゲームを起動すると まず最初にメモリに画像やら音楽やらが読み込まれることになると思いますが、 もしプレイヤーのパソコンに搭載しているメモリが500MBだとして 仮に音楽ファイルが1つ300MBだとして 2つ読み込むようにプログラムされていたとします。 つまりトータルで600MBになります。 要するに100MB足りないことになるのですが、 この場合、そのプレイヤーのパソコンはどうなるのでしょうか? フリーズしてゲームが強制停止してしまうのですか?
ハードディスクの一部にデータを退避してそこから必要な時にメモリに読み出したりハードディスクに退避させたりする 従って処理速度が遅くなるだろうね
>>573 なるほど、では少々無茶しても大丈夫ということですか。
まあボクは説明書の動作環境にメモリ1GBと書いて
1GBのメモリを想定してプログラムを組むことにしよう
newの例外処理やmallocのぬるぽ処理なんて 糞真面目に書かずに天に任せて落としてしまえ(^p^) とは言え、1GBものメモリを何に使うんだw
東方ゲームは最初に起動した時に 1回だけロードしているんですよね ということは全ステージ分の音楽と画像を 1回メモリに読み込むだけで十分ということですか 昔のプレステのRPGなんかは戦闘に入る度に読み込んでいたのに
東方はやったことないから知らんけど、 多分そんな糞コーディングしてないと思うw リアルタイム処理で必要な画像やSEをVRAMなりメモリなりに読み込んでるだけだろ。 BGMもステージ毎に読み込みでしょ。ライブラリ何使ってるか知らんが。 HDDの読み込み速度なんてCDとは桁違いなほど速いんだし。
東方はミュージックルーム(サウンドテスト)があるから最初に全部読み込んでるんじゃねーかな 画像はしらんが
>>576 ステージ毎にロードしてる
BGMはストリーム再生だからそこまでメモリ食わん
>>577 なるほど、そういうこともできるんですね
東方ゲーム(東方神霊廟)ではステージ1のボスを倒したら
すぐに(数秒で)ステージ2が表示されます
それが最終ステージまで続きます
ステージごとにBGMや画像を読み込んでいるなら
どこで読み込んでいるのか不思議でならないね
いやストリーム再生してみたら分かるけどロード時間ほぼない 部分的に読み込みながら再生するから。 向いてないから死ね
>>581 参考になったありがとうね
でも、考えてみたら
昔は100メガショック!などと騒がれてた時代があって
当然ゲーム全体の容量が100MBぐらいだから
1GBもメモリ容量があれば、
ゲームデータをすべてメモリに読み込むぐらいわけないですね
そもそも1GBものゲームなんて作れそうもないね
あれって100Mbitじゃなかったか
つうか数秒あれば読み込みに充分な速度じゃね
あー、これよく間違えてる人見かけるけど 100メガショック!≠100MByte 100メガショック!=100Mbitな 12.5Mbyteくらい。
これまでプログラム言語の解説書を何冊も読んで プログラムが実行される原理までは何とか理解できました だがプログラム言語の入門書って初歩の初歩ぐらいまでしか解説してくれてないんですよね 初歩の初歩はもう解ったから、 今度は、その初歩の技術をどう組み合わせればゲームになるのかが知りたい とりあえずゲームを起動してまず最初に表示させる NowLoeding...の画面を表示するところから作ってみよう HDDから画像をメモリに読み込んで表示するだけなので簡単だと思う ボクが今悩んでいるのは、そのNowLoeding...画面で どこまでメモリに読み込めばいいのか?ということに疑問を感じて質問させて頂きました では、頑張ってきます
Now Loadingだよ 英語の勉強も頑張ってね
さぁ早くサルがお手玉で遊ぶアニメーションをわざわざ別スレッド起動して実行させる作業に戻るんだ
>>586 今度もし書籍を買うなら
プログラム言語の書籍じゃなくて
ゲームを作る本を購入した方がいいと思うよ。
>>589 ボクは最初にC言語についての解説本を何冊か読んでみて
C言語の仕組みが何となく理解できたのですが、
細かいところが気になり、アセンブリ言語の解説書を読んで
理解が深まりました
アセンブリを学んだことで、ついでにオブジェクト言語の意味も理解できました
C言語のプログラムをコンパイラすると実行ファイルになるのですが、
その過程でオブジェクトファイルをいくつか生成して
さらにその複数のオブジェクトをくっつけて、さらに加工して機械語に翻訳していて
それをリンク(リンカ)と呼ぶ
オブジェクト言語と呼ばれるものは、 つまり、C言語からコンパイルした時に生成されるオブジェクトファイルの そのオブジェクトを細かくしたものなのですよね? つまり、オブジェクトファイルはコンパイルした後に作られるわけですから オブジェクト言語はコンパイルする必要はないと つまり、そういうことなのですね
よく分かってるな
>>591 えーと、どこから突っ込めばいい?
オブジェクト言語がオブジェクト指向言語を指しているなら
ものすごい勘違いしている。
うーん、C++でゲーム製作しててなんの意識もしてないw オブジェクトファイル?あぁ、半生のやつね。くらいの認識しかしてない(^p^) 実際、今日日アセンブリ意識する必要なんてほとんどないわな。 興味を否定する気はないが。
あと、C言語はヘッドファイルをインクルードすることで 様々な関数を使うことが出来る だが、C言語は元々ゲーム以外のビジネス向けのアプリ開発のために 作られた言語なのでC言語だけでゲームを開発することはできない 画像を読み込んで瞬時に表示したり、音楽やXファイル(3Dのデータ)を読み込むことはできない そこでマイクロソフトは、Windowsで高度なゲームをプレイさせるために DirectXというものを開発したが、DirectXはかなり難しい技術なので直接扱うのは困難 そこで、ある日本人がDXライブラリというものを開発してくれて DXライブラリをインクルードすることで、画像を表示させる、音楽を再生させる 3Dを表示させて動かす、といった関数をC言語で呼び出すだけでできるようになったと
なんかいろいろ誤解してたり用語の使い方がおかしかったりするな 大丈夫か?
597 :
名前は開発中のものです。 :2013/04/04(木) 22:06:42.44 ID:kfapcRey
ってか、ここは
>>595 のブログじゃない。
チラシの裏にでも書いてろ。
>>595 突っ込みどころ満載すぎる。
そもそもCはビジネスアプリ向けにできた訳じゃない。
OS作るために作った言語。
低レベルなので何でもできるだけ。
ボクは最初C言語を学んでみて よし!じゃあゲームを作ってみよう!とか思って どの関数を使えば、音楽を鳴らしたりゲームパッドを使うようにするのかな? とか思ってC言語の関数を結構調べたのだけど どこにもそんな関数はなくて「おかしいな…」と思っていたんだ そこでDirectXというものが気になって DirectXを調べていくうちに、DirectXに音楽を鳴らすとか画像を表示するとか ゲームパッドを扱うとか、そういう関数?が用意されていた だが、DirectXは難しい過ぎてボクには困難でした 理解できないこともないが、音楽を鳴らすという命令をするためには 色んなことをやらないといけないくて、かなり面倒…
で、色々調べていくうちに DXライブラリというものを発見! 少しDXライブラリの仕様を読んでみたら C言語でインクルードして関数を呼び出して使うというのと 全く同じなので、これならC言語を学んだボクでもできるわ! とか思って、DXライブラリでゲーム開発をやってみようと そのような経緯があって現在に至ります。 DXライブラリには色んな関数が用意されているので、 色んな関数を使って面白いゲーム作ってみようかな?と思ってる次第です おわり
ゲーム作りに興味があるならセガ本でも読んでみたら? ちょっと高いけど初心者向けに色々書いてあって面白いよ
>>601 ありがとう
早速、明日秋葉原にその本を探しに行くことにします
面白かったら買ってこよう
ただセガという響きがかなり昔っぽいけど大丈夫なのかな?
8bitとか16bitのゲーム開発についての解説本なら
現在の32bitプログラム開発にどこまで生かせるのかが心配です
>>598 ええ、確かC言語はUNIXを開発するために作られた
32bit言語でしたね
>>598 >低レベルなので何でもできるだけ。
え?C言語が低レベル言語?
高級言語じゃなかったかな?
アセンブリ言語プログラムに翻訳するために作られた言語がC言語で
アセンブリ言語でたくさんの命令を組まないといけないことが
C言語では1つの関数だけで可能にしてしまうという
ただCコンパイラがアセンブラ言語に対応していないとダメなので
どのアセンブラ言語に翻訳させるCコンパイラを使うのかで
C言語のソースは全く違うものになってしまう
>>605 正確には低水準
昔は高級アセンブラあって言われてた。
むしろ高級言語はCOBOLとかでしょ。
セガ本は流石にもう古い気がする いや、もちろん古いとか関係なく考え方として必要なことも多いんだけどさ スクリプトでも勉強した方が良さそう
>>605 誤解のないように補足しておくと
人間に近い方が高級、高水準。
機械に近いのが低級、低水準。
時代とともに線引きは変わるから
どこからが高水準でどこからが低水準は時代とともに変わるし
人の解釈によってもかわる。
>>607 確かに古いな。
まあ、倉庫番?あたりからやってるから基礎は学べるとは思う。
今なら、それこそUnity本でも買った方がよい気はするけどな。
>>608 なるほど、そういうことですか。
ボクはこれまで、アセンブリ言語とC言語を同時にプログラミングして
機能を拡張させるC言語の関数を作るために
アセンブリでC言語の関数を作ったりして遊んでいました
C言語の関数でも色々できるけど万能ではなくて出来ないこともありますから
アセンブリ言語の方が何でもできるので高級言語だとボクは解釈しています
言われてみれば確かに古いかも とりあえずゲーム作りたいだけなら ツクールやらunity勉強したほうが楽なのは間違いない
失礼 アセンブリが高級言語ではなくて C言語が高級言語の間違いです
アセンブラ得意ならファミコンのプログラム作って
あ、そう言えば今日ゲーム開発ブログを
丁度作ったところですので紹介していきます
ttp://blog.livedoor.jp/winpg/ 今は、どんなゲームを作ってやろうかと
DXライブラリの公式サイトでDXライブラリの関数を眺めているところです
どれも使ってみたいので、ちょっと本気で悩んでいます
では、また
>>614 いや…それはちょっと遠慮したい
ファミコンのプログラムは、8bitのCPUを想定したプログラム開発になるし
苦労して作ったわりには、しょぼいゲームしか作れないので遠慮したいです
C言語(32bit言語)でゲーム開発をしていて
細かいところを拡張するために
アセンブリ言語でC言語の関数をちょこっと作るぐらいにしたい
あとボクはアセンブリ言語が得意なわけではありませんし
マイクロソフトが作ったアセンブラのアセンブリ言語プログラムは組めません
32bit言語って何さ
ブログの宣伝かよ
>>617 あ、済みません
正しく書くと「32bitのCPUで動く言語」という意味です
CPUの中にはレジスタというのがあって
8bitレジスタ、16ビットレジスタ、32ビットレジスタ
の3種類のレジスタがあって
C言語は32ビットレジスタを使う言語なので
32bit言語とボクが勝手に呼んでいるだけです
HDDからメモリに読み込む時も32bit単位で
データを読み書きしているのがC言語です
間違っているかな?間違っていたら済みません
64bitのCPUで動くC言語は何て呼ぶのさ
>>620 済みません
64bitについては無知です
わかりません
でも、多分ですが
64bitのCPUで動くC言語は、32bitのレジスタを使っているのだと思います。
CPUのレジスタには、8bitレジスタ、16bitレジスタ、32ビットレジスタがあるのですが、
32ビットレジスタの中に16bitレジスタが、
さらに16bitレジスタの中に8bitレジスタが入っています。
あと、C言語は32bitレジスタを使っているのですが、
32bit全部を使えるわけではなく、半分の下位の16bitまでしか使えません
なので、64bitでC言語を使っても
64bitレジスタの中の下位の16bitレジスタだけ使っていると思われます
その辺の知識については、ボクよりもここにいるプロの現場で活躍している
プログラマさんたちの方が詳しいと思います
なんていうか。
色んな意味で面白いな。
>>621 webには32bitのアセンブラの解説サイトが少なくて
アセンブラっていうと16bit風に記述してINT 21hで文字を出す見たいなサイトが多いから
もしかして勘違いしているのかもしれないけど
32bitのCPUで16bitレジスタのaxだのbxだのってのは相当古いから
むしろ16bit CPUの書き方。今から20年くらい前の古い記述
32bitならeax ebxとかのレジスタで32bitフルで使える。
レジスタのサイズとC言語に相関があるとは思えないけど 何のための高級言語なのさ
624 :
613 :2013/04/05(金) 00:02:43.02 ID:hvMTo3B6
おっと、またID変わった 0:00か寝るか
>>623 int が32bitとでも書いてある書籍を読んで勘違いしているものと
エスパー予想。
ところで上の方でファミコンやスーファミの ゲーム開発をするみたいなことを言ってる人がいるけど どうやって作るつもりなのかが気になる ファミコンは8bitプログラムで スーファミは16bitプログラムなわけでしょ? で、今、動かしているWindowsパソコンは32bitか64bitなわけです 当然、プログラミングはWindowsで組むわけですよね? で、ゲームをプレイする時もWindowsでプレイするわけでしょ? つまり、先に8bitか16bitのゲーム本体を作って そのゲーム本体で動くゲームを開発するということですか? すっごく大変な作業になると思う
なんだろ、凄い知識が偏ってるね。偏食はいかんなぁ。
>>622 >32bitならeax ebxとかのレジスタで32bitフルで使える。
まじですか?
それは初耳です
いつから32bitレジスタをフルで使える仕様になったのですか?
32bitの上位の16bitの領域は、
ビット番号もなければ名称もないので
そこを使うことは出来なかったはずです
ただ、上位の16bitを下に降ろしてくれば使えますが
>>628 そうですか?
だって、Windowsの上で動く16bitプログラムを実行するわけでしょ?
32bitOSの上で16bitプログラムを実行するなんて可能なのですか?
ボクが考えるに16bitのOSを先に作って、
パソコンの電源を入れた時に
Windowsを起動せずに16bitOS(ゲーム本体)を起動させて
その16bitOSの環境下でスーファミ(16bitプログラム)を起動させるなら話が分かります
ねぇ、最近の質問者ってみんな釣りなんだろ・・・?ねぇ(怯え声
intがひと昔前は-32768〜+32767だったのを知らんのだろなあ
>>630 64bitのwindowsに32bitのソフトをインストールしても動くけどあれはなんなの
>>630 ちなみにC言語ができた当初は16bitはおろか8bitのCPUしかなかったと思うんだが?
635 :
名前は開発中のものです。 :2013/04/05(金) 06:54:30.91 ID:OKwHaqcm
ID:gc/L8yIj = ID:pJKr/LeY ですから
学校の課題レポートを手伝うのはやめたほうがいいよ
>>630 マジレスすると、CPUには仮想モードってのもあるしエミュレータと言うソフトもある。
携帯アプリ開発なんかはエミュレータを使うだろ。
そもそも普段のゲーム開発でCPUの細かいアーキテクチャを意識する必要はない。
ボードゲーム作るのにサイコロの化学的組成を意識する必要がないのと同じ。
化学的組成は知ってるけどサイコロがどこで買えるか分からない、そんな風に見えるよ。
習いたての単語を並べて悦に入りたいようだが。
それは言いすぎだろう。 単純に「形から入るタイプ」「頭でっかち」なだけでしょ。
>>627 FCやSFCのソフトを作るって意味ではなく
FC、SFCレベルのクオリティーの事
>>640 その意味で使われるFCレベルって、どっちかっていうとゲームウォッチレベルだったりするよなw
俺もマジレス。 >いつから32bitレジスタをフルで使える仕様になったのですか? 元からだし。じゃあなんのための32bitなのかと >ボクが考えるに16bitのOSを先に作って、 スーファミにOSはいりません。なんのためのOSなのかと >その16bitOSの環境下でスーファミ(16bitプログラム)を起動させるなら話が分かります 16bitってのは命令長のことで、同じ16bitでもCPUの命令セットが違えば動かない つい10年ぐらい前にMacがIntelのCPUで動くようになったって大ニュースになったんだが まあ高校生とか大学生なら知らなくても無理ないかな >え?C言語が低レベル言語?高級言語じゃなかったかな? 最近のメジャーな言語20個の中では低級言語の方から数えて3番目ぐらいまでに入るわけで。 なんだろ、形から入るってか自分の知識が正しいと思い込みすぎてる感じだな。 あと内容がかなり古かったり基本的なことを知らなかったりと偏ってる。 結構勘違いが多いから、もうちょっと自分の知識を疑ってかかった方がいい。
まあ何事も興味を持つことから始まるんだから間違いは後々からでも気が付けばいい
そんな事よりどうでもいい感想を長々と垂れ流すな blogに書け
この板は過疎で数年たってもスレを消費できないんだし 別にいんじゃね?
いくら過疎っててもうぜぇもんはうぜぇ。 あと単発IDで擁護すると却って目立つぞw
そういうのはカラスに任せておけばいい
単発じゃなかったorz
そういやジュウシマツ和尚とか最近みないな
LuaJITってなんなん? Luaの亜種?
JustInTimeコンパイラ のLuaでしょ 亜種じゃないよ。
constメンバ関数かそうじゃないかだけでもオーバーロードできるけど シングルトンのstaticメソッドでも同じようなことってできないのかなぁ メソッド名にConstって付けるのかっこ悪いお
シングルトンのstaticメソッドの時点で「カッコとか気にしない人なんだな」 ってことくらい分かってもらえてると思うけどね
そりゃどっちかというとMonostateだよね。 愚者はその名も知らなかろうが。
スレ民くらいになるとstaticメソッドがなくてもインスタンスを取得できるらしい。めでたし
staticメソッドならインスタンスいらなくね
それだとMonostateだろw
スレ民様に質問なんだけど、インスタンスが単一なのがしんぐるとんで すたてっくなめんばしかねえのがものすてーとでいいの?
monostateはnamespaceで作るのと同じだね シングルトンの場合はインスタンスを複数にふやせるから状態管理の変数をもったりできる monostateだと全体で1個になるだろう
インスタンスを複数に増やしても状態管理の変数もインスタンスの分だけ増やせる・・だな
てかお前ら何言ってんだ?
デザパタの事で語り合ってるんでしょ
C++でシングルトン使ってると聞いただけで、十中八九設計が腐ってると予想してる
シングルトンってわかりやすい概念だから、覚えたての子が 強引に適用するイメージがある。ラムダとかファンクタもそんなイメージがある
シングルトン使いまくってゲーム完成 > シングルトン使わずにゲーム未完成
今作ってるゲームだと、1つだけシングルトン使ってるなあ。 Applicationって名前のクラスで、起動時の引数とか起動してからの時間だとか、そういうのを格納してる。
667 :
名前は開発中のものです。 :2013/04/16(火) 00:16:36.73 ID:qjkxOX7R
>>666 あ、なんか作り方おんなじだ。シングルトンの概念はわからんがオブジェクト1つ作って格納してる
dxの初期化にシングルトン使ってるわ ひとつの関数で初期化&取得ができて便利
俺なんか、d3ddevice取る関数がシングルトンだぜ。どこでもdevice取れちゃう。 まずいんだろうなとは思うんだけど、当時一人ですげぇゲーム作っちゃう人が、 こういうやり方だったのを真似して未だに・・・。
俺はDeviceは常にメインフローから引き渡す形にしてるな メッシュに関するものとその複合的なものと、シェーダに関するものと、あと外部リソースに関するものを なるだけお互いに疎遠な関係にしたかったって思想があるから
ああ、あとリストア処理の単純化とかも。 個人的に、モジュール間の依存性について明示的でない暗黙の強い関係が生まれるのがなんかイヤだったのでそんな感じ
>>669 似たような処理をするクラス作ったけど、自分はmonostateだったなー
d3ddeviceって複数いるのか? メインウィンドウとチャイルドウィンドウは同じd3ddevice使うんじゃなかったけ
複数必要みたいな話、誰かしてたか?
グラフィックスデバイスにアクセスするモジュールって ゲームプログラム全体から見ればかなり限定されると思う
複数要らないからシングルトンでおkってことでおk?
>>676 それはダメな使い方の典型例じゃないのかw
身も蓋もない発言になるかもだけど 他人に使わせる予定のないモジュールなら、シングルトンみたいな仕組みを わざわざ組み込む必要性って乏しいんだよね 必要になったら後付けでそういう仕組みを組み込めばいいのではないかと
えっFactoryとか普通シングルトンじゃね?非メンバ関数で実装?
>>679 何のFactoryか知らんけど、他人に使わせる予定がないという前提があるならば
意味も使い方も熟知してる自分一人がユーザーなんだから、そのインスタンスの
生成は自身のコントロール下にあるだろうし、シングルトンの仕組みをわざわざ
組み込まなくても実質的に不都合なしという判断にも十分妥当性はあるかなと
ケチつける気はないが、次のプロジェクトでも使いまわすなら、その考えはやめたほうがいいと思う。 数カ月後の次の自分は他人だぜ。 他人に使わせる気で作っておくと、非常に使い回しがいいい。 中で何やっているかコード追わなくても良い程度、或いは使用上の注意など気にせず使える程度でも。
>>681 いや、きっとそう言われると思ってたよ。その意見も同意
シングルトンの構造って基本的にはポカヨケのためにあると思ってるんだよね。
普通にnewしてインスタンスを作ろうとしたり、意図せずに一時オブジェクトを
作ってたりするとそこでビルドエラー。なんでーってなって、そこで自分のミスに
気付かされる的な
>>680 C++だったらテンプレート使って普通に汎用ファクトリ書けるよ。
>>683 なんかESPで誤読されてる気配を感じ取ったんだけど
Factoryが要らないっていう趣旨じゃないからね。一応
グローバル変数の代わりにみたいにシングルトン使うとコード書くのが楽になる インクルードすればどこからでも参照できるし、使うときに初期化されてるかいちいちチェックしなくていい どうせ自分しか見ないからって楽になるように書くとむしろシングルトンだらけになる
どんだけ唯一の技法みたいに信奉してるのかと不安になった。 みんなシングルトンシングルトン言い過ぎ。 C++での開発って大前提で言えば、取れるアプローチはJavaやC#でのOO表現の形に縛られたりしないから、他の考え方あってもいいんだけどな。 そこに本末転倒が無いならば。 あと楽って話だと、C++で書いてる前提で言えば例えば公開ヘッダをすっきりさせる目的でPImplイディオムとかたまに使う俺。
シングルトンってそんなに使うかなぁ。
observer的なクラス設計するときはシングルトンにするのは分かるけど。
あとは外部ファイルから読み込んだパラメータの定数代わり?
>>679 mementoなんかはfactoryパターンになるケースもあると思うけど
それがシングルトンじゃまずいでしょw
全く全然使いませんってこたぁ無いが、 例えばゲームプログラムなんてマルチスレッド処理随所に考えていく余地ある代物で、 それを書いてる前提で言えば基本的に相性良いものじゃないしな。むしろ慎重にならざるを得ないもの。 実装方法として良いとかダメってより、なんでもそれでおkみたいな物じゃないよな。動作の実際を考えて実装しろって感じ
スレの流れを見る限り、何でもかんでもシングルトンにしてるって人は ほとんど居ないみたいだし、心配しなくていいんじゃない? 具体的にどこで使うか?は、結構バラバラっぽいけどw
むしろどこで使うのが正解なの 典型的な例ってなんかある?
>>685 そういう目的なら、適切なnamespaceの中に変数や関数を配置して
構造化プログラミングをしているほうがよほど素直だし、生成に関する
パターンであるシングルトンなんて言葉が出てくる余地はあまりなさそう
自己流と言えばみんなエラー処理ってどうしてる? tryとか例外処理を使うかどうかっていう話じゃなくて、 プログラムがエラーに直面した場合どういう風な流し方をしてる? メッセージだして問答無用で落すとか、復帰可能そうな場合はなるべく頑張ってみるとか
あ、ちなみに俺はリリースしたことがないので、 想定外の部分はassertで落すことしかしたことないです。でもassertだけじゃダメらしいので・・・
サウンドクラスとかキー入力クラスとかシングルトンにするだろ? 上位クラスにもたせるにしてもどうせスコープは広いんだからシングルトンでいいじゃん
>>692 俺が見たゲームだと
「これをコピペしてエラー報告に貼り付けてください」ってのがあった
>>693 ダメな理由は解放順序が保証されないから
>>694 動作パスの観点でスレッドセーフにしてエントリは絞るが、
必ずしもシングルトンクラスにラップするとは限らないかな
翻訳単位中に閉じ込めるとか、static修飾でextern禁止にして、コンパイル時に想定外アクセス防ぐ事は普通にある
>>694 それってデバイスアクセス用の簡易なラッパー(Adapter?)だと思うんだけど
内部でやってる事は、例えばDirectXなら、グローバルなサービスロケーターから
デバイスアクセス用の低レベルのインターフェースを取得して雑多なセットアップ
処理をして、要するにその辺のゴチャゴチャを中に全部封じ込めて、抽象化した
俺流の簡素なインターフェースでサービス提供し直すぜって役割だよね?
ここまではいいと思う
で、アプリケーションコード上のどこでそれを使うか全く決めてないから、かったりー
OODの原則とか脇に置いといて、とりあえず構造化プログラミングに便利な
グローバルなサービスとして提供しちゃおうと。世界の歯車が狂い出すの早過ぎ
単一責任の原則とか根本的な部分を放り投げます宣言として、シングルトンという
単語は出さない方がいいと思う
具体的にどこで使うか決めずにコーディングすることは結構あるけどな 自分用のライブラリ的なの作るときはだいたいそんな感じ 単一責任の原則守ったからって必ずしもメンテ楽になるとは限らんし 作るときは思い付きでガリガリ書くわ
そうそう。
私なんか、まさに
>>697 の「単一責任の原則とか根本的な部分を放り投げます宣言として」シングルトン使いまくり。
この使い方としてはシングルトンが一番便利だと思う。
適度に名前空間が限定されるし、何度もアクセスするときは省略表記のためにポインタもらえるし、コンストラクタとデストラクタが使えるし。
ある用途に限定すればシングルトンじゃなくてもいいんだけど、シングルトンじゃない方がいい理由が見つからないことには、やっぱり一番便利だからこれ使っちゃうよね、という。
シングルトンに問題があるんじゃなくて、放り投げることに問題があると言うならその通りなんだろうけど。
>>698 ,
>>699 作り捨てるつもりで勢いでガーって作るのは俺もやるよ。しょっちゅうやってるよ
鼻くそほじったり屁をこきながらの弛緩プログラミングは実に楽しいよね
そういう条件下で、例えば依存性をくどくど明示する必要はないという判断に
妥当性が生まれるのは、全容が自分の制御下(認識下)にある程度の小さな(単純な)
プログラムで、自分以外使わせる予定ないし誰の迷惑にもならないからだよね
巨大なグローバル変数フォルダを作ってそれ1つだけをシングルトーンにしておく。 よくわからない場合はとりあえずそこに押し込んでおいて、あとでまた考える。
結局のところ、結合度の重要性って開発規模によると思うんだよね 市販タイトルみたいに大規模なものは複数人で平行して開発するからコード修正の影響範囲を最小限にした方が全体的なコストを押さえる結果になるけど 2、3人のチームなら多少結合度の高いコードでも共通認識として確立されてればフレームワークとして働くし 一人なら自分の尺度で好きにすればいい 一人で開発するときはシングルトンは非常に便利です
なんかID変わっちゃったけど、俺(
>>700 )=
>>697 ね。
結合度もそうなんだけど、ここでは結合の方法、そして結合(依存性)を
どこで明示してるか。で、ここからが個人的に謎なところなんだけど
>>698 ,
>>699 モジュール間の依存性(依存関係)をくどくど明示する手間を惜しむような条件下なら
クラスインスタンス生成の自由がない事をくどくどクラス定義内で明示する手間も
惜しむんじゃないのかな?だって、そのクラスの意味も使い方も、関わってる
人間には重々に周知されてる事のはずだよね?モジュール間の依存性について
暗黙の了解が成立してるくらいだからね
クラス宣言の中でわざわざシングルトンクラス特有のイディオムを直接に記述したり あるいはシングルトンホルダーのテンプレートを使ったり、要するにそうまでして 「このクラスのインスタンスはひとつですよー。勝手に作らせませんからねー」 って事をくどくど明示するのって、結構野暮ったいというか、なんか知らんけど 誰かに対して物凄い大警戒してるよね。それは3日以上前のカニチャーハン?
「やっぱこういう時は構造化プログラミングに限るよな。」
「OODの原則とか堅苦しい事はこの際は脇に置いておこう。」
こういう状態でやってるからグローバルなサービス提供が重宝されるわけで
現在のC/C++でグローバルなサービス提供をするなら
>>691 に行き着くのが
より素直なように思うんだよね。基本的に構造化プログラミングを指向してるから
OOPにおける生成に関するパターンの一つであるシングルトンなる単語を事更に
引っ張ってくる動機がよく分からないというか。コードが似てるというだけでは?
>>692 どこでエラーが起きたのかが表示されるので
そこを見に行く
エラー文をダブルクリックすれば、
エラー行まで飛んでくれる
そもそもオブジェクト指向とかグラフィックライブラリを作るために作られたんだろ ボタンとかウィンドウとかクラスにして継承とか分かりやすいよな 問題はグラフィックライブラリ以外のあらゆるシステムがオブジェクト指向でやると作りやすくなると誤解したことだよな つまりオブジェクト指向でゲームを作ると糞ゲー化するということだ
管理クラスから管理対象へthisポインタ渡したり、相互参照になるようなことを 極力回避できるように頑張ったけど難しすぎて挫けそうになったときに シングルトンさんは優しく手を差し伸べてくれたんだ・・・
そういう状況ならひとまずはOOPなんて捨ててみたほうがいいと思うなぁ 一度、平凡な構造化プログラミングでいいから.ちゃんと機能分割してみるの その結果として見えてくるものとしてわりとありがちなのが 管理者とかマネージャと名付けてた存在が実は単なる邪魔者でしかなかった(・ω≦) テヘペロ
何とか管理クラスってよく見かけるけど、一体何をしてくれるのかよくわかんないよね。 例えば弾管理クラスとか。あーいうのってもう少し具体的な機能名を付けてもいいと思た
○○Managerって名前付けたくなったときは一度そのメンバ変数やメソッドを全て分離してみると 意外とそれら同士で関連が必要なものって少ないんだよね。そこで必要なものだけを関連付けて、 所有者もハッキリさせた上でそれらを利用するためのファサードを用意すれば、外部からは最初に 用意したかったManagerなクラスのような機能を持ってるだろうし、中身はスッキリする。 スッキリというよりはハッキリか、クラスの数は増えてゴチャゴチャだけど役割はハッキリ。 先にインターフェースから考えようとするとこの辺の分解作業でハマることが多いからほんとバランスが難しいと思う。
自分の場合、Fooクラスのインスタンスを管理するFooManagerクラスがあったら、 FooEntityを管理するFooクラスに書き換えちゃう
>弾管理クラス 蓋を開けてみりゃ、単なる弾専用のオブジェクトプールだったり ディスパッチャを兼ねてたりしてな。それ分割しろよって話になるわな
714 :
699 :2013/04/19(金) 04:34:32.36 ID:xzk7h6Nq
>>705 よく分からないけど、私がシングルトンを愛用する理由はすでに述べた。
そして、
>>691 で名前空間がお勧めされている理由は「素直だから」だけど、私はゲームが作りたくてプログラムしてるのであって、素直な人間になりたくてプログラムしてるわけじゃない。
シングルトンより使いやすいものがあれば、もちろんそっちを使う。
どうも、「シングルトンというものが考案されたそもそもの目的からはずれてる」から、他のを使えと言ってるように思えるんだけど。
そうとは違うの? 「シングルトンはそうやって使うために創案されたんじゃない」みたいな。
でも別に、「突撃砲は戦車の代わりとして使うために作られたわけじゃないけど、戦車の代わりとしても活躍した」よね。
あぁ、ごめん。お腹の調子悪くて変な時間帯に目が覚めちゃったから、半分寝てるんだ。
>>703 暗黙の了解があるったって間違えることも忘れることもあるから、生成方法がわかってればそこそこ安全に使えるシングルトンは落とし所として丁度いいんだよね
「全部把握してるからかんけえねえ!」ってなら確かにnamespaceのがいいかもね
>>714 横だけど、シングルトンクラスをグローバル変数として使うなら、最初からグローバル変数を使えばいいじゃん!
っていう単純な理由じゃないかな。
所詮、シングルトンがグローバル変数として使えるというのは、シングルトンの副次的な特徴でしか無いわけだし。
ま、自分も結構、グローバル変数代わりに使っちゃうことはあるんだけどもw
プラグラム上でひとつしかないってのが使い方とクラス定義からわかるってのも把握しやすくて楽なんだよね
まだシングルトン話してるのか どんだけ実装技法の語彙少ないんだ
1匹の豚だからさ!
>>715 自分でも把握しきれずに使い方をうっかり間違えてインスタンスを生成しようと
してしまうほど多様なサービスがグローバルに提供されてるのか。
>>699 なんかも
「使いまくり」とか言ってたし、世界は広大だなぁ
気のせいかもしれないけど 「OOの定石とかカンケーねーし、俺は俺っすから、俺流ってやつっすよ」 って感じのアクの強い組み方をする我流戦士に限ってGoFのデザパタ用語を 無理やりに自分のやってる事に当てはめようとする傾向があるよね 山籠り修行で独自の理論を編み出して里に降りてきました的な組み方 してんだから、GoFのデザパタ用語なんかに日和ってないで、何かこう 新しいパターンを提唱すればいいと思うんだよね。クローバルパターンとか
タスクシステムパターンとかな
>>721 パターンなんて実装方法を一般化したもんでしょ
そんな細かい概念的な意味にこだわることはないと思うんだが
パターンはこうあるべきっていう信念でもあるの?
横だが、例えばGoF本は 「オブジェクト指向における再利用のためのデザインパターン」 だからねぇ。GoFのパターンが会話中に登場する時は、お互いに ある程度の共通認識がないとコミュニケーションの助けにならんよ
ちなみに俺は常に同一のオブジェクトが得られるような記述を全部シングルトンって言ってるけど、これってなんか間違ってる?
↑だとちょっと語弊があるな 同じオブジェクトが得られるクラスの記述って感じか
シングルトンは構造や振る舞いについてのパターンじゃないからねぇ 間違ってるというか、それだけだと相手と会話がうまく成立するのかが 少し心配になるかな。コード中の文脈が伴わないと何とも言えん。 文脈的には、それが何故唯一のオブジェクトとして生成される ものとして記述されるのか、という点で共通認識がないと そうだねぇー、うんうん、って話はスムーズに進まんでしょ 例えば、ソースコード上に酷似する部分があるからといって これすなわちGoFの○○パターンなりって話にゃならんという 話は分かるだろ?
シングルトンに関しては、使用目的までは定義に含まれてないのが共通認識じゃないかと思ってる。 今まで、いくつかの解説サイトで「しかしシングルトンは、グローバル変数のかわりとして使われることも多い」という記述をみてきた。 これはつまり、「インスタンスがひとつしかないことを保証する以外の目的で、シングルトンが使われることがある」事を認めている表現だ。 さもなければ「グローバル変数のかわりとしてこういったテクニックが用いられることもあるが、それはインスタンスをひとつに制限するために用いられているわけではないので、シングルトンとは呼べない」という主張が多いはずだろう。 だが、そういうのはみたことがない。今のところは。
デザパタ用語の乱用だろ
>>728 >シングルトンに関しては、使用目的までは定義に含まれてないのが共通認識じゃないかと思ってる。
言いたしっぺの人達の言い分もたまには読んであげてもいいんじゃないかと
>Intent
>
>Ensure a class only has one instance,
>and provide a global point of access to it.
>Motivation > >It's important for some classes to have exactly one instance. >Although there can be many printers in a system, there should be >only one printer spooler. There should be only one file system and >one window manager. A digital filter will have one A/D converter. >An accounting system will be dedicated to serving one company. > >How do we ensure that a class has only one instance and that >the instance is easily accessible? A global variable makes an >object accessible, but it doesn't keep you from instantiating >multiple objects. > >A better solution is to make the class itself responsible for keeping >track of its sole instance. The class can ensure that no other instance >can be created (by intercepting requests to create new objects), >and it can provide a way to access the instance. > >This is the Singleton pattern.
読めば読むほどにアンチパターンだよなw
まぁ言い出しっぺの人達の言い分は これも“Elements of Reusable Object-Oriented Software”だよな?だよな? だからな。改訂しても消えないんだから奴らは本気なんだぜ 再利用可能なオブジェクト指向プログラミングをするとしたら こういうのもあるよな?これをシングルトンって名付けたぜ! もし良かったらお前らもこのワードを活用してくれよな!HAHAHA! 実に気前のいい奴らだ
>>731 ? 私は英語はあまり得意ではないけども、そこには「そういう目的で使わないときはシングルトンとは呼ばない」って書いてある?
せいぜい「インスタンスがひとつしかないことを保証するためには、こうすればいい」じゃないの?
それだと、「インスタンスがひとつしかないことが保証されているクラスは、全部シングルトンだ」という解釈は否定できないと思うけど。
シングルトンね。
phpのデータベース接続オブジェクトに、似たようなパターンを使ってるな。
あちこちで生成されると重くなるんで。
>>728 >「しかしシングルトンは、グローバル変数のかわりとして使われることも多い」
変数のスコープの話と、インスタンス生成制限の話は、区別した方が良くないか。
どうでもいいけど一般に言うシングルトンはインスタンスが1つしかないことを保証できてないけどな
まぁおまえら インスタンスコーヒーを飲んで落ち着けよ。
738 :
名前は開発中のものです。 :2013/04/20(土) 15:43:46.35 ID:Az/yMseG
インスタンス生成制限に対するこだわりがそこまであるなら 使う機能をコンストラクタなりセッターなりで注入しろよな
シーンを生成するたびにキー入力のクラスとかをいちいちSetするのが めんどくさかったからstaticメンバにした、シングルトンでも良いんだろうけど
>>740 逆に、何故クラスにしたのか。そしてなんでその理由でめんどくさいって話になるのか不思議
自分でそうなるように設計して書いたんじゃないのか
>>741 Staticにする前提で設計したんじゃないの?
ひとりでやってると数行書く手間省くためにstaticにしてしまうことはよくあるな コード量やインタフェースの複雑さが作業効率に直結するから まあ規模でかくなると破綻するんだけど
お前らがシーンクラスって言うと、なんだかいつも胡散臭い存在になるよな そのシーンさんがいなくなるほうが見通し良くなったでござるの巻に100ペリカ
そもそもどういうものをシーンと呼ぶんだろ シーン自体が切り替わるものなのか、シーン内の状態が切り替わるものなのか、 最初から生成してMapに登録していたものを呼び出すのか 呼び出す都度にNewするものなのかとか 考えるほどに混乱する
「タスクシステム」と同じくらい曖昧だな
どこぞのサイトからコピペした知識とコードだけで書いてる人だと 妙に固定的な考え方と固定的な名前を使いたがるよな。シーンにしろタスクシステムにしろ そんなものそもそも固定的な、教科書のある決まった方法でもなんでも無いのに 凄くその辺の認識が曖昧だと俺も思うわ
タイトルシーンとかあるでしょ オブジェクト指向で設計されたシーンの方がわかりやすいんだけど、 そうでないものでもシーンと呼べるものは出来るし、 どういうところがわかりにくいんだろう シーンをつないでゲームを作るフレームワーク作っておけば、 よりシーン単位でゲーム作る感じになってシーンの差し替えも用意だから複数人でどのシーンを担当とか分業もできるし楽だよね Unityでもシーンと呼ばれるものがあって、C++で作る時のシーンの概念と同じ使われ方(シーンにオブジェクト置いて〜みたいな)だし そろそろシーンについての統一的な概念は理解しておいた方がいいね
タイトル以外がシームレスなゲームってどっからどこまでをシーンってよべばいいんだろ シームレスなところは全部1シーンってことでいいのかね
シーン1からシーン2に画面がフェードしながら切り替わるシーンとか作ったりしてた
日本語だと「画面」が近い、なんてのも聞くよね
どこからどこまでを1つのシーンに収めるかはそれぞれの判断 無理にシーンの粒度を細かくしようとする必要もなくて 基本的に使用するリソースががらりと変わる部分で分けるのが普通だと思う タイトル→ステージ選択(タイトル画面でやるならこれは要らなくなる)→ゲーム→リザルト(ゲームシーン内でリザルト表示するなら要らない) ステージ選択で選択された項目をこのゲーム用のデータクラスに保存、 ゲームシーン開始時に読み込んで選択されたステージを開始 シーンの扱い方はこんな感じ
「それぞれの判断」なら議論はまず成り立たないし かなり厳密な質問でも無い限りアドバイスは空振りするし 全く会話に使えない言葉だな
おまえら日本語処理しなきゃいけないときとかどうしてる? たとえば英字交じりの日本語を一文字づつ表示しなきゃいけないとするじゃん そういうときどうする?wcharつかう?
win環境なら。wchar_t と言うか TCHAR。 勿論、その時の都合にもよるから、必ずな訳じゃないが
常にマルチバイトだな。 自作ライブラリを直さないといけないとなると面倒くさい。
>>753 同感だなぁ
脚本レベルのかなり上位の概念なので、例えば実装レベルの話で唐突に
「シーンクラスが〜」と言われてもそんなの知らんがなって話になる
ゲームのジャンルも何も分からなければ、実装にどう関わってくるのかも
見えてこないけど、そこは空気を読んで無難なところを推測、暗黙の了解を
想像で補え的な?
基本、実装レベルのお悩み相談でシーンという単語が何の前提条件も無しに
ポーンと出てくる時は、この人は猛烈なESPを要求する人だなぁとは思う
>>748 なので実装レベルのお話で何の前提条件も無しにシーンなるものに
“統一的な概念”というのを主張するのはなかなか難しいと思うよ?
例えばUnityにおけるシーンとか、LiveMakerにおけるシーンとか
あらかじめ言おうよって思うなぁ。ちなみにこの二つの例ではかなりの
食い違いがあるというのは調べれば分かると思うよ
男ならユニコード一択だろ Winならなおさら
統一されれば絶対ワイド文字が便利なんだろうけどなあ 正直ワイド文字の動きがよくわかってないってのが本音だけど S_JISの文字列を先頭文字から順に半角全角判定する原始的なやり方が現役
>>761 単純に Unicode16として16bit単位で収まってるだけだよ wchar_t
VC++の場合、UNICODEマクロが定義されてる場合、TCHAR は wchar_t (WCHAR) の typedef で
定義されてない時 char のtypedef
マルチバイトばかり使っててvisualstudioから警告が出てもビビる事はまずなかったが unicode前提のコーディングが思ったより普及していて生まれて初めてほんの少しビビった
unicodeに統一したいけど使うライブラリの引数がchar*とかになっててちょっとめんどくさい
確かにそういった影響は受けるね 俺の場合はDirectXSDK付属サンプルのプロジェクトファイルが デフォルト設定で_UNICODEでビルドするようになった辺りかな。 たぶん2007年とかその辺じゃないかな いい機会だったのでテキスト関係はMS独自仕様の汎用テキストマッピングを 利用するように書き換えたよ
文字セットを設定なしでプログラムし続けてたけど このスレに影響されてUnicodeに設定してみた charをTCHARに置き換えたり、 stringをbasic_string<TCHAR>のtypedefしたものと置き換えたり、 sprintf_sなどを_stprintf_sなどに置き換えたり、 色々面倒だったが全て置き換え終わった
最初はそうやってたが、バカらしくなってきたから必要な時に適宜マルチにエンコードする方向で統一した 処理速度?今時どうってことないさw
バカらしくなるというのは、テキスト関連の処理が広範囲に散乱してるとか?
サロゲートペア考慮したらマルチバイトと手間変わんないしな ただ常用外の漢字ばかりだし読めそうなのって叱るの異字体を使うかぐらいだろうけど 他のOSでのデータの受け渡しやマルチプラットフォーム環境も考慮するとUTF-8で処理だろうし
>>768 Stringクラスは自作してるでしょ?
わざわざワイドの時とマルチの時で処理の整合性が取れてるか確認するのが面倒だったからね
内部的にはワイドだけど外部APIとかがマルチでしか受け取れないときの為に
std::stringに変換するキャスト演算子を用意してんのよ
バカじゃあるまいし広範囲に煩雑にテキスト処理が散乱するような作りにしないでしょ。
>>770 目の前の目的が特に無いまま想像だけで設計してる予感がする
具体的にどんな物作る予定があって自作してるの?
それ次第では手段と目的が逆転してる話ぶりに見える
どういう事かと説明するなら、例えば自分の処理中で必要な内部表現文字列と、
外部とのI/Fに位置する処理を分けて考えてない予感がするって事
どの形式の文字は、どこで必要だから、どこが責任持つかっていう設計力の話
こういう口うるさい先輩いるけど社内でも嫌われてるわ そんなの分かってるし偉そうに当たり前のこと言ってるのかなり恥ずかしいから自重した方がいいよ あと俺の目的は「ライブラリを作る練習」だったから手段と目的は逆転してないよ
773 :
名前は開発中のものです。 :2013/04/27(土) 17:48:26.88 ID:AuNv0U4t
涙ふけよwwwww
wchar使うのが悔しいから何とかchar std::stringベースの補助関数作ってるんだけど 英語圏以外のアジアの国々や右から書く文字の国とかの文字もlocale弄れば2byteで収まりきるのかね
漢字は2byteでよゆーで入るだろ、とか思ったアホな毛唐が作ったんで無理
あいつらもたいへんなんだなぁ
777 :
768 :2013/04/28(日) 07:23:43.90 ID:bNl9N3oW
>>770 自作ではないけど、俺はPocoを使ってるので基本的にはUTF-8だよ。Pocoは
POCO_WIN32_UTF8で使ってるから_UNICODEも定義されてる状態かな。
内部でUTF-16に変換してMSのAPIを呼び出してるから
>>770 とやってることは
そんなに変わらないのかな?
MS謹製の「これからはUTF-16で統一じゃー」のやり方はマルチプラットフォーム前提の
海外のライブラリのやり方とは違うんだよね。MSとの判断の違いは歴史的な経緯の
違いなんだろかね
778 :
768 :2013/04/28(日) 07:48:18.69 ID:bNl9N3oW
>>777 訂正
うちの場合、CRT用の設定で_UNICODEを定義してるからWin32用の
UNICODEも定義される。
で、PocoではUNICODEが定義されてるとPOCO_WIN32_UTF8が定義される
あるクラスのインスタンスをやり取りする時に クラスの機能の一部を隠して相手に渡したい場合ってどうするのがいいのかな? @対象のクラスを包含して、公開したいメソッドと同名のメソッドを定義して、 内部のインスタンスに引数などをそのまま委譲するような実装にする Aあらかじめ、対象になるクラスを、受け渡し用のクラス(公開機能のみ持ってる)から継承させて作っておく B公開したいメソッドを対象のクラスから切り離して新しいクラスを作る 分割元のクラスも、新しく作ったクラスを包含するようなつくりに修正し 受け渡し時にはその内部のクラス(新しいクラス)を渡す 説明が下手で申し訳ない。 @はブツを全く別の箱に入れて渡す感じ Aはエロい用途を知らない女の子に電気アンマを渡す感じ Bはアンパンマンが顔の一部だけ相手に渡す感じ
そのメソッドを使う人には見えて、使わない人には見えないようにしたいってこと? そうでないなら普通にprivateにするけど
性質や目的に応じて使い分けるのが良さそうだけど、じゃあどう使い分けかって基準はパッと浮かばないなあ。 例を出してくれれば個別に答えられるかもしれんけど。
>>782 そのクラス内で自分自身のインスタンス作ってそのメソッド使うならfriendになるのかな?これは賛否あるか
特定のメソッドだけ使えるようにしたいなら、俺なら2かな?
仮想関数だけ定義したクラスを継承させて受けとり側はそのクラスのポインタ使わせる
ようするにjavaのinterfaceなんだけど
ぶっちゃけ好みでいいんじゃね?と思う
PImplの話じゃないの? C++の基本的なイディオムだけど
>>784 実装そのものはPimplに限らず、って感じじゃない?
>>780-781 DXライブラリを使ってマウスの操作情報(InputState)を扱ってるんだけど
依存度を弱めるために使用側とDxLib関数の間にインターフェースクラス(MouseState)を介してます。
MouseStateは、メインループを管理しているクラスによって1フレームに一回だけ更新(Update)された後、
ゲームのシーンクラスに渡されてシーンの更新処理が行われる。という流れにしたいんだけど、
そのまま渡すとシーン内でMouseStateを何度もUpdateできてしまう。
これはDxLibだとマウスホイールの回転数を取得した場合にかなり問題です。
(回転数取得関数は冪等ではないため、そのフレーム中での正しい入力情報が得られなくなる)
そこで、MouseStateのUpdateメソッドを隠してシーンに渡したい、ということだぜぇ。
ちなみにMouseStateのメソッドの例としては次のような感じです。
bool Update();
bool IsDown(ID id) const; // enum ID { LEFT_CLICK, RIGHT_CLICK, etc.. };
Point GetPoint() const; // struct Point { int x, y; };
int GetWheelRotation() const;
ちなみにMouseStateをconstで渡すという方法も考えたけど、constキャストで突破されてしまうというのと
将来的にキーコンフィグなど実装したい場合にconstでないメソッドも公開したいなぁと思ったので候補から外しました。
楽なのは ・Update()は呼ぶなとコメントに書くだけで、あとは気にしない ・Update()をprivateにしてメインループをfriendに指定 …あたりだけど、真面目に答えろよ!って怒られそうな気がする(´・ω・`) 冗談はさておき、この場合は継承(>779の2番)ってイメージではないかなー?
>>786 Update持ったinterfaceとgetも持ったinterfaceを多重継承させればそんな感じにみえなくもないと思うけど
キャストも考慮するなら継承で制限は意味ないな
正直そこまで細かく考えることないからどれがいいかわからんw
逆だわ get持ったinterfaceとUpdateも持ったinterface 自分で言ってて思ったけど多重継承でシグネチャ被ってもいいんだっけ?
ついでに、前述のパターンと照らし合わせます。
@
MouseStateをコンストラクタ引数とするMouseStatePeeperを作り、
MouseStateを包含してUpdate以外のメソッドを実装する(処理としては委譲するだけ)
シーンへの引数の型はMouseStatePeeperにする(コンストラクタにより暗黙の型変換が行われる)
A
予め、Updateメソッドを持たないMouseStateDataクラスを作っておき
MouseStateはそれを継承し、Updateメソッドを新たに定義する。
シーンへの引数の型はMouseStateDataにする(アップキャストで暗黙変換される)
B・・・を書いてる途中にレス!
>>787 ぶっちゃけ趣味だし自分かごく近しい身内しか使わないしコメントで良いよねw
まぁオブジェクト指向とかカプセル化の練習がしたいんですよねー
>>788 クラス図っぽく書いてみますと
[ IMouseStateData | | +Get() ] <|-(継承)-[ IMouseState | | +Update() ] <|-(実装)-[ DxLibMouseState | 省略 | 省略 ]
これならOKだと思います。
[ IMouseStateData | | +Get() ] <|-(実装)------+--[ DxLibMouseState | 省略 | 省略 ]
[ IMouseState | | +Update() +Get() ] <|-(実装)-+
こっちの場合はGet()の被りがアウトだと思います。
あ、すみません! 名前被ってもアップキャストされて使われる分には大丈夫そうですね。 実装するクラスで 親A::Get() { 省略 } 親B::Get() { return 親A::Get(); } って実装すれば良いのかな。
オーバーライドするだけだから C::Get() でいいんじゃないの?
クラシカルオブジェクト指向が初学者に与えた悪影響は計り知れないなwww
ID:N4rcp1wd の固有の実装について、本人がどうしたらいいかわからないから質問するスレになってる
前提のよくわからない仮定の話を延々言い合うスレよりはよほど建設的で有意義だな
既に完成されてるシステムを修正する場合は@のように包含で隠すけど 設計段階で 好きにしていいよ って言われたらBでやる。Aが一番ラクだけどな
よく3Dゲームで、キャラクターがまばたきするけど あれってどういう処理なんです? テクスチャーをずらすとかポリゴンを縮尺するとかあると思うんですがどうやるのが正しいんでしょう
好きにやれ
799 :
768 :2013/05/03(金) 22:20:53.44 ID:0L0/uXNl
>>797 >正しい
状況(前提条件)は君しか知らないんだし、君が判断するしかないんじゃね
それじゃ聞いた意味ないな
質問する意味が無いからな 唯一の正解正しい答えなんて無いもの
テクスチャーをずらしたりポリゴンの縮尺を変えたりするのが一般的だね
ひでぇスレw
なんでも聞けば答えてもらえると思うなよ!ゆとりがっ!! っていうかもうちょっと条件しぼらないと答えようないだろ ポリゴン数や場面、許容されるリソースで最適な方法は変わるんだから 考えられる全パターン並べ立てろとでもいうのか
条件絞るとお前の固有の仕様を実装するんだから好きにしろってなる
806 :
799 :2013/05/05(日) 22:53:24.91 ID:D33QVkss
具体的にこのゲームのこの場面のこのキャラのこの表情ってどうやってんのかな って感じで、例えばつべに動画でもうpって話を振ってくれりゃあ 「見た目からしてこれUV(モーフだけでできそう)じゃねーの?」とか それくらいは答えられるけど・・・ 見た目で判別付きやすい部類の話だからね
807 :
799 :2013/05/05(日) 22:59:32.01 ID:D33QVkss
でも正しいかどうかは知らんよね。学校のテストじゃあるまいし 唯一無二の厳密解が必ず用意されてる的な固定観念いくない
いや、偏差値65以下の猿は、「厳密な正解以外はアウト」でいい。 教えたことを守らなかったら鞭で打てば良い。 分からなかったらウッキーって相談に来るから適当に正解の一つを与えておく。 どうせ猿にそれ以上を生み出す想像力はない。 固定観念イクナイは、偏差値65を越えてから。
809 :
799 :2013/05/05(日) 23:41:36.91 ID:D33QVkss
あ、はい
810 :
799 :2013/05/05(日) 23:47:20.21 ID:wDdaj/7o
触らないほうがいい
(話題ふれよ誰か)
812 :
799 :2013/05/05(日) 23:52:17.32 ID:D33QVkss
813 :
812 :2013/05/05(日) 23:54:16.01 ID:wDdaj/7o
触らないほうがいい
おまえらC++11の機能ってどの程度使ってる? スマートポインターとラムダ式とfor eachは使ってるんだけど 資料が少なくてどの機能が合ってどこまで使えるかわからないんだ
VS2012の話? とりあえず自分で1個ずつ使って試せばいいけど、 実際に試して結果をまとめてくれてる人の記事がいくつかあるから参考にさせてもらうと良いと思うよ 後置きテンプレートをやってみたかったけど対応してなさそう
一番使ってるのはautoかもしれん
お知恵をお借りしたく質問させていただきます 1 4 2 3 ジョイパッドのボタン配置変更についてなのですが、 例えば、1のボタンを2に変更したとします その時、同じボタンが存在しているのは不自然なので 2のボタンを1のボタンに変更させるわけですが、 これを考えれば考えるほどややこしくなります 1と2だけで考えるなら簡単ですが、 例えば1を3にして、3を1に変更、 さらに1に変更した3を2に変更する、 すると2は1に変更される
プレイヤーが制作者の意図する順にボタンを変更してくれるなら 組むのは簡単ですが、どの順番でどのボタンをどのボタンに変更するのかは その時のプレイヤーの気分次第です 1 4 2 3 もしかすると、4を3に変更して 3が4になり、 2を1にして、1が2になり、 「やっぱやーめた」と言って 2になった1を1に戻し、1になった2は2に戻り、 4になった3を2に変更することにして、2が4になることもある このように片方のボタンを別のボタンにした時に、 その変更前のボタンを自動的にそのボタンに変更する というプログラムに頭を悩まされています お知恵をお借りできればと思い質問させていただきました
1 4 2 3 1.1を2にすると2を1に変更する 2.1を3にすると3を1に変更する 3.1を4にすると4を1に変更する 4.2を1にすると1を2に変更する 5.2を3にすると3を2に変更する 6.2を4にすると4を2に変更する 7.3を1にすると1を3に変更する 8.3を2にすると2を3に変更する 9.3を4にすると4を3に変更する 10.4を1にすると1を4に変更する 11.4を2にすると2を4に変更する 12.4を3にすると3を4に変更する
ノーマルで考えるならこういうことになるのだが、 これは、それぞれのボタンがそれぞれのボタンの時のものです 1が2や3や4になっていたり、 2が1や3や4になっていたり、 3が1や2や4になっていたり、 4が1や2や3になっている場合もある それらのパタンもすべて考えると、かなりたくさんの条件式になってしまうので、 もっと短く簡潔にできないかなと考えています。 ボタンは4つしかないのです 片方を別のボタンに変更したら、変更前のボタンを変更後ボタンが 元あった場所のボタンに自動的に変更させる という仕組みを考えれば考えるほどややこしくなるぜ
もしかしたら全ボタン2にしたいかもしれないのでそのままにする! やった!かっちょよく決まった!
変更前のボタンを一時的に記憶する。 ボタンを変更する。 変更後のボタンと重複してるのをループで探す。 (さっき変更したところはスキップ) 見つけたらそこを一時的に記憶したので上書きする。
単純にボタン番号をスワップしてるだけにしか見えないんだが 複雑になるのか?
何を悩んでるのかがわからないw 初期状態が、 ButtonMap[0]=1 ButtonMap[1]=2 ButtonMap[2]=3 ButtonMap[3]=4 で、これを入れ替えるとすると、 たとえばswap(&ButtonMap[1],&ButtonMap[3])で、2と4を入れ替えて ButtonMap[0]=1 ButtonMap[1]=4 ButtonMap[2]=3 ButtonMap[3]=2 になるとかいう話じゃなかったりするのか?
826 :
名前は開発中のものです。 :2013/05/24(金) 11:02:17.17 ID:u2VY/BUA
プッ
そんなに悩むような事かな? キーコンフィグ処理で、一時変数でも用意してそこで設定させて 決定したらそれを実際の設定に反映させればいいだけじゃ。
グラフィックが格好いいな。見習おう。 それはさておき、キーコンフィグを楽に作成するコツは、 >822の言うように、キーコンフィグ中に実際にボタン変更をしないことに尽きると思う。 リアルタイムに更新するのは、デメリットが結構大きい。 例えば、決定やキャンセルのボタンなどが消えてしまってコンフィグ画面から抜け出せなくなったり、 「押した瞬間」「離した瞬間」「押しっぱなし」などの処理がごっちゃになって、不具合が出る可能性があったり、 そもそもプレイヤーが混乱してしまう場合とかね。 コンシューマゲームなんかでも、ゲームによっては ・方向キーはキーコン不可 ・キーコンフィグ画面での決定/キャンセルは、スタート/セレクトボタン。かつこの2つはキーコン不可。 ……みたいな対策を取ってたりする。 その上で、どのボタンにも割り当てられない機能があったり、 あるいは1つのボタンが複数の機能に割り当てられているのを回避したければ、 ボタンを設定する時に既に登録されていれば入れ替えるなり、エラーメッセージを出すなりすればいいと思う。
アルゴリズムはともかくとして
>>827 のUIちょっと分かりにくくないか
ボタンを選択してボタンを押すってちょっと混乱するし
機能を選択してボタン割り当てた方がよくね?
∧_∧ ガラガラ( ^^ ) <これからも僕を応援して下さいね(^^ =〔~∪ ̄ ̄〕 = □――◇ Kazuki
エミュレータとかのキー設定機能を参考にしてそのまままねればええやん
833 :
817 :2013/05/25(土) 06:23:36.57 ID:/8i6z5tG
834 :
817 :2013/05/25(土) 06:37:47.44 ID:/8i6z5tG
835 :
817 :2013/05/25(土) 06:52:19.37 ID:/8i6z5tG
>>833 訂正
>途中で訂正したい場合はキャンセルボタンで1つ前に戻すようにして
考えてみたらボタン配置を決めてる時にキャンセルボタンで戻すことは無理ですね
そのキャンセルボタンの位置すらも設定しているのですから
なので、1〜4までの機能をすべて設定し終わってから
最後に確認するようにして、そこでキャンセルしたら設定をオールリセットして
最初っから設定し直すことにする
ところで俺のRPGではボタンが1つ余ってるんだが
なんか適当な機能のボタンってないかな?
1.メニュー表示
2.決定/話しかける
3.キャンセル
今んとこ、3つまでなのだが、
あと1つあればシマるんだがね・・・
余計なボタンは入れないほうがいいと思う。
特に新しい要素を追加したくないなら、高速会話スキップとか
>>834 プリセットを入れるなら、プレステ風とXBox風の2つは欲しいな
839 :
817 :2013/05/25(土) 12:09:33.98 ID:/8i6z5tG
>>837 ありがとう
とりあえず4つ目のボタンはスペシャルボタンにしておきます
街中で押すと特別なことが出来たり
戦闘中に押すと、また特別なことが出来たり
フィールドで押すと、また特別なことが出来たりなど、
押す場面によって内容を変えるようなボタンにしてみようと思います
ドラクエ等で採用されてる、 メニュー深層からの全キャンセルが地味に便利よな。
841 :
817 :2013/05/25(土) 13:45:03.08 ID:/8i6z5tG
842 :
817 :2013/05/25(土) 14:03:26.80 ID:/8i6z5tG
>>840 全キャンセルボタンは確かに便利でいいね。
だけど、メニュー画面を表示させた後は、
メニュー表示ボタンを使うことはないので、
「@メニュー表示ボタン」をオールキャンセルボタンに割り当てようと思います
他のRPGとの差別化を図るため、
スペシャルボタンは、他のRPGにはないユニークな機能を割り当てようと思います。
例えば、戦闘中に連打するとダメージが少し上がったり
敵の攻撃を避け易くなったりする。
子供の頃、RPGの戦闘で無意味にボタン連打をした覚えとかないかな?
そういうのに付加価値を付けたりして
説明書には、その説明はあえて書かないでプレイヤーに探してもらう
世の中、隠し機能はだいたい隠されたまんまだぜ
そういう理不尽な隠し仕様で喜ぶのは作者だけ
隠し機能を見つけ出すって事は、かなーり根性入れてプレイしなくてはいけないわけで、 それだけプレイするって事は、それだけ面白いゲームでなくてはいけないわけで、 並のゲームじゃ、そこまでやりこまれる事は絶対にないわけで。
昔のFC時代の「裏ワザ」なんかは、開発が仕込んだものは、 誰も見つけないとわざと攻略雑誌に流していたりしたからなぁw 雑誌の編集側もわきまえてて、 編集部に遊びに来るような常連さんの名前で出して 採用のプレゼントを回すようにしていたりして。 まぁ、そのあたりはズブズブでやってたよなぁw
848 :
817 :2013/06/01(土) 02:05:02.41 ID:5fZGqmSU
>>846 説明書には、スペシャルボタンは「何かいいことが起こるかもよ?」
とだけ書いておくことにしよう
何が起こるのかはプレイヤーが試してみてのお楽しみです
別にそのボタンを使用しなくてもゲームはクリアできるのだから
ゲームプレイには何ら支障は出ない
ただ、それを見つけた人は
「自分だけが知ってる特別感」だったり
見つけた時の「お!?」という喜びを得ることが出来る
例えば、RPGの戦闘で敵が攻撃してくるとするじゃない?
そのタイミングでスペシャルボタンを押せば
100%回避することが出来るなど。
知っててもタイミングが合わないと回避できないという二段構えの遊び心
いや、その裏技を極めれば低レベルクリアも可能なので
三段構えの遊び心かもね
849 :
817 :2013/06/01(土) 02:17:43.79 ID:5fZGqmSU
RPGツクールとかウディタとかを使うと 例えば、こういう細かいアイディアを実装することができない 出来たとしても大変な作業です。 戦闘中に敵の攻撃時のあるタイミングでスペシャルボタンを押すと回避なんてね そやけど、プログラミング言語を使用したオリジナルゲーム開発なら そんなに難しくはないよね?くしゅん だってゲーム開発者は1フレーム(1/60秒)間隔で コード書いちゃってるわけですから 自分が「ここだ」と思うタイミングのところに 「スペシャルボタンが押されていたら100%回避する」という条件式を書くだけのことです
デバッグ用機能をリリース版にも残してるだけだな。 なんかない?って言われたら教えるけど。
ツクールやウディタでさえ完成させられなかった人間は 隠し要素なんか考えるより完成させるためにそういう無駄を極力省いて 作業工程をどれだけコンパクトにまとめられるか考えたほうが良いと思うよ
852 :
817 :2013/06/01(土) 11:08:05.24 ID:5fZGqmSU
>>851 わしは完成させることよりも
開発している過程そのものを楽しんでいるところがある
ぶっちゃけ完成させること自体はどうでも良かったりするわけだ
それがビジネスと趣味とのゲーム開発の違いなんだろうねだろうね
ビジネスだと、どうしても完成させる必要があるが、
趣味であれば別に完成させる必要もない
開発する過程させ楽しめればいいのだからね
あと、こんな風に複雑な処理で凄いことをするのではなく
ちょっとしたアイディアで面白いことをすることが凄い好きだし楽しい
昔のゲームって、そういうアイディア勝負みたいなところあったよね
そういうは考えることも思いつくことも好きですわ
853 :
817 :2013/06/01(土) 11:16:43.71 ID:5fZGqmSU
俺らの世代はRPGの戦闘中に 隠しコマンド(→←→←ABなど)を入力すると 特殊な効果音が鳴るだけで興奮するよな 自分が開発するゲームには 昔のゲームにはよくあったそういう隠し技的なものは入れたいね 最近のゲームは複雑で高度な処理ができるようになったからなのか そういう小手先の裏技的な遊びをしなくなったのが不満です
完成させないで妄想してるだけとか中二の黒歴史ノートレベルだったのか ならば他所でやったほうが良いんじゃね ゲームって言うのはプレイヤーがいるからゲーム足りうるわけで その状態に持っていくため、もって行った時によりプレイヤーの気を引くための技術が ゲーム制作の技術なんだから
別に好きにやればいい 他人のやり方に色々言えるほどお偉い方ならそれこそ こんなところにいなくてもいいよ
まあここは仕様じゃなくて実装を語る所だしな 端からみて?な仕様でも作るのは本人の勝手だし
なんでこの人質問してるのにずっとえらそうなの? 自分のゲームが面白いって勘違いしてるの? 自分の技術が無いのに実装は難しいんだよな〜とか難しいこと言ってるの?
>>846 ,
>>847 へー、そうなんですか。
昔よく遊んだファミコンのゲームで、まだ世に知られていないコマンドがあるのかとwktkしました。
確かに雑誌の裏技コーナーを見ていて「こんな複雑なコマンド入力、どうやって見つけたんだ?」ってのはよくありました。
バイナリでも解析してるのかと思ってた。
昔、ファミコンのドルアーガの党で256面までステージセレクトできる入力コマンドがあって、
「公式回答はバグだ」って話を聞いて、
どう考えても意図して練りこまれたものに違いないと思ったことがある。
860 :
名前は開発中のものです。 :2013/06/01(土) 22:15:49.83 ID:MD94+b1q
>>ドルアーガの塔 懐かしい裏技だな。画面がフリーズしたり真っ暗なステージや変な色の敵キャラが出たりで 情報の乏しかった当時全フロアひとつひとつ調べた記憶があるわ。 今は検索ひとつでそれらの情報が見られるサイトがみつかるから便利だな。
>>848 何か良いことあるかもよ?くらいだと多分見つけてくんないと思うw
凄く分かりにくいところにいるNPCに語らせるくらいで良いかもしれんよ。
どこかに各種コンパイラのC++11対応表なかったっけ?
864 :
名前は開発中のものです。 :2013/07/12(金) 18:21:41.58 ID:XMkE/WwO
アベノミクス財政支援で 景気回復! 識者の意見は?
boostをラップしただけのライブラリに見えた
boostは使ってないですw まあやってることは似たようなことですけどね
むしろ使ってくれた方が信頼性が・・・ GPLじゃないライブラリはどんどんラップされればいいのになぁ
通信系は、他人の書いたライブラリ使うとか、ないわw 抽象化の哲学が違うから使いにくい上に、なにしてるかわからんから怖すぎる。
自分で書くとだるいから良いと思うけど
871 :
名前は開発中のものです。 :2013/07/14(日) 18:44:46.80 ID:KZLrwf/e
座標Aを頂点とする円錐(方向ベクトルav,底面の半径ar)に、座標B(x,y,z)が含まれているか判断したいのですが、 数学素人なもので、STLか素で動くコードください!!!!!! 円錐は円錐(方向ベクトルav,底面の半径ar)と表しましたが、 頂点座標Aからベクトルav方向の要素と、角度の指定と距離指定があればなんでもいいです!!!! お願いします!!!!
872 :
名前は開発中のものです。 :2013/07/14(日) 18:50:41.24 ID:KZLrwf/e
あ、AとBの距離を調べればいいので、円錐じゃなくてもよかったみたいです。 まとめると、座標Aからベクトルav方向の誤差角度θ内に座標Bが含まれているかどうか、です。
こんな感じ D3DXVec3Sub( &AB, &B, &A ); D3DXVec3Normalize( &nav, &av ); fa = D3DXVec3Dot( &nav, &AB ); fc = D3DXVec3Length( &AB ); if (fa <= 0.0f) return false; return (fa / fc) >= sqrtf(1.0f - ar * ar); もしくは return (fa / fc) >= cosf(θ)
ユーザーが画面上のオブジェクトをクリックしたとき、 クリックしたことがはっきりわかる画面上のエフェクトを表示したいのですが、 どんな種類のエフェクトが考えられますか?2Dのゲームです。 今は、小さな☆をいくつか放射状に飛ばそうかと思っているのですが、 何かいいアイディアがあったら教えてください。よろしくお願いします。
876 :
名前は開発中のものです。 :2013/07/15(月) 18:18:57.19 ID:EkfWHliN
描画リストを作っているのですが、どっちのほうが一般的でしょうか? ・オブジェクトが、毎フレーム描画リストに登録を行う ・オブジェクトの初期化時にポインタを登録して、フラグで管理する
>>876 僕は両方使ってます
エフェクトのような大量に発生して短期間で消えるようなものをリストにいれていても無駄なので、毎フレームごとに削除フラグのついたオブジェクトを取り除いています
また、描画リストの操作を行うと却って煩雑になるような、オブジェクトが一時的消える場合などは描画フラグで管理してます
>>875 > 小さな☆をいくつか放射状に
それで問題ないと思う
押した/叩いたってのが感覚的に分かればいいので
星が散れば叩いたって事が分かるだろうし
879 :
名前は開発中のものです。 :2013/07/16(火) 23:54:54.06 ID:nroTpBI+
取りかかっといて完成させられない奴は、 一生なにも完成させられない。 例え、趣味でもだ。 そんな奴は、最後まで 中途半端で終わるよ。
そうなんだすごい
>>876 そのオブジェクトのdraw()に任せるんだからどっちも自在じゃない?
強いていうなら前者で、内部にフラグを持たせておく。
描画リスト自体を描画オブジェクトとして扱えるようにしておけば
階層構造でソートもスッキリできるし
毎フレームオブジェクトの数だけVECTORに登録するのってどれぐらいコストかかるんでしょうか
任意のオブジェクトを任意の数eraseするより軽い?
テストケース思いつかないのでそこも教えていただけると助かります。
また、描画フラグを持つということは、描画リストに登録する時に判定を行うということですよね
そうすれば
>>877 さんの方法も利点を踏まえてできそうです
C++で、以下のような目的に有用なコンテナがあれば教えてください。 STLかboostが望ましいです。また、要素数は10〜1000くらいを想定しています。 ・先入れ先出し(queue) ・先頭から昇順で舐める(取り出さない) ・末尾から降順で舐める(取り出さない)
LinkedListかな?
双方向の連結リストをqueue代わりに使う感じです?
てか、それそのまま std::queue じゃダメなの?
>>886 std::queueだと、2番目と3番目が一手間かかるかな?と思ったんですが、
実装によっては行ける場合があるみたいですね
stdすら触ったことないけど std::listとか
自己解決です。 std::listについて調べてたときに見つかった、両端キュー(std::deque)を使うことにしました。) listでも良かったのですが、あくまでqueueであることを強調しておきたかったので。 全く知らなかったんですが、std::queueの中身(?)としてdequeがデフォルトで使われるんですね。 ありがとうございました。
dequeはvectorのつもりで使うと遅いらしい(言いがかり) queueを強調したいなら typedef std::vector<XXX> myqueue; のが幸せになれるかもね
便乗だけど便乗だけど既存のものでスレッドセーフなキューってないかな? ロックを意識することなく同時操作が可能なだけじゃなく、 ある時点のスナップショットがとれたりするといいんだけど
vectorってstackじゃなかったっけ?
あぁごめん ・先頭から昇順で舐める(取り出さない) ・末尾から降順で舐める(取り出さない) の部分に気を取られて基本出し入れせずに舐めるのかとおもたわ 出し入れが多いならvectorはダメね
なんか卑猥
いいなぁ、なんでも卑猥に見える、そういう童貞力。 それこそイマジネーションの礎なんだよなぁ、今にして思うと。
896 :
名前は開発中のものです。 :2013/07/24(水) 18:36:04.12 ID:HZacDJIx
>>873 返答遅れて申し訳ないです
速度的に、できたらsqrt()平方根使いたくないのですが、平方根を使わないで
座標判定できませんか?
逆に2乗
898 :
名前は開発中のものです。 :2013/07/24(水) 19:18:26.70 ID:HZacDJIx
あ、ありがとうございます。 それと最後に、 arというのは円錐の底面の半径でしょうか?
1-ar*arがどうやって導出されたのかわからん ar<=1じゃないとsqrtfがエラーになりそうだけどいいの
プログラマーの求人を見ると C言語やC++で開発している会社を全く見かけません 考えられるとすれば、以下の理由からだろうか 1.C++は、古すぎるので今はどこも使っていない 2.C++は難し過ぎるから、もっと優しい言語で開発している
>>900 ちょっと違う。案件はあるけど、新規に社外から人を募集する事が少ないってだけ。
そしてイントラ開発やWeb開発の求人が並ぶようなリストには基本的にあまり登場しないので、
もしもそっち系を見ていたら当然、ますます出てこない。
もうちょっと言っておくと、難しいとか易しいとか、古いとか新しいみたいな話じゃないって事。 一般の初心者みたいな人だとそういう観点しか持ってないだろうから、わからないかもしれないが、 これらはあくまで道具なので、そして道具の性質と案件内容による訳で、必要なノウハウ規模と事後の事もあるので、って事。
普通にC,C++の技術者はあぶれてる状態 組み込みでは使われてるけど新規募集するほどの案件はない 今はJava, C#, PHPなどがよさげ これからはビッグデータ特需でデータベースエンジニアの時代がくるでしょう
以降はマ板で
セーブデータ管理するクラスを作りたいんですけど、インベントリに入っているアイテムなどの情報ってどのようにセーブしたらいいですか? アイテムクラスを継承してはいるんですが、アイテムの種類によって派生クラスのインスタンスを持っています。 アイテム名だけセーブして、ロード時にまたインスタンスを作れば、とか考えたのですが 文字列からクラスを指定するにはどうしたらいいのでしょうか? if文でも片っ端から比較することは出来ると思いますが、アイテムの種類が多いのであまりしたくないです。
アイテムのID番号みたいなのはないの?
907 :
名前は開発中のものです。 :2013/08/08(木) 20:48:45.82 ID:/wmWfYu4
アイテム毎にクラス作ってんの? クラスをひとつにして属性で種類とか効果持たせたら
>>906 ID番号を作ってもいいのですが、やっぱりif分の連発になってしまうような・・・
>>907 説明不足でした、インベントリなので武器や防具なども入ります。
イメージ的には初代ポケモンの、わざマシンとモンスターボールが同じインベントリにあるような感じです。
>>905 原始的だけど、私はアイテムのクラスごとにID割り当てて、
switch(id){
case 0:
Item* = new ItemA;
break;
case 1:
.
.
.
}
って感じだったよ。
100種類くらいあったけど、KIAIで入力したよ。
ワンライナーにすればたかだか100行や
もう根本的にデータ設計に失敗してるよな。
動いてるコードなんてそんなもんだろ。
>>909 なるほど、では気合でやってみたいと思います。
>>911 どんな設計がいいのでしょうか?後学のために・・・
914 :
名前は開発中のものです。 :2013/08/08(木) 21:32:23.89 ID:zxVj/kx+
どういうコード書いてるかわからんからなんともいえんけど アイテムの種類でクラス分けてるなら名前と種類のマトリクスありゃいんじゃないの アイテムの名前の数だけクラス作ってるならしらん
>>913 とりあえずRDBを一通り学んだあと、本当にデータ設計がそれでいいのか考え直せ。
それからIDに対応したデータを探すなら配列にするかハッシュにするかだ。
片っ端からというのが既におかしい。
俺のやり方だと 種類ID(0=装備 1=わざマシン 2=ボール みたいな) 種類の中の個別ID(ボールなら 0=モンスターボール 1=スーパーボール みたいな) って作って ロード時にアイテムクラスコンテナ[種類ID]に種類IDごとにデータ(かポインタ)を全部ぶち込む で、セーブに種類IDと個別IDをとっておけば1行でアクセスできる って感じかなぁ
917 :
名前は開発中のものです。 :2013/08/08(木) 21:47:25.53 ID:zxVj/kx+
種類が多いのか、よく読んでなかったわ
>>915 種類ごとに分けたクラスを使うということだと思うのですが
(モンスターボール・スーパーボール・ハイパーボールは同一のクラスということ?)
セーブデータから取得したデータから、クラスの種類を判断する良い方法がないかなと質問しました。
セーブデータから取得できるデータというと、数値か文字列だけになると思うのですが(バイナリは知りません)
となると、
>>909 とちょっと似てますが
switch(TypeId){
case BALL:
Item = new CBall((int)ItemID);
break;
}
のような・・・
919 :
名前は開発中のものです。 :2013/08/08(木) 22:05:02.43 ID:zxVj/kx+
アイテムをクラスで分けるんじゃなくて効果をクラスわけしてアイテムのインスタンスに持たせた方がいいんじゃないの アイテムの種類で大量にクラスが出来るってのがよくわからん 例えば武器と防具なら装備箇所、上昇するパラメータ、特殊効果等を属性で持っとけばクラス分ける必要なさそうなもんだけど
>>919 >>907 にもちょっと指摘されたのですが、
ゲーム全体の武器種類総数が少ない代わりにそれぞれ異なるアクションを持ってたり判定があったりするんです。
ガンダムEXVSの格闘アニメーションみたいな・・・
例を挙げると、ソウルサクリファイスというPSVitaの魔法で戦うゲームがあるのですが、
モンハンの武器みたいにカテゴリ分けできなくて、魔法一種類一種類のモーションや攻撃判定方法自体が違うんです。
そうするとポリモーフィズムを使う前提でクラスを分けて動作を一つ一つ指定して・・・という感じです
921 :
名前は開発中のものです。 :2013/08/08(木) 22:53:08.22 ID:zxVj/kx+
>>920 動作を別クラスにして参照持たせたら?
動作毎にIDふっとけば取得は簡単だと思うけど
922 :
名前は開発中のものです。 :2013/08/08(木) 22:57:43.26 ID:zxVj/kx+
もしかして動作のパラメータをひとつひとつハードコーディングしてる?
>>921-922 そうですね、銃剣で切りつけた後流れるように打つモーションみたいなのも想定してたので
武器ごとにまとめたほうがいいかなと
武器のクラス分けはどちらにしろ、インベントリで管理する以上
少なからずクラス選別の問題があるので質問したんですけど・・・
924 :
名前は開発中のものです。 :2013/08/08(木) 23:32:09.09 ID:zxVj/kx+
いずれにしろ文字列からインスタンス生成しようと思ったら分岐でわけるしかないんじゃないかな ただクラス数は減らせるんじゃないかと思ったので
超お勧めしないけどシリアライズって手段もあるな 超オススメしないけど
926 :
名前は開発中のものです。 :2013/08/08(木) 23:54:28.56 ID:zxVj/kx+
書くのが面倒なんじゃなくて分岐しまくりでパフォーマンスが気になるってことなら 配列にインスタンス生成する関数ポインタつめて、アイテムIDをその位置のintにしとけばO(1)で生成は出来ると思う 俺なら分岐でやるけど
>>926 行き着くところはその2択ですか、うーん・・・
考えてみます。ありがとうございました。
根本的なところに手を付けるとしたら、各アイテムの効能は 本体でなく外部スクリプトに出しちゃうのが一番スッキリするとは思う でないと速度だけならファクトリ配列とかで何とかなっても 結局その配列生成部分がメンテ必須になっちゃうし
>>925 開発中にその部分の処理が変わってしまい、ロード出来ないとかなw
もちろんシリアライズのやり方にはよるんだろうけど
スクリプト化は時と場所を選ばないと 地獄を見ることになると思う
速度云々は抜きにしても、>926の方法で、 IDと生成関数(ファクトリだっけ?)のセットを登録できる仕組みも用意しておけば 基本クラス弄らずに、アイテムを追加できたりしないかな? もちろん、どうやって登録するかという問題は残りそうだが…
ゲームの大半をスクリプトで作ってみたい
SKYRIMとか拡張性超重視して 建物・敵・クエスト・各種テーブル・AI・パラメータいろいろ 全部スクリプトなのかな
ビルボード以外で一番軽い処理となるとどのようなものでしょうか?
>>935 とりあえずGPU側で処理とか?
CPU側からは計算用の係数だけ渡すとかして。
もうちょっと言うと、予めVertexBufferに3*2*自分で決めた最大表示数の煙のセル個数分の座標値とUVは固定、 あとセルの単位で自分で決めた配列番号並べてシェーダに渡しておいて、 通常は毎度必要なだけの係数をUniform変数だけセットして、シェーダで描画させるみたいな方法 アクションゲームのエフェクト処理書くときよくやる俺
>>937 プログラマブルシェーダとかいう奴ですか・・・
そもそもビルボードは頂点数が少ないので、処理をGPUにやらせても負荷軽減にはならない。 遅くなっている奴は大概、ビルボードの数だけ描画を行っているのが原因。 頂点バッファを一つにまとめて、描画回数を一回にするだけで解決する。
そうとは限らない。
とある頂点のインデックス
DrawPolygonIndexed3D こ、これかぁ・・
プログラムの中で頂点座標指定したりUV操作したり結構難しくないですか
2Dにすればいいじゃない
ジオメトリーインスタンシングが最強
DirectXとかOpenGLとか追いかけてれば 自然と入ってくる知識だと思う
ネットでも稀によく取り上げられているし Direct X SDKのサンプルにもあるしおすし
950 :
名前は開発中のものです。 :2013/08/11(日) 16:31:42.87 ID:f9Bx1ZL3
お前らはgemsとか愛読してんの? アレ高すぎて手が出ないんだけど
今更な感じがしないでもないですが、 ゲーム開発にはC言語とC++は、どちらが適してるプログラミング言語と言えるでしょうか? 俺はこれまでC言語とC++は同じものという考え方をしていたのですが、 よくよく考えると、C言語とC++は別もののプログラミング言語であるように思えました C++は、C言語にプロジェクト指向を取り入れた言語であることは言うまでもないですが、 オブジェクト(クラス)を使う利点は、ワープロやアプリケーション開発に向いているように思えます つまり、同じ処理を繰り返す比率が多いからです そしてC言語は、組み込みシステムと呼ばれるものですので C++よりもC言語の方がゲーム開発に向いていると思える 組み込みシステムとは、ゲーム機器に組み込まれているハードウェア+ソフトのシステムのことです
何処から突っ込んだらいいの?
全く同じ実行内容のゲーム開発をするとして、 C言語だけで組まれたプログラムと C++のオブジェクトを使って組まれたプログラムを見比べると C++の方が遥かにややこしいプログラムのような気がします クラスを使うためにクラス内でメンバ関数やメンバ変数を使って publicやらprivateやらを使って定義を構築 メインプログラムからはクラスを使うために new演算子でインスタンス作成をしてオブジェクトを作成 そして、そのクラスのメンバ変数を呼び出してプログラムを構築する クラスを使うには、これだけたくさんの工程が必要なのです C言語だけで組むなら、直接命令を打ち込むだけで済むじゃないですか? ゲームというのは、コントローラーに付いている僅かなボタンしか使いません キーボードを使って文字を入力したりもしませんし、 与えられた項目を十字キーで選択して、決定ボタンを押すだけです そのようなシステムになぜ、C++でなきゃいけないのだろうか? 書店で見かけるゲームプログラミングの本はC言語を使ったのはよく見かけますが C++で解説しているゲームプログラミングの本が全くないのは、そのためのような気がします。
>>952 すみません
オブジェクト指向の間違いですw
あと、C言語だけを使ったプログラムとは
C++を使うがオブジェクト指向の機能だけ使わないという意味です
つまり、変数の宣言や初期化をプログラムの冒頭でやらなくても済むという
C++の特徴などは使うという意味です
C言語の場合、プログラムの途中で変数を宣言して使うことは出来ませんが、
そういうのは抜きで、あくまでもオブジェクト指向の機能だけ使わないという意味です
ゲームが項目を選んで選択肢を押すだけのゲームだったらいいね
956 :
名前は開発中のものです。 :2013/08/11(日) 18:59:10.63 ID:Vkv1rucG
ゲームは一秒間に60回同じ処理繰り返すわけだけど、アプリケーションやワープロの方が同じ処理を繰り返す比率高いの?
957 :
名前は開発中のものです。 :2013/08/11(日) 19:00:32.20 ID:Vkv1rucG
ていうかそれ以前に同じ処理繰り返す比率とオブジェクト指向になんの関係があるの?
C言語にも構造体という技術もありますし、 メンバ関数を使わなくても、普通の関数を使って呼び出すことも出来ます グローバル変数を使えばスコープ外に変数を使うことだってできますし、 グローバル変数でも解放は出来るじゃないですか そう考えるとC++でゲーム開発をやっていた自分が無駄なように思えてしまいました なぜ、俺はここまでオブジェクトを使うことに拘ってるのだろう?と・・・
オブジェクト指向のほうが個人的にはゲームに向いてると思うよ ゲームは、ゲーム内のオブジェクトを動かしたりアニメーションさせたりするわけで それには座標やら向きやら速度がオブジェクトそれぞれに必要なわけで これらの情報をまとめて持つということに関してオブジェクト指向がプログラマにとって一番わかりやすいはず。 別にプログラマの技術力を無視した視点から見ても 助けてくれるサポートコミュニティが無数にあるフレームワークというか言語のほうがいいんじゃないか
>>956 俺が言ってるのは、クラスを1つ定義しておいて
それをたくさんのオブジェクトでクラスを複製して使うという意味です
オブジェクトの特徴ってそういうことじゃないですか
1本のゲームを作り上げるのに
クラス化にすることがそれほど必要なことなのでしょうか?
シューティングなら主人公の構造体と敵の構造体を別々に個々に用意してもいいような気がします
一度処理を書き込んでしまえば外部のループから頭スッカラカンにして呼び出すだけでいい っていうのが楽で素晴らしいと思う
962 :
名前は開発中のものです。 :2013/08/11(日) 19:09:51.35 ID:Vkv1rucG
>>958 その気づきは大切なことだからいいと思うけど
まずオブジェクト指向の利点について勉強した方がいいんじゃないの?
ちなみにC++のコードはCのコードに完全に置き換えることも出来るよ
ついでにObjective-Cも
グローバル変数を使えばできる C++なら使わなくてもできる。素晴らしいじゃないか
>>959 まあ、俺が単にオブジェクトが苦手ということもありますが、
助言ありがとうございます
DirectX学ぶにはどうしたらいいですか? 猿でもわかるようなのがいいです。 デバイスの宣言とか頂点バッファ?とか、 C++初級者でもシェーダプログラミングとかまでこれ一冊! って感じの本無いですか? 贅沢を言えばGPUに処理投げられたり?するとか、そこら辺の基礎知識も一緒に学べるようなもので、 ゲーム開発を意識した本が良いです。 ベクトルや行列の基礎知識はあります。 予算は5000円付近で やっぱりDirectXの前提知識が無いのでわかりやすいのがいいです。
なんか、アホな会話がされているようだが、俺もアホだから興味深い話だw 俺はオブジェクト指向がどうも理解できなくて、グローバル変数や構造体でゲーム作ってる ヘボプログラマだから、クラスだのなんだのがゲーム製作に有用なんだったら どこがどう有用なのか知りたいと常々思ってる。 けど、解説とか「だからそれがゲームにどう関係あるんだよ」みたいなのしかなくて どうにも身につかないんだ。
ヒント:フレームワーク
あ、俺は職業ゲームプログラマーというわけではありません ただの趣味でゲーム開発を楽しんでいるだけです 最初はC言語だけでゲーム開発をやっていたのだけど、 途中でC++というのを知って オブジェクトに手を出してみたのですが、それが意外と難しくてつまずいて そこで、なぜ、俺はこんなややこしいオブジェクトを使ってるんだ?ウガー! となってるだけですw オブジェクトにつまづいたことへの愚痴のようなものです
>>964 ちょっとわかりづらくなるかもしれない例えになるんだけど
C言語の構造体だと、例えば敵とキャラクターの接触が起きた時に
それぞれの構造体データに対して、
「おいお前、敵とぶつかったから一旦座標戻すからな、あとHPからダメージ分引いとくから、あとダメージ受けた時のリアクションにしとく」
という処理を施すんだけど
クラスというオブジェクト指向を持って、クラスに対して「振る舞い」を予め処理しておくと
「おいお前、この敵とぶつかったから」
という処理で終わる。
他にも色々あるけど、つまりその処理が何をしているのかわかりやすくなって、今どんな処理がされているのかわかりやすくなる
→デバッグしやすいし、多人数で作業分担しやすい、予期しないデータ改変が行われない
というメリットがある
でもオブジェクト指向が苦手なら苦手で、別にC言語で作ってもいいんじゃないかね
作れないわけではないから
誰かC言語ではなくC++を使ったゲームプログラミングの本を執筆してくれる人いないかな? 俺が手にしているゲームプログラミングの本は、全てC言語ばかりです それをC++のオブジェクトの置き換えるために、 C++の本を買いあさってオブジェクト指向に構築し直しているのだが、 それがうまくいかない・・・ 俺が持ってるゲームプログラミングの本は、全てC言語ばかりですので 本当にお手上げ状態です 今は、オブジェクトを理解するために、ゲーム開発を一時中断して 仕方がなくJavaを学んでいるところです
>>969 ありがとうございます
言ってる意味が、分かりそうで解からないという
モヤモヤした状態ですが、
なんとなく「オブジェクトが便利」ということだけは伝わりました
もう少し大人しくオブジェクトを学んでみることにします
明確にコードがこう変わる!っていういい例があった
ttp://dixq.net/g/ ここの「メニュー画面の作り方」を読むんだ
1,2,3とC++編の違いがわかると大きい
>>973 ありがとうございます。
そのサイトでしたら、C++以外の
C言語でDXライブラリを扱う解説は一通り読みました
サンプルコードを打ち込んで実行結果を確認して
すべて上手く行ったのでC言語でのゲーム開発については自信がつきました
あとは、それを自分が開発するゲームに置き換えてプログラミングをすれば
C言語によるゲーム開発のゴールも見えていたのですが、
俺の場合、途中でC++のオブジェクトに手を出してしまったのでドツボにはまってしまった
つまり、完成するはずのゲームは完成しない
>>969 >でもオブジェクト指向が苦手なら苦手で、別にC言語で作ってもいいんじゃないかね
でも、いいです。
せっかくオブジェクトに触れたので、オブジェクトを身に着けてみせます
ありがとうございました
Cを読んでうまく行って自信がついてC++に手を出してわからなくなった じゃあそのサイトのC++を読めばいいじゃない
976 :
名前は開発中のものです。 :2013/08/11(日) 20:49:11.24 ID:Vkv1rucG
>>960 を見た感じだとクラスとただのデータ構造の違いがわかってないみたいだし、ポリモーフィズムに関する理解が薄いんだと思う
確かゲームつくろーにデザインパターンのゲームへの応用みたいなのあった気がするから
それ見たら少しは理解が深まるんじゃないかな
あと純粋にC++覚えたいってんじゃなかったらCでやっちまえばいいと俺も思います
>>975 メニュー画面だけ解説されてもね
どうせなら、全部C++で解説してほしい
というか、そのサイトのC++以外のC言語を使った解説は丁寧でわかりやすかったけど
C++だけ、いきなり過ぎて最初は意味がわかりませんでした
>>976 C++のオブジェクトの扱い方については、なんとなく理解しています
メインプログラムでクラスを呼び出してオブジェクトを作成する
new演算子を使うとクラスのコンストラクタを読みに行って
まずは初期化が行われる
クラス内で扱う変数は、同じクラス内のメンバ変数から扱うことになり、
メインプログラムからは、
「オブジェクト、クラス、メンバ変数(引数)」という形式で組み
ここに書いた引数は、クラス内のメンバ変数に移されて
メンバ関数内で処理で実行結果を映す
という、一連のオブジェクトの流れまでは理解できたが、
かなりややこしい
俺はC++のオブジェクトを独学で学んだ後に、 Javaのオブジェクトを独学で学んでみたのですが Javaのオブジェクトの方が遥かに楽ですね C++のようにhファイルでクラス宣言とかしなくていいでしょ? メインプログラムもJavaファイルですし クラスも同じJavaファイル そして公開クラスはJavaファイルに1つしか組めないというルールも分かり易い 今はJavaのオブジェクトをC++のオブジェクトに置き換えて考えてみようとしたのですが、 やっぱC++のオブジェクトは面倒で、すっごくややこしいですね・・・ Javaのオブジェクトが分かりやすいのは、 Javaはすべてクラスだからです。クラスだけでプログラムを組むからです
979 :
名前は開発中のものです。 :2013/08/11(日) 21:41:48.62 ID:Vkv1rucG
>>977 でもオブジェクトがただの構造体と比べてどう便利なのかわかんないんでしょ?
文法や仕組みだけわかっても概念や考え方わからないと役に立たないよ
GoFのデザインパターンはオブジェクト指向のかなりメジャーなベストプラクティスだから
それが理解できればオブジェクト指向のメリットも理解できると思うよ
念のために言っておくけどベストプラクティスは「成功例」であって「正解」ではないからそこは忘れずに
980 :
名前は開発中のものです。 :2013/08/11(日) 21:46:22.72 ID:Vkv1rucG
>>978 JAVAはオブジェクト指向言語だけどC++はオブジェクト指向「も出来る」言語だから
いろんなプログラミングパラダイムを持つのがC++の特徴
ぶっちゃけ人によってスタイルちがうからメンドイ
981 :
名前は開発中のものです。 :2013/08/11(日) 21:55:41.72 ID:IbgpLycy
>>978 ??C++でもこーゆー書き方は出来るよ?
class CMutex
{
HANDLE m_hMutex;
public:
CMutex(void){m_hMutex=CreateMutex(NULL,FALSE,NULL);}
virtual ~CMutex(void){CloseHandle(m_hMutex);}
DWORD Wait(DWORD dwMsec=INFINITE){return WaitForSingleObject(m_hMutex,dwMsec);}
void Release(void){ReleaseMutex(m_hMutex);}
};
class CEvent
{
HANDLE m_hEvent;
public:
CEvent(void){m_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);}
virtual ~CEvent(void){CloseHandle(m_hEvent);}
DWORD Wait(DWORD dwMsec=INFINITE){return WaitForSingleObject(m_hEvent,dwMsec);}
HANDLE GetHandle(){return m_hEvent;}
void Set(void){SetEvent(m_hEvent);};
void Reset(void){ResetEvent(m_hEvent);};
};
ポリモーフィズムが便利だよなあ 敵のオブジェクトをリストに突っ込んでおいて イテレータで回しながら順に敵の処理を実行するとか C言語だとどうやるんだろ
よし。じゃあ、新たにJava版のゲームプログラミングの解説サイトでも作ることにしよう。 開く JET++ ‏@JET_JAPAN 8月3日 とにかく約2週間も暇になってしまうので、先にJava学習を始めてみることにしよう。 どうせ職業訓練で学ぶJavaはシステム系のプログラミングになると思うので、 こっちはJavaを使ったゲームプログラミングを学んでいくことにしよう。 開く JET++ ‏@JET_JAPAN 8月3日 今日が8月3日ですから、約2週間も暇になる。あ、明日は日曜日で ハローワークはやってないんだった。なので、ハローワークは来週の月曜日の 8月5日に行くことにしよう。 開く JET++ ‏@JET_JAPAN 8月3日
>>979 いや、さすがにそれぐらいは解かる
構造体は変数しか扱えない
クラスは変数と関数が使える
Javaの場合は、フィールドと変数とメソッドだけど
メインプログラムでクラスを呼び出してオブジェクトを作り、
そのオブジェクトでメンバ関数に引数を渡せば
クラスの中で、別のメンバ変数なども動かして、様々な部品を作ることができる
あとは、そのオブジェクトのメンバ変数を呼び出せば答えを返すことが出来るし
メンバ関数を呼び出せば、その関数のreturnの値を呼び出すことも可能
構造体に関数を追加したのがクラスっていう認識なんだろうなあ 継承とか、ポリモーフィズム、デザインパターンあたりを キーワードに勉強するといいと思うよ
>>981 うん。
C++のクラスでも、そうやって宣言も定義に含めることもできますが、
そういうことじゃないんですよね
C++のオブジェクトがJavaのオブジェクトよりややこしいというのは・・・
俺は最初にC++を使ったオブジェクトをプログラムを組んで学んでから
Javaに触れてみると、
いきなり「え?」と思ったよ
だって、いきなりクラスの中にプログラムを組んでいくのだし
だが、Javaを使ってみると、意外と分かり易かったです
コードの組み方がC言語と同じだったので
先にC言語を学んでおいてよかったと思いましたね
987 :
名前は開発中のものです。 :2013/08/11(日) 22:47:27.83 ID:Vkv1rucG
>>985 まあ最初はみんなそんなもんでしょ、実装上は間違いってわけでもないし
その理解だと設計が手続き型の延長にしかならんからメリットが見えないけど
>>985 継承あたりまでは学びました
継承は確かに便利ですね
いくらでもスーパークラスを受け継がせたサブクラスが作れますからね
俺はこの継承という技術は好きです
前にRuby1.9のプログラムを学んだことがあったのですが、
あれは継承の連続でしたね
無数にあるクラスを一つ一つ辿っていくと
全てのクラスが1つのスーパークラスの上(下?)で、動いているのを知った時は
面白い技術だなと思いましたね
ポリモーフィズム、デザインパターンは、まだ知りません
あ、俺が見たRuby1.9のプログラムは、 RPGツクールVX Aceに入ってた Rubyスクリプトプログラムのことです
990 :
名前は開発中のものです。 :2013/08/11(日) 23:40:08.00 ID:Vkv1rucG
>>988 ならポリモーフィズム学んでからまた考えればいいんじゃない
それでもCでいいと思うならそれはそれでいいと思うけど
ぶっちゃけオブジェクト指向の大きな利点は再利用性とかメンテナンス性だから
一人でやっててメリット見えないってのはありえるし
個人的にはソースを見るのが一番解りやすいな クラスの扱いは別にC++に限らないから他言語でもいい 市販ゲームではDOOM3とかソース公開しているから見てみるといいかもね
992 :
名前は開発中のものです。 :2013/08/12(月) 05:49:59.47 ID:3AMeZIoC
>>965 DirectX は初心者スレがどっかにあったと思うから探してみるといいと思う
そこで質問したほうがいい答えを得れると思うよ
あと, 本だけじゃなくてネットで初心者サイトを探してみるとか
実際に DirectX で簡単なプログラム組んでみるとか
読みにくいけど, MSDN の DirectX のページを読んでみるのもおすすめ
誰か次スレ頼む
994 :
名前は開発中のものです。 :2013/08/12(月) 08:08:10.18 ID:RPqvnGkC
ポリモーフィズムで自機と敵機を一緒にして管理してるんですけど プレイヤーが見るUIを描画する際にどこに処理を置いたほうがいいですか? 自機をインスタンス化する時に、UIクラスなどを作っておいてそこに登録させるのか もしくは予め自機敵機のスーパークラスにUIを描画する機能を作っておいて、 描画するときには、線形探索じゃないですけどループ回して、自機だったら描画、敵機だったら描画しない、という判断をするのか どっちのほうがわかりやすいですか?
プレイヤーが見るUIってなんじゃらほい
997 :
名前は開発中のものです。 :2013/08/12(月) 15:50:51.79 ID:9jLpDglR
前者でいいんじゃない 特定のサブクラスしか使わないメソッドを親に持たせるとクラスのスコープが曖昧になるし ちなみにUIってのはHUDの事でいいんかな
Win8だとUSBがドライバまともにインストールできんの、直ったんかね
もう少し人に伝わる文章を書く努力をしろ
埋め
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。