![]() |
Attention | Topic was automatically imported from the old Question2Answer platform. |
![]() |
Asked By | BraveHeartMA |
At the moment I am working on the environment of a level and I tried including things like grass. That grass was supposed to go away(after the animation passes) when a collision box enters it’s area. The Player has a collision box and an attack that activates a Hurt box(collision box). The problem is that the collision box is not registered by the grass or the player is ignored. A way that I know the code in the grass works is that if I stack the grass on top of each other they destroy each other and the animation happens. This happens due to the grass having it’s own collision and detecting each other. The player just passes through and is not detected.
This is the code I used in the Grass:
extends Node2D
func create_grass_effect():
var GrassEffect = load(“res://Effects/GrassEffect.tscn”)
var grassEffect = GrassEffect.instance()
var world = get_tree().current_scene
world.add_child(grassEffect)
grassEffect.global_position = global_position
func _on_HurtBox_area_entered(_area):
create_grass_effect()
queue_free()
And this is the code for the Grass Animation:
extends Node2D
onready var animatedSprite = $AnimatedSprite
func _ready():
animatedSprite.frame = 0
animatedSprite.play(“Animate”)
func _on_AnimatedSprite_animation_finished():
queue_free()
The animation is “Animate”
My player code is( If you are wondering) this:
extends KinematicBody2D
const ACCELERATION = 1000
const MAX_SPEED = 5000
const FRICTION = 1000
enum {
MOVE,
ROLL,
ATTACK
}
var state = MOVE
var velocity = Vector2.ZERO
onready var animationPlayer = $AnimationPlayer
onready var animationTree = $AnimationTree
onready var animationState = animationTree.get(“parameters/playback”)
func _ready():
animationTree.active = true
func _process(delta):
match state :
MOVE:
move_state(delta)
ROLL:
pass
ATTACK:
attack_state(delta)
func move_state(delta):
var input_vector = Vector2.ZERO
input_vector.x = Input.get_action_strength(“ui_right”) - Input.get_action_strength(“ui_left”)
input_vector.y = Input.get_action_strength(“ui_down”) - Input.get_action_strength(“ui_up”)
input_vector = input_vector.normalized()
if input_vector != Vector2.ZERO:
animationTree.set("parameters/Idle/blend_position", input_vector)
animationTree.set("parameters/Run/blend_position", input_vector)
animationTree.set("parameters/Attack/blend_position", input_vector)
animationState.travel("Run")
velocity += input_vector * ACCELERATION * delta
velocity = velocity.clamped(MAX_SPEED * delta)
else:
animationState.travel("Idle")
velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta)
velocity = move_and_slide(velocity)
if Input.is_action_just_pressed("attack"):
state = ATTACK
func attack_state(delta):
velocity = Vector2.ZERO
animationState.travel(“Attack”)
func attack_state_finish():
state = MOVE
If you have questions I will answer at the best of my abilities.