用户:
小萝卜cXsQ查看:0 回复:5 评论:0 创建时间:2022-08-17T13:56:52
克隆这个词大家应该都不陌生,它是kitten当中的一个重要的积木块。但是,该怎么在python中实现克隆呢?
首先,我们得了解一下关于类的知识(会的请跳过)
先看一下类的框架
class 类名(继承的类名):
方法
那么,什么是类继承呢?
请看下面的例子
class code(object):
def __init__(self):
self.hp = 10
其中,object是python内置类,__init__方法是object的内置方法,它的参数由实例化对象时填入,而self参数无需填入,由python解释器填入,self代表的便是当前对象。注意,是当前对象,而不是当前类
实例化一个对象格式
变量 = 类名(__init__函数中的参数(除self外))
好了,讲完了类的知识,进入正题
首先,导入pgzrun,规定窗口大小
import pgzrun
WIDTH = 800
HEIGHT = 600
然后,定义类Coin,继承pgzrun的角色类Actor
class Coin(Actor):#金币图片自己找
def moveX(self,x):#让金币在x轴上移动
t = [self.pos[0]+x,self.pos[1]]#元组无法修改,所以先转换成列表
self.pos = (t[0],t[1])
def moveY(self,y):#让金币在y轴上移动
t = [self.pos[0],self.pos[1]+y]#元组无法修改,所以先转换成列表
self.pos = (t[0],t[1])
接着创建金币本体和克隆体列表
coin = Coin('coin',(WIDTH/2,HEIGHT/2)) #创建金币本体
clone = [] #创建克隆体列表
接着用for循环进行克隆
for i in range(10): #克隆10个金币
clone.append(Coin('coin',(WIDTH/2,HEIGHT/2))) #克隆金币本体
!!!注意,不能在append函数中填入金币本体!因为这样这个列表中的金币克隆体将指向本体,没有克隆!!!
在update和draw函数中进行克隆体、本体的刷新、绘制
def draw():
screen.clear()
coin.draw()
for i in clone:
i.draw()
def update():
#这里写金币本体的代码
#..........
j = 0.1 #克隆体移动的距离
for i in clone:
#这里写克隆体的代码
#..........
i.moveX(j) #克隆体移动
j += 0.2
最后不要忘记加上go函数
pgzrun.go()
接着运行。你看到了什么?
完整代码:
import pgzrun
WIDTH = 800
HEIGHT = 600
class Coin(Actor):#金币图片自己找
def moveX(self,x):#让金币在x轴上移动
t = [self.pos[0]+x,self.pos[1]]#元组无法修改,所以先转换成列表
self.pos = (t[0],t[1])
def moveY(self,y):#让金币在y轴上移动
t = [self.pos[0],self.pos[1]+y]#元组无法修改,所以先转换成列表
self.pos = (t[0],t[1])
coin = Coin('coin',(WIDTH/2,HEIGHT/2)) #创建金币本体
clone = [] #创建克隆体列表
for i in range(10): #克隆10个金币
clone.append(Coin('coin',(WIDTH/2,HEIGHT/2))) #克隆金币本体
def draw():
screen.clear()
coin.draw()
for i in clone:
i.draw()
def update():
#这里写金币本体的代码
#..........
j = 0.1 #克隆体移动的距离
for i in clone:
#这里写克隆体的代码
#..........
i.moveX(j) #克隆体移动
j += 0.2
pgzrun.go()