Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | Vikrant |
I am making a 2d Game using godot 3.2 stable release, I want me Player to flip it’s direction along with it’s collision shapes, Only possible way of doing so is by fliping Entire kinematicsbody2D. But when doing so It behaves Strangely. Here’s a video of that
Strange Behaviour
here’s my script of doing so
extends Actor
onready var _anim : AnimatedSprite = get_node("AnimatedSprite")
func _enemy_kills_me(body : PhysicsBody2D) -> void:
queue_free()
func _killed_the_enemy(area : Area2D) -> void:
_velocity.y = -maxSpeed.y / 2
func _process(delta):
animPlayer()
func _physics_process(delta :float) -> void:
var is_jumping = Input.is_action_just_released("jump") and _velocity.y < 0.0
var Direction = Get_Direction()
_velocity = Calcule_Jump_Height(Direction, _velocity, is_jumping)
_velocity = move_and_slide(_velocity, Vector2.UP, true)
func Get_Direction() -> Vector2:
var x = 0.0
if Input.is_action_pressed("move_right"):
x = 1.0
elif Input.is_action_pressed("move_left"):
x = -1.0
else:
x = 0.0
if x != 0.0:
scale.x = x * 0.75
var y = 1.0
var jumping := false
if Input.is_action_just_pressed("jump") and is_on_floor():
y = -1.0
else:
y = 1.0
jumping = false
return Vector2(x,y)
func Calcule_Jump_Height(
dir :Vector2,
linearVelocity :Vector2,
is_Jumping : bool
) -> Vector2:
var new_Velocity := linearVelocity
if dir.x > 0.0:
new_Velocity.x = min(new_Velocity.x + (speed * get_physics_process_delta_time() * 4) , maxSpeed.x)
elif dir.x < 0.0 :
new_Velocity.x = max(new_Velocity.x - (speed * get_physics_process_delta_time() * 4), - maxSpeed.x)
new_Velocity.y += Gravity * get_physics_process_delta_time()
if dir.y == -1.0:
new_Velocity.y = maxSpeed.y * dir.y
if is_Jumping:
new_Velocity.y = 0.0
if is_on_floor():
if !Input.is_action_pressed("move_left") and !Input.is_action_pressed("move_right"):
if new_Velocity.x < -100.0:
new_Velocity.x += (speed * get_physics_process_delta_time() * 4)
elif new_Velocity.x > 100.0:
new_Velocity.x -= (speed * get_physics_process_delta_time() * 4)
else:
new_Velocity.x = 0
if !is_on_floor():
if !Input.is_action_pressed("move_left") and !Input.is_action_pressed("move_right"):
if new_Velocity.x < -100.0:
new_Velocity.x += (speed * get_physics_process_delta_time() / 2)
elif new_Velocity.x > 100.0:
new_Velocity.x -= (speed * get_physics_process_delta_time() / 2)
else:
new_Velocity.x = 0
return new_Velocity
func animPlayer() -> void:
if _velocity.x != 0.0 and _velocity.y == 0.0:
_anim.play("Run")
_anim.position.y = -109.105
elif _velocity.y < 0.0:
_anim.play("GoingUp")
_anim.position.y = -82.0
elif _velocity.y > 0.0:
_anim.play("CommingDown")
_anim.position.y = -90.0
else:
_anim.play("Idle")
_anim.position.y = -109.105
i Used this code to flip
unc Get_Direction() -> Vector2:
var x = 0.0
if Input.is_action_pressed("move_right"):
x = 1.0
elif Input.is_action_pressed("move_left"):
x = -1.0
else:
x = 0.0
if x != 0.0:
scale.x = x * 0.75 # to flip character
var y = 1.0
var jumping := false
if Input.is_action_just_pressed("jump") and is_on_floor():
y = -1.0
else:
y = 1.0
jumping = false
return Vector2(x,y)