方法
本课属于 Coddy GDScript 学习旅程的“面向对象编程”单元。第 5 课,共 65 课。
在类中声明的函数称为方法:它是该类的对象可以执行的操作。和任何函数一样,方法可以接收参数并返回一个值,也可以读取和更改对象的变量:
# score_board.gd
class_name ScoreBoard
extends RefCounted
var points: int = 0
func greet() -> void:
print("Scoreboard ready")
func add(amount: int) -> void:
points += amount
func doubled() -> int:
return points * 2
func add_bonus() -> int:
add(10)
return points使用点号调用对象的方法,并在括号中传入参数:
var board := ScoreBoard.new()
board.greet() # 记分板已就绪
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15在类中,一个方法通过名称调用同一对象的另一个方法:add(10) 在 add_bonus() 中表示 self.add(10)。
使用 -> void 声明的方法不会返回任何内容,而使用 -> int 声明的方法必须返回一个 int。每次调用都只作用于自己的对象:board.add(5) 会修改 board.points,不会影响其他记分板。
调用必须与声明匹配:不带参数的 board.add() 会在程序运行前报错。
挑战
简单完成 bank_account.gd 中 BankAccount 类的方法。账户使用变量 balance 存放余额,初始值为 0。
deposit(amount)会将amount加到余额中withdraw(amount)会扣除amount并返回true。如果amount大于余额,则不做任何更改并返回falseget_balance()会返回余额
提供的代码会读取后续命令的数量,然后逐行读取命令:deposit AMOUNT 或 withdraw AMOUNT。它会为每条命令输出一行,并输出最终余额。对于 deposit 50 和 withdraw 80,输出如下:
Deposited 50
Not enough money for 80
Current balance: $50请将你的代码写在 bank_account.gd 中。main.gd 包含提供的输入和输出代码,不能修改。
亲手试试
extends Node
func _ready():
# 提供的输入和输出代码:保持原样。
var account := BankAccount.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var amount := int(parts[1])
if parts[0] == "deposit":
account.deposit(amount)
print("Deposited %d" % amount)
elif account.withdraw(amount):
print("Withdrew %d" % amount)
else:
print("Not enough money for %d" % amount)
print("Current balance: $%d" % account.get_balance())
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: GDScript 在线编译器