0 votes

So i am new to Godot but i am trying to learng how to make a my first game. I am having issues with the dodge the creeps game. when running the game I dont see any enemies but the timer is counting and i am walking around. a few seconds in, the player disappears but the timer continues (leading me to believe the enemies are invisible but there is no game over message).

One thing to mention before looking at the code, all mobs have been changed to zombies. so whenerv you see zomies that means mob n the case of the dodge the creeps game. if you could explain it to me in zombie, it would be better so I dont get confused.


I code for everything so far is below:

HUD.gd

extends CanvasLayer

signal start_game

func show_message(text):
$MessageLabel.text = text
$MessageLabel.show()
$MessageTimer.start()

func gameover():
show
message("Game Over")
yield($MessageTimer, "timeout")
$StartButton.show()
$MessageLabel.text = "Don't Touch \nMe"
$MessageLabel.show()

func update_score(score):
$ScoreLabel.text = str(score)

func onMessageTimer_timeout():
$MessageLabel.hide()

func onStartButtonpressed():
$StartButton.hide()
emit
signal("start_game")


-player.gd

extends Area2D

signal hit

export(int) var SPEED
var velocity = Vector2()
var screensize

func ready():
hide()
screensize = get
viewport_rect().size

func process(delta):
velocity = Vector2()
velocity = velocity.normalized() * SPEED
if Input.is
actionpressed("uiright"):
velocity.x += 1
if Input.isactionpressed("uileft"):
velocity.x -= 1
if Input.is
actionpressed("uidown"):
velocity.y += 1
if Input.isactionpressed("ui_up"):
velocity.y -= 1
if velocity.length() > 0:
$AnimatedSprite.play()
velocity = velocity.normalized() * SPEED
else:
$AnimatedSprite.animation = "Left"
$AnimatedSprite.stop()
position += velocity * delta
position.x = clamp(position.x, 0, screensize.x)
position.y = clamp(position.y, 0, screensize.y)

if velocity.x != 0 || velocity.y != 0:
    $AnimatedSprite.animation = "Right"
    $AnimatedSprite.flip_v = false
    $AnimatedSprite.flip_h = velocity.x < 0
#for up of down flipping
#elif velocity.y != 0:
    #$AnimatedSprite.animation = "Left"
    #$AnimatedSprite.flip_v = velocity.y < 0
    #$AnimatedSprite.flip_h = false

func onplayerbodyentered(body):
hide()
emit_signal("hit")
$CollisionShape2D.disabled = true

func start(pos):
position = pos
show()
$CollisionShape2D.disabled = false


-Main.gd

extends Node

export (PackedScene) var Zombie
var score

func _ready():
randomize()

func newgame():
score = 0
$player.start($StartPosition.position)
$StartTimer.start()
$HUD.update
score(score)
$HUD.show_message("Get Ready")

func gameover():
$ScoreTimer.stop()
$ZombieTimer.stop()
$HUD.game
over()

func onStartTimer_timeout():
$ZombieTimer.start()
$ScoreTimer.start()

func onScoreTimertimeout():
score += 1
$HUD.update
score(score)

func onZombieTimertimeout():
$ZombiePath/ZombieSpawnLocation.set
offset(randi())
var zombie = Zombie.instance() #create a zombie and add to the scene
addchild(zombie)
var direction = $ZombiePath/ZombieSpawnLocation.rotation
zombie.position = $ZombiePath/ZombieSpawnLocation.position
direction += rand
range(-PI/4, PI/4) #to not only move up, down, left, right (add randomness)
zombie.rotation = direction
zombie.setlinearvelocity(Vector2(randrange(zombie.MINSPEED, zombie.MAX_SPEED), 0).rotated(direction))


Zombie.gd

extends RigidBody2D

export(int) var MINSPEED #min speed of enemy
export(int) var MAX
SPEED #max speed of enemy
var mob_types = ["Zombie", "ZombieStrong", "ZombieFat"]

func ready():
$AnimatedSprite.animation = mob
types[randi() % mob_types.size()]

func onVisibilityNotifier2Dscreenexited():
queue_free()

asked Dec 19, 2018 in Projects by khal2furious (12 points)
edited Dec 19, 2018 by khal2furious

1 Answer

0 votes

I had this problem as well. I solved it by checking the animation names in my AnimatedSprite node. There was a mismatch between the names I gave the animation cycles and the ones i listed under var mob_types in my mob script.

answered Jan 3, 2019 by Allworld (14 points)
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.