Novela visual 1

Novela visual

Novela visual 2

Novela visual

Leer un json

.
├── data
│ └── main_scene.json
├── scene
│ ├── main_scene.tscn
│ └── main_scene_script.gd
└── utils.gd

res://scenes/main_scene_script.gd

extends Node2D

var Utils = preload("res://utils.gd")

func _ready():
	var data = Utils.load_json("res://data/main_scene.json")
	print(data.lines[0].text)

res://utils.gd

extends Resource

static func load_json(path: String) -> Dictionary:
	var file := FileAccess.open(path, FileAccess.READ)
	if file == null:
		push_error("No se pudo abrir el fichero: " + path)
		return {}
	
	var content := file.get_as_text()
	file.close()
	
	var json := JSON.new()
	var result := json.parse(content)
	
	if result != OK:
		push_error("Error al parsear el JSON: " + str(json.get_error_message()))
		return {}
	
	return json.data

res://data/main_scene.json

{
	"scene_name":"hola",
	"scene_background":"main_scene.png",
	"lines":[
		{
			"text":"uyuyuy"
		}
	]
}

Cargar una imagen del json

res://utils.gd

static func load_background(target: Sprite2D, image_name: String) -> void:
	var path = "res://assets/scene_backgrounds/%s" % image_name
	var texture: Texture2D = load(path)

	if texture == null:
		push_error("No se pudo cargar la imagen en: " + path)
		return

	target.texture = texture
	target.centered = false       # <- clave
	target.position = Vector2.ZERO

	var viewport_size = target.get_viewport_rect().size
	var tex_size = texture.get_size()

	if tex_size.x == 0 or tex_size.y == 0:
		return

	target.scale = viewport_size / tex_size

res://scenes/main_scene_script.gd

func _ready():
	var data = Utils.load_json("res://data/main_scene.json")
	print(data.lines[0].text)
	var bg = Utils.load_background("main_scene.png")
	$Background.texture = bg