我一直在尝试开发可在PC浏览器和手机上玩的键盘和触摸索引游戏。如何编制索引?
在Godot样品菜单中尝试了一些样品。他们都没有帮助。键盘或触摸屏均可
func _unhandled_input(event):
if event is InputEventScreenTouch:
if event.pressed:
# Down
if !_os2own.has(event.index): # Defensively discard index if already known
var ptr_id = _find_free_pointer_id()
state[ptr_id] = event.position
_os2own[event.index] = ptr_id
else:
# Up
if _os2own.has(event.index): # Defensively discard index if not known
var ptr_id = _os2own[event.index]
state.erase(ptr_id)
_os2own.erase(event.index)
return true
需要触摸和点击游戏。适用于APK和HTML
答案 0 :(得分:0)
对于简单的输入处理(例如,按下和释放),您需要将输入映射到动作。您可以通过“项目设置->输入映射”或InputMap单例添加动作。
从“项目设置->输入映射”中,可以将鼠标,键盘和控制器输入映射到操作。
对于触摸屏,您可以使用TouchScreenButton并将其设置为action
。按下或释放时,它将通过_input()
在场景树下发送该动作事件。 TouchScreenButton隐藏了在_input()
中编写以处理按下和释放所需的逻辑,例如:该手指索引是新的吗?哪个手指食指移到最后一帧?这个手指区域在输入区域的边界吗?和更多。同时还具有通过发出动作且不具有纹理的普通按钮的优势,因为它使用Shape进行输入检测。
因此,这将创建从动作到输入的一对多关系:
my_action -> left mouse button pressed,
-> controller r1 pressed,
-> right half of touch screen pressed,
-> control-shift-f pressed
func _input(event):
if not event.is_action('my_action'):
return
if event.is_action_pressed('my_action'):
start_something()
else:
stop_something()
由于帖子指定了键盘和触摸输入,因此我仅介绍了按下和释放输入动作映射。但是,您也可以将复杂的输入(如手势)映射到动作。您可以继承InputEvent或其任何子类来扩展或创建新事件。您可以将新的事件类映射到操作,然后手动处理输入以查找事件。然后,您停止事件的传播,从新事件类中形成事件,然后调用Input.parse_input_event(my_new_event)
将其发送到树上。
# SomeLeafNode.gd
class MyEvent extends InputEvent:
var my_custom_message = 'Hello, World'
func _ready():
InputMap.add_action('my_event')
InputMap.action_add_event('my_event', MyEvent.new())
func _input(event):
# ... logic to see if event could be MyEvent
get_tree().set_input_as_handled()
var my_event = MyEvent.new()
my_event.my_custom_message = 'Caught my event!'
Input.parse_input_event(my_event)
# SomeInputHandlingGameplayNode.gd
func _input(event):
if event.is_action('my_event'):
print(event.my_custom_message) # prints 'Caught my event!'