10/06/17 11:06:08 eGb2uki/
rubyすげー
DXライブラリのDLLで試しに
ウィンドウの表示だけやってみたら
すんなり表示された
やろうと思えば3Dのゲームとかも
作れそうだね
529:名前は開発中のものです。
10/06/17 13:43:20 WAj30wAj
>>527
DXライブラリちょっと見てみたけど、APIがC言語用でクラス使ってるわけじゃないから、
Ruby用のラッパー書く分には簡単そうに見えるけど
530:529
10/06/17 15:12:35 WAj30wAj
ちょろっと書いてみたけどC#用DLLで動くね
require "ffi"
module DxLib
extend FFI::Library
ffi_lib "DxLib.dll"
attach_function :Init, :dx_DxLib_Init, [], :int
attach_function :End, :dx_DxLib_End, [], :void
attach_function :ChangeWindowMode, :dx_ChangeWindowMode, [:int], :void
attach_function :GetColor, :dx_GetColor, [:int, :int, :int], :int
attach_function :DrawString, :dx_DrawString, [:int, :int, :string, :int, :int], :int
attach_function :WaitKey, :dx_WaitKey, [], :void
end
DxLib.ChangeWindowMode(1)
if DxLib.Init == -1
raise "dxlib error"
end
color = DxLib.GetColor(255, 255, 255)
DxLib.DrawString(250, 240 - 16, "Hello C World!", color, 0)
DxLib.WaitKey
DxLib.End
531:名前は開発中のものです。
10/06/17 18:45:36 p9s2skma
なるほどー、ffiってのをつかうんですね
一生懸命wib32apiでやってましたわ
532:名前は開発中のものです。
10/06/17 18:50:01 p9s2skma
訂正 wib32api -> win32api
533:名前は開発中のものです。
10/06/17 19:34:26 WAj30wAj
Win32Api は使いづらいから DL のほうがいいと思うけど
こっちは標準ライブラリなのも大きいかも
swig 使わないなら ffi か DL の二択……
require "dl/import"
module DxLib
extend DL::Importer
dlload "DxLib.dll"
extern "int dx_DxLib_Init()"
extern "void dx_DxLib_End()"
extern "int dx_ChangeWindowMode(int)"
extern "int dx_GetColor(int, int, int)"
extern "int dx_DrawString(int, int, char*, int, int)"
extern "void dx_WaitKey()"
end
DxLib.dx_ChangeWindowMode(1)
raise "dxlib error" if DxLib.dx_DxLib_Init == -1
color = DxLib.dx_GetColor(255, 255, 255)
DxLib.dx_DrawString(250, 240 - 16, "Hello C World!", color, 0)
DxLib.dx_WaitKey
DxLib.dx_DxLib_End
534:名前は開発中のものです。
10/06/18 05:16:33 zrJc5vPv
DXRubyで文字表示をする際、妥当なやり方ってあるのかな…
できれば、Ruby/SDLで言うところの、
SFont?みたいなのを使いたいのであるが…
URLリンク(route477.net)
文字表示は、「表示されてて当たり前」の扱いで地味な割に
画面上にはやたらと数が出てきて処理速度に響いてくる…
DirectXでは一般的にどういう扱いをしてるんだろう…
1文字1文字をスプライトで扱ってるのかなあ…?
それともBG扱い(タイル上に並べる)のかな…?
535:名前は開発中のものです。
10/06/18 08:27:35 kbLsFb6j
DirectXにBG機能はないよ
1文字ずつスプライトにするか、文字列単位でテクスチャ作ってスプライトで描くかじゃないかな
536:名前は開発中のものです。
10/06/19 00:12:29 EQVLjEVu
でっかい一枚のテクスチャにタイル状に文字並べて
そこから一文字ずつ切り出して自分でレイアウト計算して描画するのがセオリー
一文字ずつ分けてしまうと非常に遅くなる
537:名前は開発中のものです。
10/06/19 14:18:30 UM9UWztJ
固定の文字列だったらまとめて1つの画像を用意する。
文章を描画するなら画像が多くなるから必要な時に
>>536のように自分でレイアウトして画像を作る。
スコアの描画程度なら一文字ずつでもよさげ。
538:名前は開発中のものです。
10/06/21 04:46:17 I8O1/KzF
starrubyを入れたはずなのに動かない
「ruby install.rb」をするとInstallation Star Ruby completed!とは出るが
ruby -e 'require "starruby"'としてもno such file to load -- starruby(LoadError)が出る
(これはstarrubyが見つからないって事でいいんだよな?)
Fxrubyだと、例文にバージョン名をちょっと追加して「require "fox16"」
とするととりあえず動きはするけどそれと同じようなエラーなんだろうか?
使ってるOSはWin7(64bit)で
rubyのバージョンは1.8.7と1.9.1(64bit用)のmswin版
不躾な質問だけど、分かる人が居たらよろしく頼む
539:名前は開発中のものです。
10/06/21 11:55:39 KSVcNr2p
>>535-537
㌧です
1文字も、プレイヤーキャラも、弾も、敵も、全部等しくスプライトということですね…
540:名前は開発中のものです。
10/06/21 21:31:29 4q1x72M8
>> 538
$LOAD_PATH が通ってないのでは?
1. そもそも starruby.so が正しく配置されているか?
自分の場合だと、install.rb を実行すると starruby.so は↓に入ってる。
C:/Ruby19/lib/ruby/site_ruby/1.9.1/i386-msvcrt/starruby.so
まずはそもそもファイルの配置に失敗してないか確認したほうがいいと思う。
2. starruby.so の配置フォルダに $LOAD_PATH が通っているか?
starruby.so がちゃんと配置されてたら、次は
ruby -e 'puts $LOAD_PATH'
の出力に1で確認したフォルダが含まれるか確認する。
含まれてなければ URLリンク(doc.okkez.net) を参考に環境変数を設定する。
541:名前は開発中のものです。
10/06/22 06:07:37 vaD2Y1F0
>>540
たぶんあなたの仰る通りに$LOAD_PATHというのが通ってないのだと思う
1については、正しく配置されておらず
rubyフォルダの中に、starrubyの解凍フォルダをそのまま置いていた
(C:\programming\ruby187\starruby-0.3.3-win32-ruby18\ext\starrubby.so)
2についても、さきほどのコマンドを実行してみたが
上記のパスは含まれていなかった
まずは上にリンクされた環境変数についてのドキュメントを参考に
フォルダの移動とパスの設定を試してみて、それからまた報告させて頂く
542:名前は開発中のものです。
10/06/22 10:23:48 nRcQCoeI
>>541
どうも話を聞いている感じ、Ruby1.8.7 と Ruby 1.9.1 の共存に失敗している気がする。
まずは1.8.7はアンインストールして、1.9.1だけがインストールされた状態で試してみてはどうだろう。
WindowsでRuby1.8系とRuby1.9系を共存させるのはそれなりに難しい。何か共存させたい理由があるんだろうとは思う。でも今は一旦保留にしておいて、もっとスキルがついてから共存を試みるのがいいと思う。
543:名前は開発中のものです。
10/06/23 00:28:14 0PfZy1en
うーん、正直さっぱりわからない
まず1.starruby.soの配置で躓いている
まず、URLリンク(code.google.com)から
binaries(バイナリ)→mswin32の中から「ruby-1.8.7-p72-i386-mswin32.zip」と「ruby-1.9.1-p378-x64-mswin64_80.zip」をDLし、
展開したものを「c:\programing」の中に置く。
この時、この二つをそれぞれ「ruby191」と「ruby187」という名前のフォルダにリネームし、
あらかじめ作っておいたC:\programingフォルダ以下に配置しruby191\binの方だけパスを通した。
(システムのプロパティ→環境変数→システム環境変数(S)へ「C:\programming\ruby191\bin」を追加した)
次にStarRuby公式サイトからリンクを辿り、
Google Code(URLリンク(code.google.com))から
starruby-0.3.3-win32の(ruby19.zipとruby18.zip)をDL・展開した。
544:名前は開発中のものです。
10/06/23 00:30:20 0PfZy1en
この後、展開したstarrubyのフォルダとその中身をどこにもっていけばいいのかわからない。
単純に、「install.rb」を実行しても、前に書いたように「Installation Star Ruby completed!」とメッセージが出るだけで
(前略)ruby191フォルダの中のどこにも「starruby.so」は配置されず、
無理矢理「(前略)lib\ruby\site_ruby\1.9.1\x64-svcr80」の中に入れても
「dllが見つからない」とのメッセージが表示されエラーとなる。
実は、別口でDL・展開した「ActiveScriptRuby」の方はエラーが出ていないのでこちらを使えばいいのだが、
なぜ個別ではうまくインストールできていないのかがすっきりしない
長々と書いてしまって恐縮だが、もしよければ、どうかもう少しお付き合い願いたい
545:名前は開発中のものです。
10/06/23 00:46:17 4Wd2dMWQ
mswin64のRubyでmswin32のライブラリって使えるの?
546:名前は開発中のものです。
10/06/23 17:40:26 zddUPtHq
>>544
とりあえずActiveScriptRubyで代用できてるとのことで安心した。
しかし納得いってないとのことなので、一応アドバイスしておく。
まず先に言っておくが、自分には原因はわからない。なぜって環境が無いから。なので原因究明の方法だけ。
> 「install.rb」を実行しても、前に書いたように「Installation Star Ruby completed!」とメッセージが出るだけで(略)
こういう「他人が作ったスクリプトを実行したんだけどなんかうまく動かない」という場合の鉄則は『ソース読め』。
まずは install.rb をテキストエディタで開いて中身を見てみよう。
開いてみたらファイルの最後に↓の一文があるはずだ。
puts "Installation Star Ruby completed!"
もう分かったと思うが、このスクリプトはインストールが成功しようがどっかで失敗しようが
無条件で「Installation 略 completed!」を出力するようになってるってこと。
じゃあ何が悪いんだって話だが、こういう「スクリプトのどっかで失敗してるらしいんだけどどこで失敗してるのか分からない」という時の鉄則は『一行ずつ実行してみる』。
irb ( URLリンク(doc.okkez.net) ) を開いて、install.rb の内容を一行ずつコピペして実行してみよう
(この時絶対に手打ちはしない。typoか本当に失敗してるのか分からないから)。
で、一行実行するたびに本当にうまく動いているか確認する。たとえば FileUtils.mkdir_p(dlldir) の行なら
本当に dlldir の場所にフォルダが作られてるかを見てみる。
何をするのか分からない行があったらリファレンスマニュアル( URLリンク(doc.okkez.net) )を読む。
以上の手順を繰り返せば必ず原因が分かる。健闘を祈る。
547:名前は開発中のものです。
10/06/23 17:41:29 zddUPtHq
最後に二つほどアドバイス。
・『一度に二つのことをしない』
欲張ってruby187とruby191の両方を同時に入れようとするから問題がややこしくなる。
うまくいくまではどっちか片方の兎だけを追うべし。
・『よく整理してから質問しよう』
とりあえず↓を読むといい。>>538のような聞き方ではなかなか問題は解決しない。
最初から>>543のように質問していればもっと早く原因に迫れたはず。
URLリンク(www.hyuki.com)
長くなったが、俺ができるアドバイスはこれくらいだ。>>544がStarRubyを楽しめることを祈る。
548:名前は開発中のものです。
10/06/26 19:03:26 9CeE/+nX
返信が遅れて申し訳ない
実はまだ、言われた事が全て終わっていないが、解決までまだ時間が掛かりそうなので途中経過だけ書き込んでおく
まずはinstall.rbを分解する
#!/usr/bin/env ruby
require "rbconfig"
require "fileutils"
option = {:noop => false, :verbose => true}
dlldir = Config::CONFIG["bindir"]
sitearchdir = Config::CONFIG["sitearchdir"]
FileUtils.mkdir_p(dlldir)
FileUtils.mkdir_p(sitearchdir)
Dir.glob("dll/*.dll") do |path|
next if path =~ /zlib/ and File.exist?(File.join(dlldir, File.basename(path)))
FileUtils.install(path, dlldir, option)
end
Dir.glob("ext/*.so") do |path|
FileUtils.install(path, sitearchdir, option)
end
puts "Installation Star Ruby completed!"
一行目と二行目の区切りが怪しいが、大文字小文字を考えるとこうだろう
549:名前は開発中のものです。
10/06/26 19:04:16 9CeE/+nX
次にirbで一行ずつ実行してみた
01行目「#!/usr/bin/env ruby」はエラーは出なかった
(今動いているrubyのインストール位置を調べてる?戻り値なんかも無いからたぶん成功したとしか言えない)
02行目「require "rbconfig"」は「true」と返ってきた(ちゃんとインクルードされた?)
03行目「require "fileutils"」は「true」と返ってきた(ちゃんとインクルードされた?)
04行目「option = {:noop => false, :verbose => true}」は{}で指定した内容がそのまま帰ってきた
(変数optionに"「オプション無効モード」は無効に、「ログ出力」は有効に"と入れた?)
05行目「dlldir = Config::CONFIG["bindir"]」はruby本体のbinディレクリが返ってきた
(変数"dlldir"の中にbinフォルダのフルパスが格納された?)
06行目「sitearchdir = Config::CONFIG["sitearchdir"]」ではruby\libの中のフォルダが返ってきた
(変数"sitearchidir"の中に、.so格納予定のフォルダへのパスが格納された?)
07行目「FileUtils.mkdir_p(dlldir)」はruby1.9.1のbinフォルダが返ってきた
(変数dlldirで指定されたフォルダを作ろうとしたが、元から存在したフォルダなのでスルーされた?)
08行目「FileUtils.mkdir_p(sitearchdir)」は六行目で指定したフォルダへのパスが返ってきた
(七行目と同じで、元から存在してたからスルーされた?)
01行目が怪しいが、大体問題ないように見える
07行目と08行目の命令については、「FileUtils.mkdir_p(sitearchdir + "\\testdir")」などとして
ちゃんとフォルダが作られる事を確認している
550:名前は開発中のものです。
10/06/26 19:05:20 9CeE/+nX
09行目~12行目
「Dir.glob("dll/*.dll") do |path|
next if path =~ /zlib/ and File.exist?(File.join(dlldir, File.basename(path)))
FileUtils.install(path, dlldir, option)
end」
13行目~15行目
「Dir.glob("ext/*.so") do |path|
FileUtils.install(path, sitearchdir, option)
end」
ここではエラーこそ出ないが、それぞれのフォルダの中には変化がない
each文で、各フォルダの中を調べて、各.dllやl.soが存在しなければそれをファイルのコピーを繰り返す命令のようだが
「C:\programming\ruby191\bin」の中にdllがインストールされたり
「C:\programming\ruby191\lib\ruby\site_ruby\1.9.1\x64-msvcr80」の中にstarruby.soが配置されたりもしない
551:名前は開発中のものです。
10/06/26 19:06:14 9CeE/+nX
試しに
「Dir.glob("dll/*.dll") do |path|
puts "test" + path
end」
などとしても何の反応もない(nilが一度だけ表示される)事から、Dir.globの中の命令が一度も実行されていないのだろうか?
ここまで付き合ってくれてありがとう。まだ原因がわかった訳ではないが
それでも問題解決まで大分前進した気がする。
例によって長々と書いてしまって申し訳ない。とりあえずこの辺をもう少し調べてみて、また何か分かったら報告させて頂く
552:名前は開発中のものです。
10/06/26 19:07:58 9CeE/+nX
ちなみに、starruby用dll(starruby-0.3.3-win32-ruby19.zipを展開して出来たdllフォルダの中にある各.dllファイル)と
同じく展開して出来たstarruby.soファイルを手動でコピーし、requireできるか試してみた所
「-e:1:in ‘require’: 193: %1 は有効な win32 アプリケーションではありません。
-0:/programing/ruby19/lib/(中略)starruby.so (LoadError)
from -e:1:in ‘<main>’」
と出てきた。
同じ事をruby1.8.7でやってみた所(>>547の時点であまりやるなと言われてはいたが)
ちゃんとGUI画面が表示された。ruby1.9.1(32bit版)でも同じくGUI画面が表示された
(隅々まで不備なく動くかどうか確認したわけではないが)
今回のインストールできない問題とは別に>>545で指摘された問題があるかもしれない。
553:名前は開発中のものです。
10/06/26 20:42:01 9CeE/+nX
starruby を install.so を使ってインストールする事に成功した
失敗していた理由はなんて事もない、ただカレントディレクトリの位置を設定していなかったからだった
(ちなみに、次に例に出す ruby のバージョンは、32bit版を使うために1.8.7を使っている)
まず、>>543に書き込んだ通りに ruby本体 と、それに対応した starruby をDL・展開して、DOSを起動させ、
環境変数を追加して、PCを再起動させる
この後、「カレントディレクトリを starrubyを展開したフォルダまで移動させる作業」
(cd C:\programming\ruby187\starruby-0.3.3-win32-ruby18)
・・・が必要だったが、これを怠っていた為に install.rb の中の「Dir.glob ~ end」命令が上手く働いていなかったようだ
分かってしまえば簡単・単純なミスだが、最初は全く思いつけなかった
お騒がせしてしまって申し訳ない
ともあれ、何とか正常にインストールする事に成功した
ありがとう、この板の皆の適切なアドバイスのおかげだ
またどうしても分からない事があった出てきた時は、よろしく頼む
554:名前は開発中のものです。
10/06/26 21:44:01 +RqvD318
おつかれさま。
StarRubyをいじってゆっくりじっくり遊ぶといいよ。
555:名前は開発中のものです。
10/07/05 13:15:13 McBHvfXL
>>528-530
マルチプラットフォーム狙いじゃなくてバリバリ3Dじゃないなら(バリ3DをそもそもRubyでやるのか?はおいておいてだな)
DXライブラリ使えるならいい案だな。
国内の同人ゲームでよくつかわれているみたいで情報も多いし。
C#用のライブラリってどんなのかと思ったら、
元がC言語で他の言語でも使えるようにDLL化してあるからRubyからも使えるってことかー。
556:名前は開発中のものです。
10/07/05 13:58:30 quyLdWxB
.NET専用にC++/CLIで書きなおした、とかじゃないからね
汎用に使えるね。
557:名前は開発中のものです。
10/07/17 23:46:14 Dnvbzl3f
コチラで聞けと言われたので参りました。質問です! Rubyでゲーム作れるって聞いたので
URLリンク(jp.rubyist.net)のサイトのリンク先でsource of Ruby/SDL 1.3.0というのが見つからなかったのでrubysdl-win32-binの1.3.0をダウンロードしてprogrum file内にインストールしたRuby1.8の下にフォルダを作って解凍しました。
回答したあとinstall_rubysdl.rbを実行したら変なメッセージが出たのですが無視してテストのウィンドウだけ出すプログラムを作ってみたらファイル名:2:in `requie' : no such file to load -- sdl (LoadError)というものが出ました。
どうしたらウインドウを出す様に出来るのでしょうか。ちなみに変なメッセージはこんな感じでした。
mkdir -p C:/Program Files/ruby-1.8/bin
mkdir -p C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8
mkdir -p C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/i386-msvcrt
install -c dll/jpeg.dll C:/Program Files/ruby-1.8/bin
C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/fileutils.rb:1264:in `initialize': Permission denied - C:/Program Files/ruby-1.8/bin/jpeg.dll (Errno::EACCES)
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `open'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1263:in `open'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:464:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:845:in `insrall'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1397:in `fu_each_src_dest'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1411:in `fu_each_src_dest0'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:841:in `insrall'
from C:/Program Files/ruby-1.8/rubysdl-1.3.0-mswin32-1.8.5-p12/install_rubysdl.rb:26
558:つづき
10/07/17 23:47:25 Dnvbzl3f
from C:/Program Files/ruby-1.8/rubysdl-1.3.0-mswin32-1.8.5-p12/install_rubysdl.rb:26:in `globe'
from C:/Program Files/ruby-1.8/rubysdl-1.3.0-mswin32-1.8.5-p12/install_rubysdl.rb:26
以上です。宜しくお願いします。
559:名前は開発中のものです。
10/07/18 11:53:06 6fMtGEk6
あっちでも書いたが、C:/Program Files/ruby-1.8/binが管理者じゃないと書き込み権限がないとかだろ。
560:名前は開発中のものです。
10/07/18 12:28:32 ic6NNUQZ
Rubyのインストール先をProgramFiles以外にすればいいんじゃね?
561:名前は開発中のものです。
10/07/18 14:18:58 WsCVWUVt
>>559,>>560
Dドライブにインストールしなおしたら出来ました!
ありがとうございます!