- #1
Darkmisc
- 220
- 31
- TL;DR Summary
- I'm making a game where the player can face either left or right. I want them to fire a laser in the direction they face. I'm using an if-statement to determine which laser to fire (based on whether the player sprite is flipped). I suspect the if-statement is not working.
Hi everyone
I'm making a shoot 'em up like Fantasy Zone, i.e. the player can face either left or right (as opposed to only facing one direction while moving forwards and backwards).
I've made separate scenes for the laser that fires left and the laser that fires right.
The player should fire the lasers based on which way they are facing.
However, the player only fires the laser that is instanced at line 61. I've tried both LASER and RLASER in that position and they both work.
The problem is that the player will only fire one type of laser. They won't fire the laser instanced after the else-statement.
I made a label to check when Global.face_right==true and Global.face_right==false, and the label always displays the correct value.
It seems the program knows which way the player is facing, but won't fire the appropriate laser.
Does anyone know what I've done wrong? Thanks
I'm making a shoot 'em up like Fantasy Zone, i.e. the player can face either left or right (as opposed to only facing one direction while moving forwards and backwards).
I've made separate scenes for the laser that fires left and the laser that fires right.
The player should fire the lasers based on which way they are facing.
However, the player only fires the laser that is instanced at line 61. I've tried both LASER and RLASER in that position and they both work.
The problem is that the player will only fire one type of laser. They won't fire the laser instanced after the else-statement.
I made a label to check when Global.face_right==true and Global.face_right==false, and the label always displays the correct value.
It seems the program knows which way the player is facing, but won't fire the appropriate laser.
Does anyone know what I've done wrong? Thanks
Player.gd:
extends KinematicBody2Dvar speed = 300
var LASER = preload("res://Laser/Laser.tscn")
var RLASER = preload("res://Laser/Rev_Laser.tscn")
export var normalFireDelay: float = 0.12
export var rapidFireDelay: float = 0.08
var fireDelay: float = normalFireDelay
var vel := Vector2(0, 0)
var laser_parent = Node2D.new()
var laser_parent2 = Node2D.new()
func _physics_process(delta):
var dirVec := Vector2(0, 0)
$Label.text=str(Global.face_right)
move_and_slide(Global.move_vector * speed)
$AnimatedSprite.flip_h = Global.move_vector.x < 0
if $AnimatedSprite.flip_h:
Global.face_right=false
else:
Global.face_right=true if Input.is_action_pressed("shoot"):
shoot_laser()
# if Input.is_action_pressed("shoot") and Global.face_right==false:
#
# shoot_R_laser()
if Input.is_action_pressed("move_left"):
dirVec.x = -1
Global.face_right=false
$AnimatedSprite.set_flip_h(true)
elif Input.is_action_pressed("move_right"):
dirVec.x = 1
Global.face_right=true
$AnimatedSprite.set_flip_h(false)
if Input.is_action_pressed("move_up"):
dirVec.y = -1
elif Input.is_action_pressed("move_down"):
dirVec.y = 1
vel = dirVec.normalized() * speed
position += vel * delta
var viewRect := get_viewport_rect()
position.x = clamp(position.x, 0, viewRect.size.x)
position.y = clamp(position.y, 0, viewRect.size.y)
func shoot_laser():
if Global.face_right:
var new_laser = LASER.instance()
get_parent().add_child(laser_parent)
laser_parent.add_child(new_laser)
new_laser.global_position = Vector2(global_position.x+53, global_position.y)
else:
var new_laser2 = RLASER.instance()
get_parent().add_child(laser_parent2)
laser_parent2.add_child(new_laser2)
new_laser2.global_position = Vector2(global_position.x-53, global_position.y)
func shoot_R_laser():
var new_laser = RLASER.instance()
get_parent().add_child(laser_parent)
laser_parent.add_child(new_laser)
new_laser.global_position = Vector2(global_position.x-53, global_position.y)