猫史档案馆


重磅!python pgzrun教程之克隆

用户:小萝卜cXsQ小萝卜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()


回复

上一页1 页 / 共 1下一页
小萝卜cXsQ小萝卜cXsQ

顶上去

点赞0


评论


小萝卜cXsQ小萝卜cXsQ

顶啊顶

点赞0


评论


小萝卜cXsQ小萝卜cXsQ

ddddddddddddd

点赞0


评论


小萝卜cXsQ小萝卜cXsQ

ddd

点赞0


评论


小萝卜cXsQ小萝卜cXsQ

dddddddddddddddddd

点赞0


评论