|
|
|
|
Attention |
Topic was automatically imported from the old Question2Answer platform. |
|
Asked By |
magicalogic |
How do I save a collision polygon as a resource to be loaded later in code.
I am trying to change the collision polygon of an Area2D when I change the sprite to a different one.
|
|
|
|
Reply From: |
Mak |
A collision polygon is simply a node that can be saved and instantiated as a scene. If you want to save only the “polygon” property (PoolVector2Array), then I do not know how easy it is to do this without additional file-handling code, but it does not make sense, since only points will remain in the save file anyway, you can make sure of this by saving the node (right-click on the node in the list of scene tab nodes → save the branch as a scene) and opening the scene in a text editor
|
|
|
|
Reply From: |
timothybrentwood |
Right click your one of your folders in the File System
section of your editor New Resource -> ConvexPolygonShape2D or ConcavePolygonShape2D
. Define your polygon in the editor per usual and save the resource. Use a CollisionShape2D
not a CollisionPolygon2D
and load the polygon resource you created. In code you’re probably going to need to do something like this:
var sprite_polygon_dictionary = {}
onready var my_sprite = $Sprite
onready var my_collision_shape = $CollisionShape2D
func load_sprite_dictionary(sprite_texture_array, polygon_paths_array):
for index in range(sprite_texture_array.size()):
sprite_polygon_dictionary[sprite_texture_array[index]] = load(polygon_paths_array[index])
func change_to_sprite(sprite):
var polygon = sprite_polygon_dictionary.get(sprite)
if polygon:
my_sprite.set_texture(sprite)
my_collision_shape.set_shape(polygon)
When I create a new resource and double click it its not opening in the editor
magicalogic | 2021-05-04 19:31
It opens in the Inspector panel (default on the right side) like where you would edit positions of nodes in the editor.
timothybrentwood | 2021-05-04 20:14
Okay, thanks.
magicalogic | 2021-05-04 20:27