1read 100read
2011年10月1期ゲ製作技術【Ruby/SDL他】Rubyでゲーム制作・総合スレッド TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
サウンドノベル・ビジュアルノベルのシナリオ4
おっさんがゲームを作るまで
ブログとかショップのマスコットキャラクターによる格闘ゲー作ろうぜ
【2D&3D】ゲームグラフィックス【質問OK】


【Ruby/SDL他】Rubyでゲーム制作・総合スレッド


1 :08/04/02 〜 最終レス :11/11/04
Ruby/SDL、StarRubyなどを用いてゲームを作る(作ろうとしている)人が
情報交換したり雑談したり質問したりするためのスレッドです。
ツクールXP(RGSS)についてはツクールスレ等でお願いします。
Ruby/SDL
http://www.kmc.gr.jp/~ohai/rubysdl.html
StarRuby
http://www.starruby.info/ja/

2 :
ttp://www8.atwiki.jp/poruporustory/
プログラマ募集してる

3 :
【Ruby/SDL関連】
MyGame(支援ライブラリ)
http://dgames.jp/ja/projects/mygame/
Miyako(支援ライブラリ)
http://www.twin.ne.jp/~cyross/Miyako/
Rubyist Magazine - Ruby/SDLで始めるゲームプログラミング
http://jp.rubyist.net/magazine/?0018-GameProgramingForRubySDL
http://jp.rubyist.net/magazine/?0019-GameProgramingForRubySDL
【関連スレ】
Ruby でなんかゲームつくる
http://pc11.2ch.net/test/read.cgi/gamedev/1205141142/

4 :
Ruby/SDL Users
http://mono.kmc.gr.jp/proj/rubysdl/
他にも関連ページや関連スレがあれば、追記お願いします

5 :
SDLdoc 日本語翻訳プロジェクト
http://www.tacoworks.jp/software/SDLdoc-jp/
http://www.tacoworks.jp/software/SDLdoc-jp/html/index.html

6 :
Win-gcc-SDL:フルスクリーン表示をちゃんとする
> 表示できない画面モードにすると、フリーズするパソコンもあります
> ちゃんと環境を調べてからSDL_SetVideoModeを行いましょう
http://blog.livedoor.jp/nanashisoft/archives/51495887.html

7 :
Ruby/SDLで、未だにdisplay_formatとdisplay_format_alphaの違いがよく分からない
いったいdisplay_format_alphaはどんな時に使えばいいんだろう

8 :
プログラムよく分かってないんだけど参加しておk?

9 :
>>8
プログラム的な部分に何らかの興味があるならおk
このスレは初心者もウェルカムです(たぶん)

10 :
>>9
どうも。
何を使えば良いのかも分からないので名前でStarRubyを選んでみました。
コピペでキャラクターを動かす所までは出来ました。
http://gamdev.org/up/img/11278.zip
とりあえず次は画面外にはみ出してしまうのを防ぎたいです。
Game.run(320, 480) do
Game.terminate if Input.keys(:keyboard).include?(:escape)
Game.screen.clear
keys = Input.keys(:keyboard)
if keys.include?(:right)
x = x + 10
elsif keys.include?(:left)
x = x - 10
end
Game.screen.render_texture(type3, x, y, :src_width => 32, :src_height => 32)
end

11 :
>>10
ヒント
1:画面外に出たかどうかを判定して
2:出ていたらx座標を画面内に戻す

12 :
>>11
ヒントどうもです。出かけていました。
http://gamdev.org/up/img/11279.zip
次はななめに移動&アニメーションをさせたいですね。
アニメーションはどうやるのがいいんでしょうか?
keys = Input.keys(:keyboard)
if keys.include?(:right)
px = px + 10
if px > 288
px = 288
end
elsif keys.include?(:left)
px = px - 10
if px < 0
px = 0
end
elsif keys.include?(:up)
py = py - 10
if py < 0
py = 0
end
elsif keys.include?(:down)
py = py + 10
if py > 448
py = 448
end
end

13 :
>>12
) が足りんぞ

14 :
>>13
何かの拍子に消してしまったみたいです。
Game.screen.render_texture(type3, px, py, :src_width => 32,
:src_height => 32)←これですね。

15 :
>>12
アニメって、どのようにアニメさせたいん?

16 :
>>15
type3.pngを見てもらうと分かると思いますが、
エンジン部分が光るようになっています。

17 :
>>16
それはわかるけど、いつ光るタイミングになるのよ?

18 :
>>16
ちなみに光る絵に切り替えるなら、:src_x => 32, :src_y => 0 を追加すればいいと思う

19 :
>>17
さあ?
どのタイミングでアニメーションするのが普通なんでしょうか?
あまりシューティングなんてやらないのでなんとも。
ななめ移動もいまいちどうやっていいのか考え中です。

20 :
>>18
隣の画像にはなりましたが、アニメーションはしません。

21 :
>>20
:src_x => の部分を変数にして切り替えるんだよ。
君が切り替えのタイミング分からないなら俺にも分からん。

22 :
規制されてしまう。
if srcx == 0
srcx = 32
elsif srcx == 32
srcx = 0
end
Game.screen.render_texture(type3, px, py, :src_x => srcx,
:src_y => srcy,
:src_width => 32,
:src_height => 32)
で出来ました。凄い勢いで点滅してます。

23 :
>>22
別の変数でカウンター作って、その値で切り替えるともっとゆっくりになると思う。
がんがれ。

24 :
>>23
色々どうもです。ちと疲れたので休みます。
ななめ移動で詰まってしまっているので、どなたか分かる方がいらっしゃたら、
教えてください。

25 :
>>24
ヒント:縦移動と横移動を別々に処理

26 :
>>25
ヒントどうもです。
http://gamdev.org/up/img/11280.zip
次は弾が出せるようにしてみます。
他の人も来ないかなー、独り占めってのも気が引ける。

27 :
>>22
秒間30〜60回ループしてるんだから、
@animation_counterでも作ってカウントアップして、
アニメーションのトリガが来たらsrc_x,yを動かせばいいんじゃ?
と思い付いた
SRPG作ってるんだが、どういう設計にすればいいか悩んでる
どこかに例が転がってないかなあ…

28 :
どなたか弾の出し方のサンプルを提示してもらえないでしょうか?
>>27
@の付いた変数はインスタンス変数だとリファレンスにありましたが、
どういった時に使うのかよく分かっていないので普通にcounterという変数で
やりました。
> SRPG作ってるんだが、どういう設計にすればいいか悩んでる
> どこかに例が転がってないかなあ…
ジャンル別に作り方が載っているサイトとかないんですかね?

29 :
>>27
RPGやS-RPGはサンプルが少ないな
rubyじゃないけど、このページは参考になるかも?
http://gumina.sakura.ne.jp/CREATION/OLD/MAKING/index.html
>>28
まずは自分で考えるべき
そもそもSTGのサンプル(チュートリアル)ぐらい、ネット上にいくらでも転がっている
ちなみに弾を出すあたりから、オブジェクト指向を理解してないと厳しくなる

30 :
>>29
Rubyへの置き換え方がいまいち分からなくて聞いてみました。
サンプルを作るのは難しいですか?難しいなら分かる人を待ってみます。

31 :
Ruby/SDLでシューティング。かなりシンプル
http://hoge.mine.nu/~koji/diary/?date=20051026#p01

32 :
なんとか自力で置き換える事が出来ました。
i = 0
pbmx.times{|i|
if pbf[i] == 0
if shot_delay > 0
shot_delay -= 1
else
if Input.keys(:keyboard).include?(:z)
shot_delay = 10
pbx[i] = px + 14
pby[i] = py - 24
pbf[i] = 1
end
end
end
pby[i] -= 10
if pby[i] < 0
pbf[i] = 0
end
if pbf[i] == 1
Game.screen.render_texture(bullet, pbx[i], pby[i])
end
i += 1
}
>>31
後ほど見てみます。

33 :
一つ質問があります。
今後ここでサンプルソースを要求しても、提示は一切なしですか?

34 :
zipを忘れていました。
http://gamdev.org/up/img/11303.zip
次は発射時に音を出したりなどの細かい所と、
いよいよ敵を出現させてみたいと思います。

35 :
>>33
意味が分かりかねるんだが

36 :
>>33
31がわざわざ提示してくれたのに何を言っているんだ

37 :
>>35
なしだったら、他へ行こうかなと思いまして。
人もあまり居ないみたいですので。

38 :
>>37
提示ってなんの提示?主語と目的語がないからわからないのよ

39 :
サンプルソースくれって言ったら作って貼れってことか。
他いけば?

40 :
>>34
おーなめらかにうごくじゃん
がんばー

41 :
>>34
こっちでもちゃんと動いたよー

42 :
>>34 のスクリプトを
自分なりに適当にリファクタしてみた。
delay_shot がよく分からなかった。

43 :
StarRuby::Input.keys の options に指定できる
:delay と :interval の違いがよく分かりません。
分かる人よかったら解説きぼん!
以下 API リファレンス (http://www.starruby.info/ja/documentation/api_reference/star_ruby.input) より抜粋。
:duration キーを押し始めてから、キーが押されていると判別される持続時間 (フレーム数)。
-1 を指定した場合は無限です (押しっぱなしの間ずっと「押された」と判別されます)。
:delay :duration を正数で指定している場合、 2 回目以降「押された」と判別されるまでの遅延時間 (フレーム数)。
-1 を指定した場合は無限です (2 回目以降の判定がありません)。
:interval 2 回目以降「押された」と判断される時間間隔 (フレーム数)。

44 :
使ってはいないけど、レス読んだ限りじゃ
・10フレームの間キーが押された→当然10フレーム全てで押されていると判定
○○○○○○○○○○
・:duration に3を指定→頭から3フレーム分だけ押されていると判定
○○○×××××××
・:duration はそのままで :delay :duration に2を指定
→最初に頭から3フレーム分押されていると判定され、ディレイ分開け繰り返し押されていると判定される
○○○××○○○××

45 :
>>43-44
分かりにくくてすみません。図を追加しました。

46 :
>>44
解説ありがとう!
でも :interval が出てきてない?
>>45
こんにちは中の人!
さっそく図を見てきますね

47 :
>>45
図を見てきました。
大体はイメージしていた通りなのですが、ちょっと分からないところがあります。
この図の例で :interval を 0 にした場合はどうなるんでしょうか?
例えば、StarRuby のサンプルの1つである falling_blocks には
:interval に 0 を指定する以下のようなコードがありますが
def repeatings(device)
keys(device, {
:duration => 1, :delay => 2, :interval => 0
})
end
0 というのは極めて短い間隔で「押された」と判断する、という解釈で合っていますか?

48 :
>>47
> 0 というのは極めて短い間隔で「押された」と判断する、という解釈で合っていますか?
0 になるのを想定していなかったというのが正直なところです。どうなるんだろう。
Star Ruby においては FPS (1 フレーム時間) より細かい時間の単位はありません。
よって、最小は 1 で、図にしたがうと「ずっと押された」と判別されることになります。
2 にすると、毎フレーム「押された」と「押されていない」を繰り返すようになります。

49 :
とかいいつつ :interval のデフォルト値は 0 ですが。
図にかけないな。

50 :
ってあれ、これ自分のソースか。何を言っているんだ俺。
というわけで
> :duration => 1, :delay => 2, :interval => 0
は 1 の間違いです…

51 :
>>49
> 図にかけないな。
そうそう!
僕もそこが分からなかったんですよ。
0 になるとどうなるのかなーって。
そして、falling_blocks は中の人さんが書いたんじゃなかったのですね。

52 :
何度もすみません。実際やってみたら図がまちがっておりました…。
やっぱり 0 が正しいです。で、
> 0 というのは極めて短い間隔で「押された」と判断する、という解釈で合っていますか?
も正しいです。
すみませんすみません…。

53 :
>>50
え!なんだなんだ(;゚д゚)
:interval => 1 が正しいってこと?

54 :
> そして、falling_blocks は中の人さんが書いたんじゃなかったのですね。
いや、自分で書きました。
>>47 は「こう書くとどうなるの」という意味だと空目してました。

55 :
ちょっと僕もちゃんとコードいじって試してみよう

56 :
そしてこっそり図を修正しました。

57 :
あまりちゃんと検証したわけじゃないけど、とりあえず
上に書いた repeating メソッド内に出てくる
:interval は 0 の方が 1 よりもスムーズに動く。

58 :
>>56
今 57 を図を見ながら書いてて
ページを更新したら図が変わったので
そうじゃないかと思いましたw
おつかれさまです

59 :
この図はしっくりきますね。
今の僕のイメージとぴったり重なる。

60 :
混乱させて申し訳ありませんでした。
Star Ruby を使っていただきありがとうございます。

61 :
>>60
いえいえ。
こちらこそありがとうございました。
また何かあったらここに書き込むかもしれないので
よかったらまたお願いします。

62 :
>>60
チュートリアル早く書いてね(はぁと)

63 :
>>62
はーい><

64 :
Python使いだが、
ゲーム作りではRubyを使わざるを得ないようだなこりゃ

65 :
>>64
pyGameには何か問題があるのか?

66 :
>>65
MacOS使ってるんだけど、
object-cモジュールの兼ね合いで正常に動作しない。
一応バイナリパッケージ版でrc5版がリリースされてるけど
動作がいまいち安定してないんだよ..

67 :
>>66
Rubyへようこそ

68 :
Rubyだからその辺安心ってわけでもないがな

69 :
俺は逆にOSX+Rubyでのゲーム制作は挫折しました
なんかgemコケるんだよなー

70 :
マリオブラザーズをRubyで作ってみた
http://d.hatena.ne.jp/authorNari/20080422/1208880928

71 :
>>70
ソース見てみたが、もっと簡潔にできそうだね

72 :
保守

73 :
少し前の話だけど、Ruby/SDL 2.0が出てる
Windows版のリリースはまだみたいだが
ttp://www.kmc.gr.jp/~ohai/

74 :
mac os x leopardでruby/sdlを使おうとしているのですがうまくいきません
付属のサンプルのうちfpstimer alpha cursor event2 font joy2 movesp randrect stetris testspriteは動きました
それ以外は動きませんでした
どうすればまともに動くようになるでしょうか

75 :
動かないって具体的にどうなんのよ
エラーとか出てるならそれも書かないとわからないよ

76 :
ほぼすべてにおいて下のようなエラーがでます undefined method '****'ってかんじです
sgetest.rb:15: undefined method `drawLine' for #<SDL::Screen:0x1aeca468> (NoMethodError)

77 :
その辺のメソッド使うにはSGEを入れてからruby/sdlをビルドする必要がある
ttp://www.kmc.gr.jp/~ohai/rubysdl/README.ja
この辺見てオプションのライブラリ一通り入れると全部の機能使えるようになるぜ

78 :
>>75
>>77
ありがとうございます
SGEを入れてSDLを再インストールしたら動きました

79 :
今度のRuby Kaigi で StarRubyの中の人が出るんだね

80 :
STGとかでのボス戦みたいに
「画面を覆い尽くす弾幕と、派手なボムでの玉消し」とか
めっさピクセル使うときに一番軽いのって
どのゲーム制作モジュールなんだろ?
候補としてはmygame, miyako, starruby あたりなんだが。
それとも ruby/sdl だけの問題なのだろうか?
既出ネタだったらスマソ。

81 :
その三つをベンチ比較するみたいな話題はなかったと思う
もしruby/sdl自体に限界を感じてるのならruby-OpenGLも良い候補かも

82 :
>>80
StarRubyはRuby/SDL使ってないはず
だからここで比較するなら
1. Ruby/SDLで直接プログラミング
2. Ruby/SDLに中間層(MyGame, Miyako)を挟む
3. StarRuby
の三択だろう
どれが軽いかは分からん。コード内での工夫にもよるだろうし

83 :
>StarRubyはRuby/SDL使ってないはず
いやいや使ってるよ

84 :
どれもSDL使ってるからピクセル合成についてなら大して変わらなそうな気がするな
たぶん描画より、「画面を覆い尽くす弾幕」の更新、ヒット判定の方がボトルネックになると思うぜ

85 :
>>79
ニコ動に動画あたよ
Ruby のゲーム開発の現状と自作ゲームライブラリ Star Ruby - 星一‐ニコニコ動画(SP1)
http://www.nicovideo.jp/watch/sm3733775

86 :
余所から誘導されてきました
SDLでシューティング作ってるんですけど 被弾した時に 画面全体を赤っぽくしたいんですが、画面全体を赤で塗りつぶして半透明にするような処理ってできますか?

87 :
>>83
どの辺に?
ソースコード見ても、C言語でガリガリ書いてるようにしか見えないし
ダウンロードページにも「Ruby/SDL は不要です。」って書いてあるよ
もしかして「RubyとSDLを使ってる」っていうオチか
俺が言ってるのは固有名詞の「Ruby/SDL」なんだが
>>86
Surface#fill_rectで塗りつぶした別サーフェス(screenと同じサイズの)を生成し
Surface#set_alphaでαブレンディングを有効にしてから重ねる

88 :
>>86 返事ありです!

89 :
ごめ・・また途中でカキコしちまった('A`)改行でSHIFT+Enter押すくせががが
自分もそれでやろうとしたけどなんか出来ないんですよ・・・ もうちょいグーグル先生と逆引きに聞きながらがんばってみます

90 :
>>87 どうしても重ね方がわからないんだぜ
初心者すぎて死にたい
orz

91 :
もっと具体的に
(A) 書いたコード(抜粋でも可)
(B) 期待する結果
(C) 実際に起きた結果
を書くと良いかも。
「できない」だけではエスパーじゃないと答えづらいはず。

92 :
もう書いたコードというより どうやって新しいサーフェスを作って 出力するのかがわからないんです;
SDL::Surface.new(SDL::HWSURFACE,640,480,8,220,10,20,70)
SDL::Surface#fill_rect(0,0,640,480,[220,10,20])
SDL::Surface#set_alpha(SDL::SRCALPHA,70)
ここらへんつかうのわかったんですけど書き方がわからなくて・・・;初心者すぎてごめんなさい;

93 :
多分、今出来ているコードをうpすれば改変してくれる予感。
暇人は多い。でも、現在のコードが判らないと修正のしようもない。

94 :
出来ているコードすらないからこまるorz
とりあえず適当に書いて抜粋したけど頭こんがらがってパニックになってます; 初心者にはムリっぽそうです
def act(input)
@pache.act(input)
is_crashed,books = @items.act(@pache)

if is_crashed
SDL::Mixer.halt_music
aka = SDL::Surface.new(SDL::HWSURFACE,640,480,8,220,10,20,70) #←ここで画面全体を赤くしたいです;。
def pityu(aka)
SDL::Surface#fill_rect(0,0,640,480,[220,10,20])
SDL::Surface#set_alpha(SDL::SRCALPHA,50)
end
pityu
sleep 2
# (4) ゲームオーバーになったらハイスコアを更新する
@high_score = @score if @high_score < @score
score #scoreをインスタンスクラスからグローバルクラスに
return :game_over
else
@score += books * 100 # (3) 本を 1 個取るごとに 100 点加算する
return nil
end
end

95 :
わかりにくいのでやっぱりうpしますhttp://www2.uploda.org/uporg1504954.rar.html
汚いソースですけどマジでごめんなさいorz うpする自分も初心者丸出しで恥ずかしい

96 :
とりあえずやっつけでakaの部分書き換えてみた
実際に動くかどうかは未検証
screen = SDL::Screen.get
aka = SDL::Surface.new(screen.flags, screen.w, screen.h, screen.format)
aka.fill_rect(0, 0, aka.w, aka.h,[220,10,20])
aka.set_alpha(SDL::SRCALPHA, 50)
screen.put(aka, 0, 0)

97 :
。・゚・(ノД`)・゚・ ぶわっ
マジありがとうございます; 書き方全然違ってて恥ずかしい・・・;
いまからいれてきてみます。

98 :
うっ・・・できませんでした・・ いろいろ試行錯誤してみますね・・・;

99 :
ごめん、最後の行のscreen.put入れる位置はここ(actメソッド)じゃない
実際にはrenderメソッドの中に入れる必要がある
(画面に地形やキャラクターを描いた後で赤くする)
それ以外の部分は、手元でRuby/SDLのサンプル使って検証してみたところ動いたので問題なさそう

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
サウンドノベル・ビジュアルノベルのシナリオ4
おっさんがゲームを作るまで
ブログとかショップのマスコットキャラクターによる格闘ゲー作ろうぜ
【2D&3D】ゲームグラフィックス【質問OK】