つつ
@ゲーム制作
エディタ弄ってた。結果今回はVisial Stdio Codeを相棒にいざ参らん。
大雑把に言えば、このエディタ自体がSublimeとAtomの間の子みたいな立ち位置のモノが
欲しかった自分の要望とマッチしていた事と、それまでの(拡張)環境と比較すると、
スニペット・インデントの挙動や、ミニマップが無かったり等など、
どうしても歴史の短さ故の不足を感じる場面もあるけど、
デバッグの導入が最速に行えたり、挙動が軽快で、
後発の強みである無駄が省かれた扱いやすさが、Rubyを書くのに相性が良いと感じたので。
以下コード。一つ一つ、感触を確かめ直すように。
過去のソースの流用は極力ナシにして、ひたすら最短最小最低限で組んで、
本当に必要な時だけ頼るように。喉からも手出して三本で縋り付きたい
ライブラリいっぱいあるけどなぁ…!
require 'dxruby' # @todo # 描画関連はその内分離 class TaskForce def initialize @tasks = [] end def add(task) @tasks << task end def delete(task) @tasks.delete(task) end def sort ; ; end def run @tasks.delete_if { |t| !t.update } @tasks.each(&:draw) end end class Task def initialize(res = nil) @priority = 0 @active = @visible = true end end class Actor < Task def initialize(res) super if @id @img_tiles = res[:image][@id] @img_idx = 0 Sprite.new @image = @img_tiles[@img_idx] else @visible = false end @x = @y = 0 end def update ; @active ; end def draw ; Window.draw_scale(@x, @y, @image, 3, 3) if @visible ;end end class Player < Actor def initialize(res) @id = "kukumaru" super @x = Window.width / 2 - @image.width / 2 @y = Window.height / 2 - @image.height / 2 end end class Game def self.start Game.new.play end def initialize Window.caption = "九々。" Window.mag_filter = TEXF_POINT @task_force = TaskForce.new @res = {image: {}, data: {}} load_resource end def load_resource Dir.glob("img/*.png") { |f| @res[:image][File.basename(f, ".*")] = Image.load_tiles(f, 4, 1).freeze @res[:image].freeze } end def ready Fiber.new { @task_force.add(Player.new(@res)) loop { @task_force.run Fiber.yield } } end def play @routine = ready Window.loop { @routine.resume } end end
さぁて、次は素直にデフォルトSpriteクラスの導入だ!