2021-08-07 Godot Engine > 고양이와 icon의 충돌 판정 > (커서로 캐릭터 이동, 마우스로 캐릭터 이동, 충돌 판정)
12781 단어 Godot
Windows 10 Pro v21H1
Godot Engine v3.3.2.stable.official
프로세스 개요문자
EDGE로 그립니다.
노드 레벨
(왼쪽은 이름, 오른쪽은 노드 유형)
거리에 따라 두 Enemy 객체와 충돌할지 여부를 결정합니다.
Collision 레이어 설정
아래 레이어에 지정
Player의 Collision.Layer
Player.gd
extends KinematicBody2D
var shift_right = Vector2(32, 0) * 4
var shift_left = -Vector2(32, 0) * 4
var shift_up = -Vector2(0, 32) * 4
var shift_down = Vector2(0, 32) * 4
onready var enemyNode_always = get_node("../Enemy_always")
onready var enemyColl_always = get_node("../Enemy_always/Collision_enemy")
onready var enemyNode_fadeaway = get_node("../Enemy_fadeAway")
onready var enemyColl_fadeaway = get_node("../Enemy_fadeAway/Collision_enemy")
const CHARACTER_SIZE = 64 # 64 x 64
const DISP_WIDTH = 1024
const DISP_HEIGHT = 600
func myMoveAndCollide(delta):
if position.x < CHARACTER_SIZE / 2:
position.x = CHARACTER_SIZE / 2
return false
if position.x > DISP_WIDTH:
position.x = DISP_WIDTH
return false
if position.y < CHARACTER_SIZE / 2:
position.y = CHARACTER_SIZE / 2
return false
if position.y > DISP_HEIGHT:
position.y = DISP_HEIGHT
return false
return move_and_collide(delta)
func hideEnemy():
var dist = enemyNode_fadeaway.transform.origin.distance_to(position)
print(dist)
if dist > 100: # not fadeaway Node
return
enemyNode_fadeaway.visible = false # hide
enemyColl_fadeaway.disabled = true # disable collision
func _process(delta):
# acceleration
var accel = 1.0
var collide
if Input.is_action_pressed("ui_accept"):
accel = 2.0
# movement
if Input.is_action_pressed("ui_right"):
collide = myMoveAndCollide(shift_right * delta * accel)
if Input.is_action_pressed("ui_left"):
collide = myMoveAndCollide(shift_left * delta * accel)
if Input.is_action_pressed("ui_up"):
collide = myMoveAndCollide(shift_up * delta * accel)
if Input.is_action_pressed("ui_down"):
collide = myMoveAndCollide(shift_down * delta * accel)
if collide:
hideEnemy()
# for debug
print("collide1,", collide)
func _input(event):
var collide
if event is InputEventMouseButton:
var moveShift = event.position - position
moveShift = moveShift.normalized() * CHARACTER_SIZE / 2
collide = myMoveAndCollide(moveShift)
if collide:
hideEnemy()
# for debug
print("collide2,", collide)
실행 예시작할 때:
오른쪽 icon 충돌 후:
참고 자료
Reference
이 문제에 관하여(2021-08-07 Godot Engine > 고양이와 icon의 충돌 판정 > (커서로 캐릭터 이동, 마우스로 캐릭터 이동, 충돌 판정)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/06dd48cc23dfde47929c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)