したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

ゲームプログラミング相談スレ

1とじか:2014/03/14(金) 22:07:05 ID:0r4YgB120
「リョナゲー作るためにプログラミングの勉強始めたけど難しい!!」という人のために

Unity、DXライブラリ、HTML5など
ゲームプログラミングによってリョナゲー制作している人たちで助け合うスレです

・こういう機能作りたいんだけどアルゴリズムが思いつかない!
・こういうアルゴリズムを実装したいんだけどどう書けばいいの?
・こういう処理作ったんだけどもっと良い書き方無い?

などなど

2とじか:2014/03/14(金) 22:14:35 ID:0r4YgB120
というわけで、とりあえず作っておいて損は無さそうなので立ててみました _( _*°ヮ。)_

相談する方は、その時点で既に書いてあるコードがある場合、
それも一緒に提示するとより具体的なアドバイスがもらえると思います

わたしはDXライブラリ、HTML5の質問なら答えられますが、
それ以外のツールの相談も、とりあえず相談しておくと誰かが答えてくれるかも知れません(無責任

3名無しさん:2014/03/14(金) 23:19:41 ID:.q8DF1d60
なるほど今まで無かったのが不思議なくらい有用そうなスレだ

4名無しさん:2014/03/15(土) 09:46:17 ID:hcYBerM60
>>1
乙!さすがとじかさんだ!
これからリョナゲ作りを始める人のためにも
リョナゲ製作中に苦渋に直面した人のためになる
極めて有益なスレだ!

5名無しさん:2014/03/17(月) 23:51:04 ID:GYMvfS9c0
雑談とどっちで聞こうか迷ったんですが、こっちで質問したいと思います
パーツアニメの基礎知識を知りたいんですけど
参考にしたサイトとか書籍などありましたら教えてもらえないでしょうか

6とじか:2014/03/18(火) 02:40:41 ID:uyHTW.fY0
えーとー、
ぶっちゃけ完全な我流です!!(ババーン

RRのパーツアニメは、基本的には
各パーツに位置・角度・拡大率の情報を個別に持たせておいて、それらを順番に描画してるだけなので、
アイデア的にはそんなに難しいことはやってないです
(膝とか肩とかの接合部分の描画にちょっと一工夫したりはしてますが)

あ、ついでに言っておくと、
フロマージュのパーツアニメは大体RRと同じ方式で、
CCのパーツアニメは各パーツの結合関係と角度を保持しておく方式(3Dモデルのボーンに近い)
だと聞いた覚えがあります

とりあえず、どういう表現をやりたくて、それを実現するためにどの方式を取るのがいいのか、
という部分から考えてみるといいんじゃないでしょうかー ヾ( ノシ*°ヮ。)ノシ

7名無しさん:2014/03/18(火) 19:26:12 ID:D.XfS6uE0
パーツアニメだと、この辺とか参考になるんじゃないかな
ttp://nextframe.jp/flash/flashLec.html

8名無しさん:2014/03/18(火) 23:24:13 ID:erzU1zok0
>>6
>ぶっちゃけ完全な我流です!!(ババーン
ええー、RRが我流ってマジですかー!!w
てっきりパーツアニメ知りたければこれ読んでおけみたいな
セオリー本があるんじゃないかなーと思って軽い気持ちで質問したんですが
独学の世界だったんですねー
ほんとう貴重なお話ありがとうございます、参考にして自分なりの方法探そうと思います

>>7
うわー雰囲気掴めました、ありがとうございます
これはCCタイプ? なのかな?
でも結構簡単にそれっぽく作れるものなんですねぇ

9とじか:2014/03/19(水) 03:48:10 ID:OPDwhTOs0
あと、補足で、これは個人的な意見ですけど、
パーツアニメーションを実装する上で一番大変なのは、
如何にそのアニメーションのデータを作成するか(=エディタをどう実装するか)という部分だと思います

エディタを実装する労力に比べたら、
アニメーションを描画する処理の実装自体はそこまで難しくないんですよね _( _*°ヮ。)_
(RRにしたって、極論、各パーツを順番に描画してるだけですし)

一方でエディタの方は、使いやすいUIとか、管理しやすいファイル構成とか、
そういうゲームプログラミングとはまた異なった要素を考えないといけなくなってくるので、
わたし自身も今の方式に至るまでは色々試行錯誤した記憶があります


リョナゲーを作る上でパーツアニメってすごく有用だと思いますし、
後続の人たちのためにもどこかの段階でRRのモーションツールを公開できたらいいなーとも思ってるんですけど、
サポート責任とか、マニュアル作成の手間とか考えると、ついつい二の足を踏んじゃう今日この頃です _(:3」∠)_

10名無しさん:2014/03/20(木) 01:01:44 ID:4QXVQN2s0
>>9
はえー、すっごい大変そう
でもパーツアニメ用のツールはあったら有用そうですね

11あっちの186:2014/03/21(金) 10:34:55 ID:2yEVadvQ0
相談がしやすいスレが出来て凄く嬉しいっす〜

で早速、悩んでいるのですが
オブジェクト指向に挑戦を開始しまして、いろんなサイトのサンプル等を見ると
Game->nanika()
Game->ryonaru()

って形で書いてるのがほとんどなのですが、このGameってやつがゲーム制作にとても重要な書き方なのでしょうか?
virtualで同じメンバ関数をなんちゃらってとこまでは掴めてはいるのですが…

ゲーム制作特有なやり方となれば!と思い
amazonで猫でもわかるゲームプログラミングって本を買ってみたけど
パラパラ。…。て感じで本棚の肥やしになりました。
さらに
ttp://www48.atpages.jp/happynetwork/actiongame.html
ここの完成品コードを参考にしているのですが
まあ、とにかく超上級者の書き方をしているのですごいわかりにくい上にコンパイルすると
error LNK2019: 未解決の外部シンボル
とか出て全然基礎勉強ができない状態です。



そこで、よければ
Game->Aaa()
Game->Baa()
のやり方の本当に簡単な1+1=2;ぐらい単純なサンプルをいただけないでしょうか?
いろいろ弄って失敗したりして勉強してみたいので

あと、製作者の方々はプログラムの勉強始めた時どのような本を読んだり、また参考にしたサイトとかありましたか?
プログラマー遍歴など教えてもらえると、とても参考になります。

宜しくお願いします。

12名無しさん:2014/03/21(金) 23:18:24 ID:CmqCVWxQ0
>>11
リンカーのエラーはstaticなクラスの実体をどこにも定義してないからかも
あと質問の意図が分かりにくいのでもうちょい詳しく話してくれた方がいいかも
例えば汎用的なゲームクラスの作り方が分からないとか
シングルトンが分からないとか仮想関数の使い方がわからないとか・・・

個人的にオブジェクト指向はひとまず捨て置いて、クラスとかも見よう見まねで
とにかくキャラが動くだけーとかの簡単なゲームを作ってみるのがいいと思います
いきなりオブ指で先のことまで考えてプログラミングしようとするとあまりにも難しいので

13名無しさん:2014/03/22(土) 02:40:58 ID:ZDIP1brI0
>>11
ttp://dixq.net/
ゲームプログラム覚えるなら、このサイトがお勧め

ttp://toro.2ch.net/test/read.cgi/tech/1054813207/483
猫でもわかるゲームプログラムはこんな事書かれてるな〜
たぶんその本はハズレだと思う

ゲームプログラムって実はすごく単純で
while(1)で無限ループさせて、その中で全オブジェクト(描画とか毎フレーム実行するもの)を保持した配列を実行するだけ
引用URLのソースは何故か403でダウンロード出来なかったので詳しいことは分からないけど
Game->Run()の中でも同じような事をしてると思うよ

class CGameMain{
public:
void Run(){
while(1){
for(int i=0; i<128; i++)
GameTask[i]->Move();
}
}
private:
Object GameTask[128]; //オブジェクトが格納されている(そういうのを扱うクラスObjectがあるという仮定で)
};
void main(){
CGameMain Game;
Game.Run();
}
まあざっくりとこんなイメージ。

ちなみに自分は一時期やねうらお氏のサイトとか書籍を漁ってたのが下地になってますね

14とじか:2014/03/22(土) 02:48:27 ID:7zRDobj20
うーんと、>>11 さんがどこらへんに悩んでらっしゃるのかちょっと分からないので、
ひとまず一般的な話を垂れ流したいと思います

まず、オブジェクト指向というのは、「プログラムの書き方の流派」みたいなもので、
大体ざっくり言ってしまうと、次のような考え方に基づいた書き方を指します:
●プログラムにおける、各データとそれを操作する手続きを、一体化させて「オブジェクト」として定義して、
それぞれのオブジェクトがお互いに作用し合うような形で記述しよう
●オブジェクト内の細かい仕様や構造は外部から見えないようにしておこう(=カプセル化)

そして、クラスの機能を使ってプログラミングをすると自然と上の考え方を守ったような書き方になるので、
「オブジェクト指向=クラス」のような印象が持たれていることが多いです

オブジェクト指向(というかカプセル化)の直感的な例としては、わたし自身がよく使う例としては、
八百屋と、野菜の路上販売(セルフサービスのやつを想像してください)に例えることができます

八百屋さんで野菜を買いたい人からすると、八百屋の中身のデータ("野菜の在庫"とか"お釣り用の硬貨"とか)や
内部の細かい手続き("お釣りの計算"とか"棚から野菜を取り出す"とか)は気にする必要はなく、
単に八百屋さんに何が欲しいかとお金を渡せば、問題なくお釣りと目的の野菜を得ることができます

一方で、路上販売は、野菜を買いたい人自身が、お釣りの計算とかをする必要がありますよね
これをプログラミングの世界でやってしまうと、思わぬバグの元になったり、
後から見たときに処理の流れが掴みづらい、といった問題が生じます
ので、オブジェクト指向においてカプセル化という考え方は非常に重要な概念になります

15とじか:2014/03/22(土) 02:49:13 ID:yv/t42sg0
続いて、virtual の話をしましょう
世の中には、「呼び出し方は同じだけど中身の処理が違う、でも一緒に扱いたい」というものは沢山あります
さっきの話で言うと、八百屋さんだけじゃなくて肉屋さんでも「お金を出して商品をもらう」という点では同じですし、
ゲームの世界でも「アイテムごとに使った時の効果を変えたい」とか「敵の種類ごとに描画処理を変えたい」という話はよく出てきます
そして、カプセル化の考え方に基づくなら、使う側としてはそういう「中身の細かい手続きの違い」は気にせずに一緒くたに扱えると嬉しいわけです
そして、そういう時に便利なのが、virtual(→仮想関数;多態性)です

仮想関数の詳しい使い方は個々人で調べてもらうとして、
仮想関数を定義したクラスの基本的な使い方は以下の様な感じになります:
● 敵一般を表すクラスを EnemyBase として定義する
● 各敵のクラス(例:Slime,Worm)はEnemyBaseを継承して定義する
● 手続きが同じで中身が違う処理(例:draw())は virtual を付けて仮想関数として扱う
● 各敵のクラスのインスタンスのポインタは、EnemyBaseのポインタとしても扱える
std::list<EnemyBase*> enemies;
Slime slime;
Worm worm;
enemies.push_back(&slime);
enemies.push_back(&worm);
● ポインタから呼び出した仮想関数は、各敵固有の処理に置き換わっている
for(auto it=enemies.begin(); it!=enemies.end(); ++it) (*it)->draw(); // Slime,Wormの描画処理がそれぞれ呼び出される
● 同じ型の変数(=ここではEnemyBaseのポインタ)として扱いつつ、異なる挙動をさせることが出来る! ヾ( ノシ*°ヮ。)ノシ

16とじか:2014/03/22(土) 02:50:19 ID:yv/t42sg0
最後にプログラミングの勉強に関してですが、とじかさんの場合は、
ここ ttp://www.geocities.jp/ky_webid/index_old.html と
ここ ttp://www.cppll.jp/cppreference/ と
時々ここ ttp://homepage2.nifty.com/well/Index.html とか
を色々眺めて「C++では何が出来るのか」を覚えつつ、実際の使い方はトライアンドエラーで色々試してちょっとずつ覚えていったような記憶があります
仮想関数の話も ttp://www.geocities.jp/ky_webid/cpp/language/009.html ここらへんにあるので参考にしてみてください

わたし自身は、ゲーム制作者としては5年目くらいなんですけど、
最初の頃(r-wizとか作ってた頃)はクラスどころか for の使い方すら知らなくて、全部 if と while で書いてたりしましたね……
思えば遠くへ来たものです _( _*°ヮ。)_

17KeV:2014/03/22(土) 10:38:12 ID:FuH09Noo0
C++のSTLとかWinAPIなら
ttp://cplusplus.com と
ttp://msdn.microsoft.com も
いいサイトだと思う

18あっちの186:2014/03/28(金) 08:46:40 ID:rwUthjsU0
質問ばかりしてたらアレなので簡単なゲームを作ってみてから、色々意見を頂こうと思ったのですが、全然完成する兆しもなくレスのお礼が遅れてしまうので制作は後回しにして...


参考にしてるソースを真似してvirtualは使ってみたけど...初心者にはまだまだ早かったです。

仕組みは基本クラス作って空のメンバ関数作って、同じ名前の関数を各クラスに作って、必要な時にみんなで使おう!って感じで理解したつもりなのですが...
まず汚ても1個ゲームを完成させてから勉強することにします。

みなさんが勉強してるのは、やはりc++の基礎なんですね。参考書や予備校本ばかり読みあさっても最終的に行き着くのは基本書で基礎固めが大事なんですね。

自分の場合はゲームのプログラムを書く作法や組立の順番がわからないもんですから、やはりセガの人の本とか買って、組んでは壊して弄って直してまた組んでとやっていた方がいいんでしょうか?
参考にしてるソースを見てるとシングルトンやらstateやらデザインパターンにまで目が行ってしまって未熟者の先走りのドツボにハマりそうで...

前に貼ったURLのサンプルのリンクが切れてますね。2月の時は大丈夫だったのですが...

あと、そこのサンプルがvc2008を使えばコンパイルできました。
バージョンごとに書き方って全然変わってくるんですね。

19あっちの186:2014/03/28(金) 09:47:27 ID:rwUthjsU0
あと、visualに関してはポインタ!
ポインタの使い方は

int *p *は悪魔の操り人形でそれを持ってるp。
p=&a *が&に変身してaに忍び寄る
*p= aの魂を取り込んだ*を持ったpがaを自由に操れる

って感じで覚えたので->はイメージできない...
遠くにいるnew(?)された奴が念力でメンバ関数を動かす能力者ってイメージでやってみたが

サンプルをみてると
DrawGraph(px,py,->Handle[ChrNum],1);
が出てきた時点、どこまで念力がつかえるんだ!?って感じで思考崩壊しました。

20あっちの186:2014/03/28(金) 10:49:15 ID:rwUthjsU0
まっ間違えた
DrawGraph(px,py,Game->Handle[ChrNum],1)でした。

Gameってやつはきっとこの世界のすべてを念力で操れる支配者なんだろうなぁー

とじか先生のパーツアクションツールなんですが、これの仕組みについてスゴイ知りたいです。

歩くアニメが四コマある場合に
パーツ(回転軸座標x,y,角度)
classアニメ{
void 歩く(
一コマ目
頭(10,20,30)
腕(10,50,10)
二コマ目
頭(15,20,10)
腕(10,45,15)
三コマ目
...)
}

みたいに一個一個コードに定義していくんでしょうか?
もう、これが昔から気になって仕方がなかったです。

21とじか:2014/03/28(金) 22:26:01 ID:EJOHTz3c0
うーん、プログラムの訓練は、やっぱり何はなくともひとまず書いてみるのが一番なんじゃないでしょうかー
何が難しいのかすら分からない状態でいきなり参考書で正解を読んだところでそれが身につくかというと中々難しい気がしますし、
まずは書いてみて、「こういう処理はどう書けばいいんだろう?」っていう疑問を洗い出していくのが手っ取り早いんじゃないかなーと思います
一度悩んだ場所なら、正解が分かった時に「アレはこうすればよかったんだ!」みたいな感じで知識として定着しやすい気もしますし _( _*°ヮ。)_

あと個人的には、シングルトンとかも同じで、
まず最初に「こういう処理をうまく記述する方法は無いのかなー」っていう所からスタートするべきだと思っていて、
それを「こういう技術があるよ(どう役に立つかは知らないけど」という所から始まっちゃうと、やはりドツボにハマっていく気はしますね……
まずは自力で頑張ってみて、今の知識・技術で難しい部分が出てきた時点で、
それを解決できるようなものを書籍で勉強するなり人に訊くなりするのが良いんじゃないかなーと思います ヾ( ノシ*°ヮ。)ノシ

作法とかも、「常に守った方が良いもの」と「集団で書く時だけ守るべきで、それ以外は自分ルールでも良いもの」とがあって、
前者に関しては書いてるうちに自然に身に付いてくるものだと思いますし、後者は少なくとも今は覚える必要は無いので、
とりあえずは好きに書けばいいんじゃないかと思います
そうして書いたものを人に見てもらって「ここはこう書いた方が良いよ」みたいなアドバイスを貰っていく感じにすると効率よく上達できるんじゃないでしょうかー

22とじか:2014/03/28(金) 22:26:39 ID:EJOHTz3c0
ポインタは、やはり定石通り、「変数の住所」として理解するのが良いんじゃないかなーと思います
int *p; // int型変数の住所を格納する変数p
p = &a; // p に a の住所を格納する
*p = 5; // p が指す住所にある変数 (=a) に 5 を代入する

"->" は、ポインタの参照先のメソッドやメンバー変数を呼び出すための演算子ですねー
class ClassA { void func(); };
ClassA a;
ClassA *p = &a;
a.func(); // a のメソッド func を呼び出す
p->func(); // p が指す住所にある変数(=a)のメソッド func を呼び出す
(*p).func(); // p が指す住所にある変数(=a)のメソッド func を呼び出す

ここらへんの説明も、先日紹介したサイトで色々解説されてるので、読んでみると良いと思います ヾ( ノシ*°ヮ。)ノシ

23とじか:2014/03/28(金) 22:27:57 ID:EJOHTz3c0
えーと、RRのパーツアニメーションは、外部ファイルで管理してますねー
各モーションの情報を表すファイルを作っておいて、それらをゲーム開始時に FileRead 系の関数で読み込むということをしています
なので、モーションの内容を直接コード上に書いているわけでは無いですね

ついでに言うとRRでは、モーションに限らずステージやカードの情報なども外部ファイルとして読み込む形にしています
小規模なゲームではあまり関係が無いですが、大規模なゲームを作ろうとした時には
・コンパイルし直さなくてもデータの変更が可能
・データを別のエディタ等から編集することが可能になる
などの恩恵がかなり大きく効いてくるので、外部化しておくと後々楽になる事が多いですね _( _*°ヮ。)_

24名無しさん:2014/03/29(土) 00:02:21 ID:1mSw6raI0
>DrawGraph(px,py,->Handle[ChrNum],1);
>が出てきた時点、どこまで念力がつかえるんだ!?って感じで思考崩壊しました。
これはただ引数に関数使えることを知らないだけなのでは?

関数には返し値がある事は分かってるよね?
int func(int x){
return x+1;
}
例えばこの関数を使えばint型のx+1が返ってくる
で、この関数は以下のような使い方が可能

int a = func(func(0));
まずfunc(0)が計算され1が返ってくる
つまり外側はfunc(1)と同じ意味になる
最終的に変数aには2が入る

25あっちの186:2014/03/29(土) 12:45:53 ID:FrT72ldA0
どうも憧れにしてるゲームのプログラマーさん達がいっぱい居るもんで、舞い上がって今の力量に合わないような質問ばかりしてしまったようで...

調べてみれば調べてるほどテキストに載ってるような基礎固めがまだまだ足りないようで...
お恥ずかしい限りでございます...

紹介してくださったサイトの基礎の方からちゃんと身につけながら並行してゲーム制作とインとアウトをやっていこうと思います。

わからない事があれば、実際に目の当たりにしてる問題点のついて質問させて頂きます〜。

ここがこれからゲーム制作を始める人がもっと増えて有益な情報交換の場になるようになるといいですね〜

26名無しさん:2014/05/02(金) 01:14:23 ID:X5YAi/1Q0
C#に関しての質問です!
System.Windows.Forms.TabControlのタブ幅の最小値のいじり方を教えていただけませんでしょうか…?

27とじか:2014/05/07(水) 22:45:04 ID:/aG3K.U60
>>26
C#のWindowsAPIに関してはよく知らないのですが、
さっきググったところ MinimumSize から設定できるみたいですよ?

詳しくは
ttp://msdn.microsoft.com/ja-jp/library/system.windows.forms.tabcontrol(v=vs.110).aspx
ここを見ると良いと思います _( _*°ヮ。)_

28名無しさん:2014/05/09(金) 20:20:01 ID:S4OkYvIQ0
>>27
ありがとうございます!
リンク先を参考にしてMinimumSizeあたりをいろいろいじってみましたが、
なんだかTabPagesのTextの文字数が極端に少ないときにまだ縮みきってくれませんねー…

あまり気にしないようにして、なるべく早めにゲームを公開できるように頑張ります!

29名無しさん:2014/10/15(水) 14:43:03 ID:zUlOurT.0
FLASHのアクションスクリプトの質問もよろしいでしょうか


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板