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