Perguntas e respostas: Entenda o mecanismo de herança no GDScript através de um cenário (o mecanismo de jogo Godot é novo)

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.

Situação

Esta é uma nova história sobre o jogo Godet Xiaomeng. . .
Insira a descrição da imagem aqui

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 + Vexclusã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 + Vexclua 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的魔法技能")

Insira a descrição da imagem aqui

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 ...

Insira a descrição da imagem aqui

Caso de Planejamento de Jogos Terceira Edição

Só vai chamá-lo um dia, planejando novamente: "Isso deve remover todos os mobs na loyaltypropriedade, adicionando um comum" Roar "habilidades".

Mengxin: "...... & *% ...... & ¥% ...... #)) -"

Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

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.

Insira a descrição da imagem aqui

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? !!!

Insira a descrição da imagem aqui

O problema que antes permitia a Mengxin e planejava se romper não é mais um problema, e desde então eles vivem felizes juntos ...

Insira a descrição da imagem aqui

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.

Publicado 401 artigos originais · Gosto 1608 · Visite 250.000+

Acho que você gosta

Origin blog.csdn.net/hello_tute/article/details/105426355
Recomendado
Clasificación