wxpython下载很慢_wxPython呈现问题,非常慢和崩溃,不知道为什么

我一直在创建一个简单的基于tile的游戏来帮助我学习python和wxpython。对于初学者,我想创建自己的“世界”,并测试我制作的简单地图生成器,我绑定return键来生成一个新地图并显示它。

就在那时我遇到了这个问题。每次单击return时,它的速度会减慢很多,逐行渲染每个平铺(这显然是缓慢和低效的),最终只是冻结。在

我是一个相当初学者的程序员,从来没有处理过任何形式的图形用户界面,所以这一切对我来说都是全新的,请忍受我!我可以猜到,我设置东西的方式对机器来说是非常累赘的,而且我可能引起了很多递归。我根本不知道。另外,我对OOP不太熟悉,所以我只是按照示例创建类(因此,为什么我只有一个处理所有事情的大型类,我对所有的函数都不太确定。)

以下是我迄今为止编写的所有代码,请忽略注释掉的部分,它们用于将来的函数等:import wx

import random

#main screen class, handles all events within the main screen

class MainScreen(wx.Frame):

hMap = []

tTotalX = 50

tTotalY = 50

def __init__(self, *args, **kwargs):

#This line is equivilant to wx.Frame.__init__('stuff')

super(MainScreen, self).__init__(None, -1, 'You shouldnt see this', style = wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)

self.renderScreen()

def genMap(self,tTotalX,tTotalY):

count1 = 0

count2 = 0

self.hMap = []

while count1 < tTotalY:

count2 = 0

newrow = []

while count2 < tTotalX:

newrow.append(random.randint(1,120))

count2 += 1

self.hMap.append(newrow)

count1 += 1

self.smooth(tTotalX, tTotalY)

self.smooth(tTotalX, tTotalY)

def smooth(self, tTotalX, tTotalY):

countx = 0

county = 0

while county < tTotalY:

countx = 0

while countx < tTotalX:

above = county - 1

below = int(county + 1)

east = int(countx + 1)

west = int(countx - 1)

if east >= tTotalX:

east = 0

if west < 0:

west = tTotalX -1

teast = self.hMap[county][east]

twest = self.hMap[county][west]

if above < 0 or below >= tTotalY:

smooth = (self.hMap[county][countx] + teast + twest)/3

else:

tabove = self.hMap[above][countx]

tbelow = self.hMap[below][countx]

smooth = (self.hMap[county][countx] + tabove + tbelow + teast + twest)/5

self.hMap[countx][county] = int(smooth)

countx += 1

county += 1

def getTileType(self, coordX, coordY, totalX, totalY):

#this is the part of map creation, getting tile type based on tile attributes

tType = ''

height = self.hMap[coordX][coordY]

#the below values are all up to tweaking in order to produce the best maps

if height <= 55:

tType = 'ocean.png'

if height > 55:

tType = 'coast.png'

if height > 60:

tType = 'grassland.png'

if height > 75:

tType = 'hills.png'

if height > 80:

tType = 'mountain.png'

if tType == '':

tType = 'grassland.png'

return tType

#render the main screen so that it dislays all data

def renderScreen(self):

frameSize = 810 #Size of the game window

tTotalX = self.tTotalX #the dimensions of the tile display, setting for in-game coordinates

tTotalY = self.tTotalY

#tsTiny = 1 #ts = Tile Size

#tsSmall = 4

tsMed = 16

#tsLrg = 32

#tsXlrg = 64

tsCurrent = tsMed #the currently selected zoom level, for now fixed at tsMed

pposX = 0 #ppos = Pixel Position

pposY = 0

tposX = 0 #tpos = tile position, essentially the tile co-ordinates independent of pixel position

tposY = 0

#The below is just an example of how to map out the grid, it should be in its own function in due time

self.genMap(tTotalX, tTotalY)

while tposY < tTotalY: #loops through all y coordinates

tposX = 0

while tposX < tTotalX: #loops through all x coordinates

pposX = tposX*tsCurrent

pposY = tposY*tsCurrent

tiletype = self.getTileType(tposX,tposY,tTotalX,tTotalY)

img = wx.Image(('F:\First Pass\\' + str(tiletype)), wx.BITMAP_TYPE_ANY).ConvertToBitmap()

wx.StaticBitmap(self, -1, img, (pposX, pposY))#paints the image object (i think)

tposX += 1

tposY += 1

self.Bind(wx.EVT_KEY_DOWN, self.onclick)

self.SetSize((frameSize-4, frameSize+16))

self.SetBackgroundColour('CYAN')

self.Centre()

self.SetTitle('Nations First Pass')

#string = wx.StaticText(self, label = 'Welcome to Nations, First Pass', pos = (tTotalX*tsCurrent/2,tsCurrent*tTotalY/2))

#string.SetFont(wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT))

self.Show()

def onclick(self, e):

key = e.GetKeyCode()

if key == wx.WXK_RETURN:

self.renderScreen()

#game loop

def main():

app = wx.App()

MainScreen(None)

app.MainLoop()

if __name__ == '__main__':

main()

你得自己动手海洋.png' '海岸.png' '草原.png' '丘陵.png'和'山地.png'(它们需要16x16像素)或者您可以从Imgur链接使用mine:

另外,请根据需要更改img代码中的文件路径。我需要想办法让它自己也能做到,但这是另一天的另一个挑战。在

如果你对此有所了解,我将不胜感激。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值