面向对象技术
面向对象技术(Object-Oriented Technology),强调软件在开发过程中,采用人认知客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。
# -*- coding: utf-8 -*-
"""
编写Entity类,代表游戏中的所有实体,需要有一个成员变量pos,类型为元组,代表坐标,初始化时接收一个3个int的元组,存入pos。
编写Player类,继承Entity类,需要有一个成员变量name,类型为str,代表玩家名,定义一个hello函数,打印"Hello 玩家名",并打印这个类的pos变量的值。
实例化Player对象,调用hello函数。
"""
class Entity:#定义一个实体类
pos = None#定义一个坐标变量
def __init__(self, pos):#初始化函数
self.pos = pos#将传入的坐标存入pos
class Player(Entity):#定义一个玩家类,继承实体类
name = None#定义一个名字变量
def __init__(self, pos, name=""):#初始化函数
Entity.__init__(self, pos)#调用父类的初始化函数
self.name = name#将传入的名字存入name
def hello(self):#定义一个打印函数
print "Hello {}\n{}".format(self.name, self.pos)#打印名字和坐标
if __name__ == "__main__":#主函数
player = Player((0, 0, 0), "player1")#实例化一个玩家对象
player.hello()#调用打印函数
编写完成后运行,运行结果如图。
MyLogPart的类
# -*- coding: utf-8 -*-
from Preset.Model.PartBase import PartBase
import random
from Preset.Model.GameObject import registerGenericClass
'''
零件简介:
日志零件演示如果打印log输出
逻辑简述:
TickClient函数每个时间间隔会打印日志,时间间隔通过self.interval变量随机控制,日志内容是该零件的路径名和世界坐标
使用方法:
1.通过属性面板设置好打印间隔区间
2.启动运行,查看log打印信息
'''
@registerGenericClass("MyLogPart")#注册到类名
class MyLogPart(PartBase):#继承PartBase
def __init__(self):#构造函数
super(MyLogPart, self).__init__()#调用父类构造函数
self.name = "日志零件"#零件名
self.description = "日志零件,用于测试调试日志"#零件描述
self.interval = (30, 90)#打印间隔区间
self._tickCnt = 0#计数器
self._tickInterval = random.randint(self.interval[0], self.interval[1])#随机间隔
def TickClient(self):#客户端每帧调用
self._tickCnt += 1#计数器加1
if self._tickCnt == self._tickInterval:#计数器等于间隔
print("%s 在 %s" % (self.GetDisplayPath(), self.GetWorldPosition()))#打印日志
self._tickInterval = random.randint(self.interval[0], self.interval[1])#重新随机间隔
self._tickCnt = 0#计数器清零
这段Python代码定义了一个名为MyLogPart的类,该类继承自PartBase。该类使用Preset.Model.GameObject模块中的registerGenericClass装饰器注册为"MyLogPart"。 MyLogPart类具有以下属性:
name:表示零件名称的字符串。
description:描述零件的字符串。
interval:定义日志记录可能间隔的元组。
_tickCnt:每个tick增加的计数器。
_tickInterval:在interval定义的范围内的随机整数。
该类有两个方法:
__init__:这是构造方法。它初始化类的属性。_tickInterval设置为在interval定义的范围内的随机整数。
TickClient:这个方法在客户端每帧调用。它将_tickCnt增加1。如果_tickCnt等于_tickInterval,它会打印零件的显示路径和世界位置,将_tickCnt重置为0,并将_tickInterval设置为在interval定义的范围内的新随机整数。
这个类主要有两个函数,一个__init__,在初始化时会被执行,一个TickClient函数,会打印日志信息。
MyLogPartMeta的类
# -*- coding: utf-8 -*-
from Meta.ClassMetaManager import sunshine_class_meta
from Meta.EnumMeta import DefEnum
from Meta.TypeMeta import PBool, PStr, PInt, PCustom, PVector3, PVector3TF, PEnum, PDict, PFloat, PArray, PVector2
from Preset.Model import PartBaseMeta
@sunshine_class_meta
class MyLogPartMeta(PartBaseMeta):
CLASS_NAME = "MyLogPart"
PROPERTIES = {
"interval": PVector2(sort=1000, group="MyLogPart", text="打印间隔"),
}
这段Python代码定义了一个名为MyLogPartMeta的类,该类继承自PartBaseMeta。该类使用sunshine_class_meta装饰器进行元数据管理。 MyLogPartMeta类具有以下属性:
CLASS_NAME:一个字符串,表示类名,这里是"MyLogPart"。
PROPERTIES:一个字典,定义了类的属性。这里只定义了一个属性"interval",它是一个PVector2类型,用于表示打印间隔。sort=1000表示排序权重,group="MyLogPart"表示该属性属于"MyLogPart"组,text="打印间隔"是该属性的文本描述。
总的来说,这个类是用于管理MyLogPart类的元数据的,包括类名和属性等信息