Я пытаюсь изменить значение цвета функции create_circle внутри экземпляра узла "Tree" из другого сценария "Build_Tree". Должна быть серия от красных кругов до белых кругов (красные снизу постепенно становятся белыми по мере их подъема), однако есть кучка черных кругов. Я попытался установить Color8 (0, 0, 0) как глобальную переменную в Tree.gd и установить ряд значений RG и B, к которым обращается одноэлемент. Как ни странно, был ОДИН, который появился как правильный цвет, когда я установил pos_x и pos_y объекта на 0. Но очевидно, что это делает один круг в верхнем левом углу и не очень впечатляет сам по себе
Вот код:
Build_Tree.gd
builder () хранит градиент цвета и позиции для разделения в дереве
func builder():
var color_gradient_cache = 255
var radius = 36
var anchor_position = 0
var position_cache_storage = []
for i in 3:
if i == 0:
position_cache_storage.append(create_section(color_gradient_cache, radius, position_cache))
elif i == 1:
anchor_position = 1
position_cache_storage.append(create_section(color_gradient_cache, radius, position_cache_storage[0], anchor_position))
elif i == 2:
anchor_position = 2
position_cache_storage.append(create_section(color_gradient_cache, radius, position_cache_storage[0], anchor_position))
create_section создает 3 раздела затем бит кругов возвращает последнюю позицию, поэтому я могу добавить туда разделение
func create_section(color, radius, pos, anchor_position = 0):
var anchor_angle
print(str(anchor_position))
var current_position = pos
# 3-4 section of limbs
for i in rand_range(3,4):
if anchor_position == 0:
anchor_angle = deg2rad(-rand_range(75, 105))
current_position = Vector2(current_position.x + ((radius-10) * cos(anchor_angle)), current_position.y + ((radius-10) * sin(anchor_angle)))
print(str(current_position))
create_tree(radius, current_position.x, current_position.y, color)
elif anchor_position == 1:
anchor_angle = deg2rad(-rand_range(180, 150))
current_position = Vector2(current_position.x + ((radius-10) * cos(anchor_angle)), current_position.y + ((radius-10) * sin(anchor_angle)))
print(str(current_position))
create_tree(radius, current_position.x, current_position.y, color)
elif anchor_position == 2:
anchor_angle = deg2rad(-rand_range(75, 45))
current_position = Vector2(current_position.x + ((radius-10) * cos(anchor_angle)), current_position.y + ((radius-10) * sin(anchor_angle)))
print(str(current_position))
create_tree(radius, current_position.x, current_position.y, color)
return current_position
создает каждый круг
func create_tree(radius, pos_x, pos_y, color):
# creates the tree (circle) when called
print(str(color))
var TreeObjVar = get_node("/root/Tree_Gd")
TreeObjVar.pos_x = pos_x
TreeObjVar.pos_y = pos_y
TreeObjVar.R = color
TreeObjVar.G = 0
TreeObjVar.B = 0
print (TreeObjVar.G)
var TreeScene = load("res://Tree.tscn")
var TreeObj = TreeScene.instance()
TreeObj.set_position(Vector2(pos_x, pos_y))
get_node("/root/").call_deferred("add_child", TreeObj)
Tree.gd
extends Node2D
# Declare member variables here. Examples:
var r = 18.0
var pos_x = 0
var pos_y = 0
var R = 0
var G = 0
var B = 0
# Called when the node enters the scene tree for the first time.
func _ready():
set_process(true)
randomize()
pass # Replace with function body.
func _draw():
draw_circle( Vector2(pos_x, pos_y), r, Color8(R, G, B))
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if r < 36.0:
r += 3.0
print(str(R) + " " + str(G) + " " + str(B))
update()
Надеюсь все это звучит понятно, я не знаю много о том, что я делаю, но я слишком долго работал над включением и выключением игры, и я решил попросить немного помощи, а не сдаваться снова