1

So for practice with ruby, I am creating a library on top of ruby2d, but one problem.
I keep getting an error, I think setting up a window, here is the full error:

C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ruby2d-0.11.3/lib/ruby2d/window.rb:476:in `exist?': no implicit conversion of nil into String (TypeError)
        from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ruby2d-0.11.3/lib/ruby2d/window.rb:476:in `add_controller_mappings'
        from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ruby2d-0.11.3/lib/ruby2d/window.rb:629:in `ext_show'
        from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ruby2d-0.11.3/lib/ruby2d/window.rb:629:in `show'
        from C:/Users/Admin/Desktop/RubyProjects/RSGE/rsge_window.rb:19:in `mainloop'
        from c:/Users/Admin/Desktop/RubyProjects/test.rb:4:in `<main>'

it shows that something is wrong in ruby2d (a graphics library for ruby)

here is the code for my test file that uses my library

require './RSGE/rsge'

root = Window.new(800, 800)
root.mainloop

and here is my window class:

require 'ruby2d'
require_relative 'rsge_colors'

class Window
    def initialize (w, h)
        @width = w.to_i
        @height = h.to_i
        @title = 'Blank Window'
        @background = $WHITE
    end

    def config
        set width: @width, height: @height 
        set background: @background
        set title: @title
    end

    def mainloop
        show
    end 
end

if your wondering what rsge_colors is, here it is

$RED    = 'red'
$GREEN  = 'green'
$BLUE   = 'blue'
$ORANGE = 'orange'
$PURPLE = 'purple'
$YELLOW = 'yellow'
$WHITE  = 'white'
$BLACK  = 'black'

Why am I getting this error, and how can I fix it? Thank you for any help you can give me!

Alter Lagos
  • 12,090
  • 1
  • 70
  • 92
theLawyer
  • 13
  • 5

1 Answers1

0

Defining class Window looks like you're overriding Ruby2D::Window class.
I've never used this library, but looking the code for some of the games in the showcase, and also the "Get started" section, it looks like the dsl must be used in the root level of your ruby file.
In your case, it should be something like:

require 'ruby2d'
require_relative 'rsge_colors'

set width: 800, height: 800
set background: $WHITE
set title: 'Blank Window'

show

enter image description here

Probably there must be a way to encapsulate the code into classes or modules, but if you're just learning to use the gem, probably would be better to start with the basic stuff then move to refactor these type of things.

Alter Lagos
  • 12,090
  • 1
  • 70
  • 92