2017/04/30(日) [n年前の日記]
#1 [dxruby][gimp][python] ドット絵モドキ生成スクリプトの結果画像をDXRubyで描画して雰囲気を確認してみたり
_昨日生成したドット絵モドキ画像
を、DXRubyで描画してみて、どんな感じの画面になりそうか確認してみたり。
意外と悪くない、ような気もする。それぞれが動くと一つ一つの質の悪さも結構誤魔化せてしまうのかも。
確認に使ったソースは以下。画像は、 _0000.png を使用。
_test_draw.rb
「なんだよ事前に画像作っておいて読み込んでるだけかよダッセー。その場で自動生成ぐらいしろよ」と思う人も出てくるだろうか…。一応、 _Ruby + cairo(rcairo) で生成してDXRubyで描画する例 もアップしてありますので組み合わせればそういうこともできるんじゃないかな…。ただ、おそらく生成時間が1/60秒では済まない予感も。Rubyは遅いので、というかこの場合使ってるcairoという描画ライブラリがちょっと遅いというか。
「コレのどこがドット絵だよテメーなめとんのか」と思った人はもっとナイスなアルゴリズムを考案してみてほしいなと…。コレは単に、ランダムな位置にランダムな色でグラデ塗りを置いてるだけ、だったりするけど、例えばダンジョン生成等のアルゴリズムを応用して矩形や円の繋がり方・隣接の仕方を調整できればもっとそれらしくなりそうな予感も。ていうか、 _Pixel Ship Generator がソレに近いアルゴリズムらしいけど結構それっぽく見えるというか。そんな感じで色々な案が思いつくんじゃないか、と。
もっとも、こういうのって使い道自体が思いつかないという問題が…。何に使えるんだコレ。
意外と悪くない、ような気もする。それぞれが動くと一つ一つの質の悪さも結構誤魔化せてしまうのかも。
確認に使ったソースは以下。画像は、 _0000.png を使用。
_test_draw.rb
# Tiny pixelart draw test with Ruby + DXRuby
require 'dxruby'
class MySprite < Sprite
def initialize(x, y, img)
super(x, y, img)
@dx = rand(-0.5..0.5)
@dy = rand(1..4)
self.z = @dy * 2
end
def update
super
self.x += @dx
self.y += @dy
@dx *= -1 if self.x < 0 or self.x >= Window.width - self.image.width
self.vanish if self.y > Window.height
end
end
imgs = Image.loadTiles("0000.png", 16, 16)
sprs = []
cnt = 0
Window.resize(800, 600)
Window.loop do
break if Input.keyPush?(K_ESCAPE)
if cnt % 2 == 0
w = imgs[0].width
x = rand() * (Window.width - w * 1.2)
y = -64
sprs.push(MySprite.new(x, y, imgs[rand(imgs.size)]))
end
Sprite.update(sprs)
Sprite.draw(sprs)
Sprite.clean(sprs)
cnt += 1
end
「なんだよ事前に画像作っておいて読み込んでるだけかよダッセー。その場で自動生成ぐらいしろよ」と思う人も出てくるだろうか…。一応、 _Ruby + cairo(rcairo) で生成してDXRubyで描画する例 もアップしてありますので組み合わせればそういうこともできるんじゃないかな…。ただ、おそらく生成時間が1/60秒では済まない予感も。Rubyは遅いので、というかこの場合使ってるcairoという描画ライブラリがちょっと遅いというか。
「コレのどこがドット絵だよテメーなめとんのか」と思った人はもっとナイスなアルゴリズムを考案してみてほしいなと…。コレは単に、ランダムな位置にランダムな色でグラデ塗りを置いてるだけ、だったりするけど、例えばダンジョン生成等のアルゴリズムを応用して矩形や円の繋がり方・隣接の仕方を調整できればもっとそれらしくなりそうな予感も。ていうか、 _Pixel Ship Generator がソレに近いアルゴリズムらしいけど結構それっぽく見えるというか。そんな感じで色々な案が思いつくんじゃないか、と。
もっとも、こういうのって使い道自体が思いつかないという問題が…。何に使えるんだコレ。
[ ツッコむ ]
以上、1 日分です。