Muitos Mengxin não foram expostos à programação orientada a objetos antes de aprender o Godot Engine e o GDScript, então fiquei confuso ao ver o conceito de "herança" ao ler "A Primeira Bala do Desenvolvimento de Jogos Godot" , que cenários usam herança? ? Além disso, alguns amigos relataram que leram os livros e alguns artigos na Internet, mas tendem a ficar cada vez mais confusos.
O faraó também veio de Mengxin por todo o caminho, então eu entendo esse tipo de confusão.O problema não são livros e textos líquidos, mas como Mengxin não tem a prática da programação, faz com que, ao ler algumas narrativas abstratas, não haja o suficiente em minha mente. A situação evoca ressonância. Existe apenas uma solução fundamental para esse tipo de confusão, ou seja, "nocautear" , praticar mais, tocar mais unhas e acumular mais. No final, o que pode fazer você abrir repentinamente não é uma resposta certa, mas precisamente a pergunta que você acumulou.
Hoje, o Faraó também usa o GDScript de Godot para fornecer um cenário de uso do mecanismo de herança.
Diretório do artigo
- Situação
- Se não houver herança
- A primeira edição do plano de jogo
- Caso de Planejamento de Jogos Segunda Edição
- Caso de Planejamento de Jogos Terceira Edição
- Quando Mengxin aprendeu herança
- A primeira edição do plano de jogo
- Caso de Planejamento de Jogos Segunda Edição
- Caso de Planejamento de Jogos Terceira Edição
- Sumário
Situação
Esta é uma nova história sobre o jogo Godet Xiaomeng. . .
Se não houver herança
A primeira edição do plano de jogo
O planejador do jogo disse a Mengxin: "Existem três tipos de monstrinhos a serem realizados no jogo: o pequeno monstro A, o pequeno monstro B e o pequeno monstro C".
O pequeno monstro A é do departamento de cura, e seu design conceitual é o seguinte:
Membro | Explicação |
---|---|
level |
Classificação |
hp |
Força física |
loyalty |
Lealdade |
cure() |
Chame-o para liberar habilidades de cura |
O mob B é um sistema de ataque cujo design conceitual é o seguinte:
Membro | Explicação |
---|---|
level |
Classificação |
hp |
Força física |
loyalty |
Lealdade |
attack() |
Ligue para liberar habilidades de ataque |
Little Monster C é do Departamento de Magia e seu design conceitual é o seguinte:
Membro | Explicação |
---|---|
level |
Classificação |
hp |
Força física |
loyalty |
Lealdade |
magic() |
Ligue para liberar habilidades mágicas |
Não parecia difícil de alcançar, então Mengxin começou a construção:
#MonsterA.gd
extends Node
var level = 1
var hp = 5
var loyalty = 10
func cure():
"""具体逻辑略"""
print("MonsterA的治愈技能")
Então Ctrl + C
/ Ctrl + V
exclusão func cure()
mudança func attack()
lógica de implementação ...
#MonsterB.gd
extends Node
var level = 1
var hp = 5
var loyalty = 10
func attack():
"""具体逻辑略"""
print("MonsterB的攻击技能")
Continue Ctrl + C
/ Ctrl + V
exclua e func attack()
mude para a func magic()
lógica de implementação ...
#MonsterC.gd
extends Node
var level = 1
var hp = 5
var loyalty = 10
func magic():
"""具体逻辑略"""
print("MonsterC的魔法技能")
Sim! Parece muito bom!
Caso de Planejamento de Jogos Segunda Edição
Antes que fosse feliz demais, o plano trouxe a segunda edição do plano.
"Esperamos adicionar mais tipos de mobs, um ... cerca de 100 tipos. Eles têm um relacionamento semelhante com os mobs A, B e C. Todos têm os mesmos atributos e métodos diferentes", disse o planejador.
"Ah ... ok" o parceiro de Mengxin franziu a testa e começou a trabalhar novamente. . .
O processo é um pouco ... Desta vez é um pouco longo, durante o período, minhas mãos ficaram deslumbradas e eu cometi muitos erros ...
Caso de Planejamento de Jogos Terceira Edição
Só vai chamá-lo um dia, planejando novamente: "Isso deve remover todos os mobs na loyalty
propriedade, adicionando um comum" Roar "habilidades".
Mengxin: "...... & *% ...... & ¥% ...... #)) -"
Quando Mengxin aprendeu herança
A primeira edição do plano de jogo
#MonsterBase.gd
extends Node
class_name MonsterBase #从Godot3.1开始可以给类起名字了
var level = 1
var hp = 5
var loyalty = 10
#MonsterA.gd
extends MonsterBase #继承MonsterBase
func cure():
"""具体逻辑略"""
print("MonsterA的治愈技能")
#MonsterB.gd
extends MonsterBase #继承MonsterBase
func attack():
"""具体逻辑略"""
print("MonsterB的攻击技能")
#MonsterC.gd
extends MonsterBase #继承MonsterBase
func magic():
"""具体逻辑略"""
print("MonsterC的魔法技能")
Defina uma classe mais básica e escreva menos linhas de código repetido.
Caso de Planejamento de Jogos Segunda Edição
O processo é omitido. . . Sem código repetido, a probabilidade de erro é menor, mas não vejo nada que seja mágico demais.
Caso de Planejamento de Jogos Terceira Edição
#MonsterBase.gd
extends Node
class_name MonsterBase #从Godot3.1开始可以给类起名字了
var level = 1
var hp = 5
#var loyalty = 10
func roar():
print("路见不平一声吼,该出手时就出手")
O que? ! ! H (&(……% &% …………, tão simples de conseguir? !!!
O problema que antes permitia a Mengxin e planejava se romper não é mais um problema, e desde então eles vivem felizes juntos ...
Sumário
Para ser honesto, a partir da comparação das duas situações acima, não é difícil descobrir que o mecanismo de herança consiste em colocar as características comuns das classes derivadas na classe (abstrata) da classe base.Quando existe um grande número de classes com características comuns, as características comuns podem mudar Ao usar a herança, ele melhorará bastante a capacidade de manutenção do código.