Have problem with _input(event) function with Input.is_action_pressed in _fixed_process(dt)

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By linuxfree
:warning: Old Version Published before Godot 3 was released.
I see conflict with boths functions Keys on same script. Cant control my Character 3D have conflict look script

extends Spatial

var anim_player = null
var anim = ""
var anim_new = ""

var coordinate = 0
var upperarm_angle = Vector3()
var lowerarm_angle = Vector3()
var skel
var bone = "upperarm_r"
func _ready():
    skel = get_node("first_model/Skeleton")
    set_fixed_process(true)
    var bone = "upperarm_r"
    var coordinate = 0
    
    # variavel aponta para o nó principal da animação
    anim_player = get_node("AnimationPlayer")
    # get_node("Spatial_Player/AnimationPlayer").set_speed(0.2)
    set_process_input(true)


func set_bone_rot(bone, ang):
    var b = skel.find_bone(bone)
    var rest = skel.get_bone_rest(b)
    
    
    var newpose = rest.rotated(Vector3(1.0, 0.0, 0.0), ang.x)
 #   var newpose = newpose.rotated(Vector3(0.0, 1.0, 0.0), ang.y)
 #   var newpose = newpose.rotated(Vector3(0.0, 0.0, 1.0), ang.z)
    skel.set_bone_pose(b, newpose)


func _fixed_process(dt):
    if Input.is_action_pressed("select_x"):
        coordinate = 0
    elif Input.is_action_pressed("select_y"):
        coordinate = 1
    elif Input.is_action_pressed("select_z"):
        coordinate = 2
    elif Input.is_action_pressed("select_upperarm"):
        bone = "upperarm_r"
   
    elif Input.is_action_pressed("increment"):
        if bone == "upperarm_r": # tecla =
           if (upperarm_angle[coordinate] < 0.12):
              upperarm_angle[coordinate] += 0.1
    elif Input.is_action_pressed("decrement"):
        if bone == "upperarm_r":  # tecla -   
          if (upperarm_angle[coordinate] > -1.6):
              upperarm_angle[coordinate] -= 0.1
    set_bone_rot("upperarm_r", upperarm_angle)

    if (anim != anim_new):
        anim_new = anim
        anim_player.play(anim)
    if (Input.is_key_pressed(KEY_CONTROL)):
         get_node("Armature/Skeleton/BoneAttachment/Particles").set_emitting(true)
    else:
         get_node("Armature/Skeleton/BoneAttachment/Particles").set_emitting(false)

    if (Input.is_action_just_released("ui_select") == true):
        anim = "Pulando"
        anim_player.set_speed(1)

func _input(event):
     if (event.type==InputEvent.KEY and event.scancode == KEY_UP and event.pressed):
        anim = "Correndo"
        anim_player.set_speed(0.6)
     elif (event.type==InputEvent.KEY and event.scancode == KEY_DOWN and event.pressed):
          anim = "default"
          anim_player.set_speed(0.0)
     elif (event.type==InputEvent.KEY and event.scancode == KEY_LEFT and event.pressed):
        anim = "Andando"
        anim_player.set_speed(0.2)
   #  elif (event.type==InputEvent.KEY and event.scancode == KEY_SPACE):
   #     anim = "Pulando"
   #     anim_player.set_speed(1)
     else:
        anim = "Parado_Arma_Aniamando"
        anim_player.set_speed(0.2)
     
    please help me

Please format your code properly. Just select it all and click on the { } button to format it as code. It is impossible to read it like this.

vnen | 2016-09-17 16:59

Please any idea for solve that?

_fixed_process(dt) not working fine with _input(event) in same script

linuxfree | 2016-09-17 17:34

What is the problem that you’re having? That looks like valid code, though maybe it doesn’t do what you’re expecting it to.

Input.is_action_pressed just checks whether or not that action is pressed right now. By putting it in _fixed_process, you’re essentially looking for held-down keys.

The pattern I like to use for _input(event) is as follows:

func _input(event):
	if (event.type == InputEvent.KEY or event.type == InputEvent.JOYSTICK_BUTTON) and event.is_pressed() and not event.is_echo():
		if event.is_action("whatever"):
			get_tree().set_input_as_handled()
			# Do Whatever

The if condition identifies any keys (or joystick buttons) that were just pressed for the first time. Within that, I check for specific actions. Finally, and this is important, if I handle those actions, I call get_tree().set_input_as_handled(). If you don’t do this, then other things can pick up the same action, which is sometimes undesirable.

Hammer Bro. | 2016-09-22 23:50