![]() |
Attention | Topic was automatically imported from the old Question2Answer platform. |
![]() |
Asked By | spacerobot5 |
Hello, I am creating a simple 2d Platform Game,
My problem is that in one of my animations, the bullet/Bone needs to be created after the animation is complete. Right now it creates the Bone and starts the animation at the same time.
I have tried putting the creation of the Bone projectile under _on_animation_complete, but then it will only allow me to shot if my character is facing the left (direction given by key press “a”). Is there something I’m missing?
Here is the code if it helps.
Thanks!
extends KinematicBody2D
const WALK = 40
const SPRINT = 70
const GRAVITY = 10
const JUMP = -250
const FLOOR = Vector2(0, -1)
const BONE = preload("res://Bone.tscn")
var is_attacking = false
var velocity = Vector2()
var on_ground = true
func _physics_process(delta):
if Input.is_action_pressed("D"):
if is_attacking == false:
velocity.x = WALK
$Player_Animation.play("Player_Run")
$Player_Animation.flip_h = true
if sign($Position2D.position.x) == -1:
$Position2D.position.x *= -1
elif Input.is_action_pressed("A"):
if is_attacking == false:
velocity.x = -WALK
$Player_Animation.play("Player_Run")
$Player_Animation.flip_h = false
if sign($Position2D.position.x) == 1:
$Position2D.position.x *= -1
else:
velocity.x = 0
if on_ground == true && is_attacking == false:
$Player_Animation.play("Player_Idle")
if Input.is_action_just_pressed("Space"):
if is_attacking == false:
if on_ground == true:
velocity.y = JUMP
on_ground = false
if Input.is_action_just_pressed( "ui_focus_next") && is_attacking == false:
is_attacking = true
$Player_Animation.play("Player_Attack")
var bone = BONE.instance()
if sign($Position2D.position.x) == 1:
bone.set_bone_direction(-1)
else:
bone.set_bone_direction(1)
get_parent().add_child(bone)
bone.position = $Position2D.global_position
velocity.y = velocity.y + GRAVITY
if is_on_floor():
on_ground = true
else:
if is_attacking == false:
on_ground = false
if velocity.y < 0:
$Player_Animation.play("Player_Jump")
else:
$Player_Animation.play("Player_Fall")
velocity = move_and_slide(velocity, FLOOR)
func _on_Sprite_animation_finished():
is_attacking = false
Is there a way for you to use the _on_Sprite_animation_finished()
function to spawn the bullet? In other words, you add the code for spawning the bullet to the _on_Sprite_animation_finished()
function?
Ertain | 2018-10-19 22:14