0% found this document useful (0 votes)
22 views

Gdscript in 10 Mins

This document provides an overview of the GDScript programming language syntax used in Godot Engine. It covers topics like variables, data types, classes, functions, control flow, and signals. GDScript is a dynamically typed scripting language with syntax similar to Python.

Uploaded by

velve660201
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views

Gdscript in 10 Mins

This document provides an overview of the GDScript programming language syntax used in Godot Engine. It covers topics like variables, data types, classes, functions, control flow, and signals. GDScript is a dynamically typed scripting language with syntax similar to Python.

Uploaded by

velve660201
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

light dark

# Single-line comments are written using hash symbol.


"""
Multi-line
comments
are
written
using
docstrings.
"""

# Script file is a class in itself and you can optionally define a


name for it.
class_name MyClass

# Inheritance
extends Node2D

# Member variables
var x = 8 # int
var y = 1.2 # float
var b = true # bool
var s = "Hello World!" # String
var a = [1, false, "brown fox"] # Array - similar to list in
Python,
# it can hold different types
# of variables at once.
var d = {
"key" : "value",
42 : true
} # Dictionary holds key-value pairs.
var p_arr = PoolStringArray(["Hi", "there", "!"]) # Pool arrays can
# only hold a
certain type.

# Built-in vector types:


var v2 = Vector2(1, 2)
var v3 = Vector3(1, 2, 3)

# Constants
const ANSWER_TO_EVERYTHING = 42
const BREAKFAST = "Spam and eggs!"
# Enums
enum { ZERO, ONE , TWO, THREE }
enum NamedEnum { ONE = 1, TWO, THREE }

# Exported variables are visible in the inspector.


export(int) var age
export(float) var height
export var person_name = "Bob" # Export type hints are unnecessary
# if you set a default value.

# Functions
func foo():
pass # pass keyword is a placeholder for future code

func add(first, second):


return first + second

# Printing values
func printing():
print("GDScript ", "is ", " awesome.")
prints("These", "words", "are", "divided", "by", "spaces.")
printt("These", "words", "are", "divided", "by", "tabs.")
printraw("This gets printed to system console.")

# Math
func doing_math():
var first = 8
var second = 4
print(first + second) # 12
print(first - second) # 4
print(first * second) # 32
print(first / second) # 2
print(first % second) # 0
# There are also +=, -=, *=, /=, %= etc.,
# however no ++ or -- operators.
print(pow(first, 2)) # 64
print(sqrt(second)) # 2
printt(PI, TAU, INF, NAN) # built-in constants

# Control flow
func control_flow():
x = 8
y = 2 # y was originally a float,
# but we can change it's type to int
# using the power of dynamic typing!

if x < y:
print("x is smaller than y")
elif x > y:
print("x is bigger than y")
else:
print("x and y are equal")

var a = true
var b = false
var c = false
if a and b or not c: # alternatively you can use &&, || and !
print("This is true!")

for i in range(20): # GDScript's range is similar to Python's


print(i) # so this will print numbers from 0 to 19

for i in ["two", 3, 1.0]: # iterating over an array


print(i)

while x > y:
printt(x, y)
y += 1

x = 2
y = 10
while x < y:
x += 1
if x == 6:
continue # 6 won't get printed because of continue statement
prints("x is equal to:", x)
if x == 7:
break # loop will break on 7, so 8, 9 and 10 won't get
printed

match x:
1:
print("Match is similar to switch.")
2:
print("However you don't need to put cases before each
value.")
3:
print("Furthermore each case breaks on default.")
break # ERROR! Break statement is unnecessary!
4:
print("If you need fallthrough use continue.")
continue
_:
print("Underscore is a default case.")

# ternary operator (one line if-else statement)


prints("x is", "positive" if x >= 0 else "negative")

# Casting
func casting_examples():
var i = 42
var f = float(42) # cast using variables constructor
var b = i as bool # or using "as" keyword

# Override functions
# By a convention built-in overridable functions start with an
underscore,
# but in practice you can override virtually any function.

# _init is called when object gets initialized


# This is the object's constructor.
func _init():
# Initialize object's internal stuff here.
pass

# _ready gets called when script's node and


# its children have entered the scene tree.
func _ready():
pass

# _process gets called on every frame.


func _process(delta):
# The delta argument passed to this function is a number of
seconds,
# which passed between the last frame and the current one.
print("Delta time equals: ", delta)

# _physics_process gets called on every physics frame.


# That means delta should be constant.
func _physics_process(delta):
# Simple movement using vector addition and multiplication.
var direction = Vector2(1, 0) # or Vector2.RIGHT
var speed = 100.0
self.global_position += direction * speed * delta
# self refers to current class instance

# When overriding you can call parent's function using the dot
operator
# like here:
func get_children():
# Do some additional things here.
var r = .get_children() # call parent's implementation
return r

# Inner class
class InnerClass:
extends Object

func hello():
print("Hello from inner class!")

func use_inner_class():
var ic = InnerClass.new()
ic.hello()
ic.free() # use free for memory cleanup
extends Node2D

var sprite # This variable will hold the reference.

# You can get references to other nodes in _ready.


func _ready() -> void:
# NodePath is useful for accessing nodes.
# Create NodePath by passing String to its constructor:
var path1 = NodePath("path/to/something")
# Or by using NodePath literal:
var path2 = @"path/to/something"
# NodePath examples:
var path3 = @"Sprite" # relative path, immediate child of the
current node
var path4 = @"Timers/Firerate" # relative path, child of the
child
var path5 = @".." # current node's parent
var path6 = @"../Enemy" # current node's sibling
var path7 = @"/root" # absolute path, equivalent to
get_tree().get_root()
var path8 = @"/root/Main/Player/Sprite" # absolute path to
Player's Sprite
var path9 = @"Timers/Firerate:wait_time" # accessing properties
var path10 = @"Player:position:x" # accessing subproperties

# Finally, to get a reference use one of these:


sprite = get_node(@"Sprite") as Sprite # always cast to the type
you expect
sprite = get_node("Sprite") as Sprite # here String gets
# implicitly casted to
NodePath
sprite = get_node(path3) as Sprite
sprite = get_node_or_null("Sprite") as Sprite
sprite = $Sprite as Sprite

func _process(delta):
# Now we can reuse the reference in other places.
prints("Sprite has global_position of", sprite.global_position)

# Use onready keyword to assign a value to


# a variable just before _ready executes.
# This is a commonly used syntax sugar.
onready var tween = $Tween as Tween

# You can export NodePath, so you can assign it within the


inspector.
export var nodepath = @""
onready var reference = get_node(nodepath) as Node

class_name Player extends Node2D

var hp = 10

signal died() # define signal


signal hurt(hp_old, hp_new) # signals can take arguments

func apply_damage(dmg):
var hp_old = hp
hp -= dmg
emit_signal("hurt", hp_old, hp) # emit signal and pass arguments
if hp <= 0:
emit_signal("died")

func _ready():
# connect signal "died" to function "_on_death" defined in self
self.connect("died", self, "_on_death")

func _on_death():
self.queue_free() # destroy Player on death
extends Node

var x: int # define typed variable


var y: float = 4.2
var z := 1.0 # infer type based on default value using := operator

onready var node_ref_typed := $Child as Node

export var speed := 50.0

const CONSTANT := "Typed constant."

func _ready() -> void:


# function returns nothing
x = "string" # ERROR! Type can't be changed!
return

func join(arg1: String, arg2: String) -> String:


# function takes two Strings and returns a String
return arg1 + arg2

func get_child_at(index: int) -> Node:


# function takes an int and returns a Node
return get_children()[index]

signal example(arg: int) # ERROR! Signals can't take typed


arguments!

You might also like