`so i am trying to make a game where you can only acelerate and rotate if you want to move. but if i rotate i still go up. i know why because i use velocity y but i dont know any other way to add in the grafity.
code:
extends CharacterBody2D
var rocket_speed = -150
var gravity = 350
func get_input():
var up = Input.is_action_pressed(“up”)
var rotate_right = Input.is_action_pressed(“rotate right”)
var rotate_left = Input.is_action_pressed(“rotate left”)
if up:
velocity.y = rocket_speed
if rotate_right:
rotation += deg_to_rad(2)
if rotate_left:
rotation += deg_to_rad(-2)
It works now. But the gravity doesn’t work. i think it has something to do with transform.y at velocity and something to do with func _physics_process(delta) under velocity.y because that line doesnt work anymore.
extends CharacterBody2D
var rocket_speed = -150
var gravity = 20
func get_input():
var up = Input.is_action_pressed(“up”)
var rotate_right = Input.is_action_pressed(“rotate right”)
var rotate_left = Input.is_action_pressed(“rotate left”)
velocity = transform.y * Input.get_axis(“down”, “up”) * rocket_speed
if rotate_right:
rotation += deg_to_rad(2)
if rotate_left:
rotation += deg_to_rad(-2)
You may want to use move_toward and a acceleration value, and only apply movement if there is a direction pressed.
I’ve never been a fan of seperating into a get_input function since it’s never used anywhere else, it’s just an extra function that drops the delta parameter.
func _physics_process(delta: float) -> void:
var rotation_input := Input.get_axis("rotate left", "rotate right")
# using math over if/else and use `delta`
rotation += deg_to_rad(2) * rotation_input * delta
var direction_input := transform.y * Input.get_axis("down", "up")
if direction_input:
# a good acceleration value may be 4 to 8 times speed, maybe 600
velocity = velocity.move_toward(direction_input * rocket_speed, acceleration * delta)
else:
velocity.y += gravity
move_and_slide()
Make sure to use proper formatting when pasting code