重叠碰撞区域无法触发触摸事件
Overlapping collision area fails to fire touch event
我的 Android 项目中使用 Godot 3.0 的游戏有一个 "virtual" 左键和右键。当用户presses/touches左键或右键时,会控制主角向左或向右移动。这是右键的脚本。
func _on_RightButton_input_event(viewport, event, shape_idx):
if (event is InputEventScreenTouch):
if (event.pressed):
emit_signal("right_btn_pressed", event)
else:
emit_signal("right_btn_released", event)
这是右键的节点结构:
RightButton (Area2D)
+CollisionShape2D (a circle)
+Sprite (a right arrow image)
我还有一些敌人在场景中随机生成。他们总是向左移动,这是敌人的脚本
extends Node2D
enum MOVEMENT_TYPES{normal}
var movementType = MOVEMENT_TYPES.normal
export var motion = Vector2()
const UP = Vector2(0, -1)
var dyingBounce = true
var counter = 1
var enemyDie = false
func _physics_process(delta):
if(enemyDie):
if dyingBounce == true:
motion.y = -100
dyingBounce = false
motion.y +=10
if(movementType == MOVEMENT_TYPES.normal):
motion = $Body.move_and_slide(motion, UP)
else:
var xf = Transform2D()
xf[2]= motion * (delta * counter)
counter = counter - 2
$Body.transform = xf
func hit_by_main_character():
print("hit")
$Body.get_node("CollisionShape2D").disabled = true
enemyDie = true
pass # replace with function body
func _on_VisibilityNotifier2D_screen_exited():
queue_free()
这是敌人的节点:
Enemy
+ Body
+ VisibilityNotifier2D
+ ColorRect (just a rectangle as a place holder)
+ CollisionShape2D (also a rectangle)
大多数时候,按钮都有效。但是,当敌人移动到右键后面时,右键不会发出input_event信号。 (我将 input_event 信号与 _on_RightButton_input_event 连接起来。)我不确定这是因为重叠的 CollisionShape2D,还是其他一些问题。请帮忙。欢迎提出任何建议。谢谢!
花了我整整两天的时间来弄清楚。我不确定为什么,但以下配置解决了这些问题。
在 Enemy 下的 colorRect 中,有一个 "Mouse" 部分。最初它被设置为 "stop"。将其更改为 "Ignore" 可解决问题。