In a Node2D I’d like to draw some lines they are stored in an object of my custom class:
A member-variable contains a PackedVector2Array for the polyline. From the script I can print the content, but as soon as I try to access it from the _draw()-function I get an Error: Invalid get index 'line' (on base: 'NIL').
I found out: If I instantiate the object in the _ready()-function it is possible to draw as planned, but of course I need to create the object at runtime.
It is probably related to the tree-structure and the overwritten _draw()-function (of the parent?) but I don’t find the right way to address the object, can somebody help?
Much more I would like to draw directly out of the custom class, but I guess this is not possible?
Thanks a lot!
You need to show the code otherwise we have no idea where you have gone wrong. Somewhere you are calling thing.line but thing does not have a member named line at all.
class_name ObjDraw
var line: PackedVector2Array
func _init():
print("Constructed!")
line = [Vector2(0, 0), Vector2(120, 0), Vector2(120, 400), Vector2(0, 400), Vector2(0, 0)]
The Main-code in Node2D:
extends Node2D
var Obj1 : ObjDraw # Instance
var ObjExists # helper for not existing instance
func _ready():
var button1 = Button.new() # Button for creating the instance
button1.set_position(Vector2(200, 0))
button1.set_size(Vector2(100, 50))
button1.text = "New Block"
button1.connect("pressed", self._pressed_NewBlock)
add_child(button1)
# using following line works but is not helping me:
#Obj1 = ObjDraw.new()
func _process(_delta): # Called every frame.
queue_redraw()
func _draw():
if ObjExists:
# here the error occurs:
draw_polyline(Obj1.line, Color("WHITE"), 3.0)
func _pressed_NewBlock():
var Obj1 = ObjDraw.new()
print (Obj1.line)
ObjExists = true