|
|
|
|
Reply From: |
jgodfrey |
Here’s one way…
To use it, make sure you’ve added an event named click
to your input map and associate it with the left-mouse button…
Next, create a separate scene named sprite
that contains your crater sprite.
Finally, create a new 2D scene with the following script attached to the root node:
extends Node2D
var sprite = preload("res://sprite.tscn")
func _process(delta):
if Input.is_action_just_pressed("click"):
var s = sprite.instance()
s.position = get_global_mouse_position()
add_child(s)
That will create a new instance of the sprite
scene (your crater sprite) at every position where the mouse is clicked.
I highly appreciate your time! I did exactly what you asked, and it returned error on “var s = sprite.instance()” line saying “Nonexistent function ''instance” in base “string”". I am using Godot v3.2.3 Stable.
Suleymanov | 2020-10-24 19:20
I think you have an error somewhere. sprite
is not a string, but a reference to the sprite
scene you should have created.
- Did you create a scene containing your sprite?
- Is that scene named
sprite
?
- Is it in the root of your project? If not, change the path as needed on the
var sprite = ...
line of code
Otherwise, if you’ve done all of the above, maybe post your code? I’m confident that what I did works…
jgodfrey | 2020-10-24 19:29
I have CRATER.tscn that contains my crater sprite saved in PREFAB folder.
Then I have LEVEL_01.tscn that contains the main stuff.
I don’t have CRATER.tscn instance node in LEVEL_01 scene.
In LEVEL_01 scene I have a script attached to the root node that goes like:
extends Node2D
var Crater = ("res://PREFAB/CRATER.tscn")
func _ready():
pass
func _process(delta):
if Input.is_action_pressed("MLB"):
var s = Crater.instance()
s.position = get_global_mouse_position()
add_child(s)
Suleymanov | 2020-10-24 19:40
You’re missing the preload()
call where you define Crater
. That should read:
var Crater = preload("res://PREFAB/CRATER.tscn")
jgodfrey | 2020-10-24 19:44
I missed “preload”, my bad. Works perfectly! Huge thanks!
Suleymanov | 2020-10-24 19:49
There’s one small problem remaining maybe you have suggestion for too. Now Explosion plays and Crater is instanced every time I click perfectly. But Crater appears on top of the explosion when it needs to be the other way round. No matter where I move my AnimatedSprite (Explosion), the problem remains.
Suleymanov | 2020-10-24 20:12
Problem Solved! I created a child node to the root and in the root script I added “get_node(child_node_path).” before “add_child(s)”.
Suleymanov | 2020-10-25 08:46