一、介绍与演示
将阳光的生命周期交给向日葵管理,实现向日葵生产阳光
二、代码详解
data_object.py中更新了SUMMON_CD字段,用来记录生成阳光间隔
data={
0 : {
'PATH':'pic/other/peabullet.png',
'IMAGE_INDEX_MAX':0,# 图片索引最大值
'IMAGE_INDEX_CD':0.0,# 图片索引时间间隔
'POSITION_CD':0.008,# 位置时间间隔
'SIZE':(32,32),# 图片大小
'SPEED':(4,0),# 图片移动速度
'SUMMON_CD':-1,# 生成时间间隔
},
1 : {
'PATH':'pic/zombie/0/%d.png',
'IMAGE_INDEX_MAX':15,# 图片索引最大值
'IMAGE_INDEX_CD':0.2,# 图片索引时间间隔
'POSITION_CD':0.2,# 位置时间间隔
'SIZE':(100,128),# 图片大小
'SPEED':(-3,0),# 图片移动速度
'SUMMON_CD':-1,# 生成时间间隔
},
2 : {
'PATH':'pic/other/sunlight/%d.png',
'IMAGE_INDEX_MAX':30,# 图片索引最大值
'IMAGE_INDEX_CD':0.06,# 图片索引时间间隔
'POSITION_CD':0.05,# 位置时间间隔
'SIZE':(80,80),# 图片大小
'SPEED':(0,2),# 图片移动速度
'SUMMON_CD':-1,# 生成时间间隔
},
3 : {
'PATH':'pic/plant/sunflower/%d.png',
'IMAGE_INDEX_MAX':19,# 图片索引最大值
'IMAGE_INDEX_CD':0.07,# 图片索引时间间隔
'POSITION_CD':10000,# 位置时间间隔
'SIZE':(128,128),# 图片大小
'SPEED':(0,0),# 图片移动速度
'SUMMON_CD':8,# 生成时间间隔
},
}
sunflower.py
import objectbase
from const import *
import sunlight
class SunFlower(objectbase.ObjectBase):
def __init__(self, id , pos):
super(SunFlower,self).__init__(
id,
pos
)
self.sunLights=[]
def preSummon(self):
sl=sunlight.SunLight(2,(self.pos[0]+20,self.pos[1]-10))
self.sunLights.append(sl)
def update(self):
super(SunFlower,self).update()
for sl in self.sunLights:
sl.update()
def draw(self, ds):
super(SunFlower,self).draw(ds)
for sl in self.sunLights:
sl.draw(ds)
objectbase.py
import image
import time
import data_object #导入数据对象模块,包含图片路径、索引等信息
from const import *
class ObjectBase(image.Image):
"""
ObjectBase类是一个游戏对象的基类,继承自image.Image类。
它用于表示游戏中的各种对象,并提供了一些基本的属性和方法。
"""
def __init__(self, id , pos):
self.id = id
self.preIndexTime=0 # 上一次改变帧的时间
self.prePositionTime=0 #上一次改变位置的时间
self.preSummonTime=0 #上一次生成召唤物的时间
super(ObjectBase,self).__init__(
self.getData()['PATH'],
0,
pos,
self.getData()['SIZE'],
self.getData()['IMAGE_INDEX_MAX']
) # 调用父类构造函数初始化图片属性
def getSummonCD(self):
#获取召唤物生成时间间隔
return self.getData()['SUMMON_CD']
def getSpeed(self):
#获取速度
return self.getData()['SPEED']
def getData(self):
#获取数据对象
return data_object.data[self.id]
def getPositionCD(self):
return self.getData()['POSITION_CD']
def getImageIndexCD(self):
return self.getData()['IMAGE_INDEX_CD']
def update(self):
self.checkSummon()
self.checkImageIndex() #帧动画实现
self.checkPosition() #平移实现
def checkImageIndex(self):
if time.time()-self.preIndexTime<self.getImageIndexCD():
return
self.preIndexTime=time.time()
idx=self.pathIndex+1
if idx>=self.pathIndexMax:
idx=0
self.updateIndex(idx)
def checkPosition(self):
if time.time()-self.prePositionTime<self.getPositionCD():
return False
self.prePositionTime=time.time()
speed=self.getSpeed()
self.pos=(self.pos[0]+speed[0],self.pos[1]+speed[1])
return True
def checkSummon(self):
if time.time()-self.preSummonTime<self.getSummonCD():
return
self.preSummonTime=time.time()
self.preSummon()
def preSummon(self):
pass