《我的世界》南宫幻雅开发技术手册——Python基础语法

面向对象技术

        面向对象技术(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()#调用打印函数

79e86c0272924e2d960cf9fe779c1bb6.png

编写完成后运行,运行结果如图。

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类的元数据的,包括类名和属性等信息

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值