锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 娓告垙鐨勪富瑕佹搷浣滄槸閿洏錛屼絾鏄湪紜鐨勬椂鍊欎篃鍙互閲囩敤榧犳爣錛岄紶鏍囪繕鍙互榪涜浜虹墿鑿滃崟鏍?br />鐨凾ip鐨勬煡鐪嬶紝涓昏涓昏鏈夌敓鍛姐侀瓟娉曘佺伒欖傘佹敾鍑誨姏銆侀槻寰″姏銆侀熷害絳夊嚑欏瑰睘鎬с?br /> 鐢熷懡鍊?nbsp; 浼犺涓殑琛錛屼腑鍥藉彜浠h鑹叉壆婕旀父鎴忛噷澶у灝嗗畠縐頒負(fù)“綺?#8221;銆?br /> 鏌ュ厠鎷?nbsp; 涓浗鍙や唬娓告垙涓墍璋撶殑鍐呭姏錛屽皬鏃跺欐櫤鍔涘崱娓告垙涓殑MP錛屽喅瀹氫綘榪涜鏀誨嚮鏃跺欏悓鏃墮噴鏀劇殑姝﹀櫒鏁扮洰銆?br /> 鐏甸瓊 姣忔鐢熷懡鍊艱揪鍒拌礋鍊肩殑鏃跺欏彲浠ラ氳繃閲婃斁涓涓伒欖傛潵灝嗚琛ユ弧銆?nbsp; 銆愯仈緋諱綔鑰呫?/p>
鍗氬:www.shnenglu.com/menjitianya 閭:menjitianya2007@163.com QQ:277055227 鍛ㄥぉ娑?錛堣嫳闆勫摢閲屽嚭鏉ワ級(jí)
銆愮増鏈俊鎭?br /> v1.00
銆愭父鎴忕畝浠嬨?/p>
鏀誨嚮鍔?nbsp; 涓昏鑷韓鏀誨嚮鍔涘拰褰撳墠姝﹀櫒鏀誨嚮鍔涚殑鎬誨拰錛屽獎(jiǎng)鍝嶅鏁屼漢鐨勪激瀹沖箋?br /> 闃插盡鍔?nbsp; 涓昏鐨勮嚜韜槻寰★紝褰卞搷涓昏鍙楀埌鏀誨嚮鏃剁殑浼ゅ鍊箋?br /> 閫熷害 鍐沖畾涓昏鐨勭Щ鍔ㄩ熷害鍜岄棯閬跨巼銆?br /> 蹇呮潃鎶 鍙互浣滅敤浜庢暣涓父鎴忎笘鐣岀殑鏃犳晫蹇呮潃鎶錛屽彲浠ョ悊瑙d負(fù)“澶ф嫑”銆?br /> 寰楀垎 姣忔墦鍒版晫浜轟竴嬈″彲璁頒竴鍒嗭紝鎵撴鏁屼漢璁頒笁鍒嗐傚綋寰楀垎縐弧2000鐨勬椂鍊欏彲浠ユ崲璧庝竴涓伒欖傘?br />
銆愭父鎴忔搷浣溿?br /> 鏂瑰悜閿?nbsp; 鎺у埗浜虹墿琛岃蛋
宸trl閿?nbsp; 鍙戝皠瀛愬脊 + 紜鎿嶄綔
絀烘牸閿?nbsp; 閲婃斁澶ф嫑錛堝繀鏉鎶錛?br />
銆愬嚑鐐硅鏄庛?br /> 鏈父鎴忛儴鍒嗚祫婧愬彇鑷綉緇滐紝閮ㄥ垎鐢變綔鑰呭師鍒涳紝鎵浠ヨ鍕垮皢鍏剁敤浜庡晢涓氱敤閫旓紝鍚﹀垯鍚庢灉鑷礋銆?br />
銆愯瘯鐜╅摼鎺ャ?br />http://code.google.com/p/sguzty/downloads/list
銆愰儴鍒嗘埅鍥俱?br />
]]>
]]>
鍒濆涔嶇粌
Pygame涓櫎浜?/span>Group榪欎釜Sprite鐨勫鍣ㄧ被錛岃繕鏈変竴浜涚戶鎵胯嚜Group鐨勫鍣ㄧ被錛屽畠浠垎鍒槸RenderUpdates銆?/span>OrderedUpdates銆?/span>LayeredUpdates銆?/span>LayeredDirty銆?/span>
pygame.sprite.RenderUpdates緇ф壙鑷?/span>pygame.sprite.Group錛屽畠鐩稿浜?/span>Group鐨勪笉鍚岀偣灝辨槸閲嶅啓浜?/span>Group鐨?/span>draw鍑芥暟錛屽師鍨嬫槸錛?/span>RenderUpdates.draw(surface) : return Rect_list瀹冨皢鎵鏈夊畠鍖呭惈鐨?/span>Sprites緇樺埗鍒?/span>surface涓婏紝鍜?/span>Group.draw涓鏍楓備絾鏄繖涓嚱鏁拌繑鍥炰簡(jiǎn)涓緋誨垪鐨勫睆騫曚笂鍙戠敓鏀瑰彉鐨勭煩褰㈠垪琛紝榪欎釜鐭╁艦鍒楄〃搴旇琚紶閫掑埌pygame.display.update涓幓銆?/span>
pygame.sprite.OrderedUpdates緇ф壙鑷?/span>pygame.sprite.RenderUpdates錛屽畠緇樺埗Sprite鐨勬椂鍊欐槸浠?/span>Sprite琚坊鍔犳椂鐨勯『搴忔潵緇樺埗鐨勩?/span>
pygame.sprite. LayeredUpdates緇樺埗鐨勬柟寮忓拰pygame.sprite.OrderedUpdates綾諱技錛屽彧鏄畠寮曞叆浜?jiǎn)鍥惧眰鐨勬蹇点備綘鍙互閫氳繃'default_layer'璁劇疆榛樿鍥懼眰錛屾垨鑰呬竴涓暣鏁版潵琛ㄧず鍥懼眰銆傚鏋滄坊鍔犵殑Sprite鑷繁鏈変竴涓?/span>layer鐨勫浘灞傚睘鎬ч偅涔堝氨鏄敤榪欎釜錛屽惁鍒欏湪娣誨姞Sprite鐨勬椂鍊欙紝鍦?/span>pygame.sprite. LayeredUpdates(*sprites, **kwarges)涓殑**kwarges鍙傛暟涓layer灞炴ц繘琛岃緗紝濡傛灉涓よ呴兘娌℃湁璁劇疆錛岄偅涔堢郴緇熷皢閲囩敤榛樿鍥懼眰銆?/span>
pygame.sprite. LayeredDirty緇ф壙鑷?/span>pygame.sprite.LayeredUpdates錛屽畠鏄?/span>DirtySprites鐨勪笓鐢ㄥ鍣ㄧ被錛岀戶鎵夸簡(jiǎn)Group鐨勬墍鏈夋搷浣溿?/span>
鍥犱負(fù)鎴戜滑闇瑕佺敤鍒?/span>DirtySprite錛屾墍浠ヤ箣鍓嶆垜浠敤鍒扮殑鎵鏈?/span>Group綾婚兘鏇挎崲鎴?/span>LayeredDirty錛岃屼笖涓轟簡(jiǎn)渚夸簬鎵╁睍錛屾垜浠皢LayeredDirty鍐嶅皝瑁呬竴灞傦紝浠ヤ究娣誨姞鏂扮殑鎴愬憳鍑芥暟銆?/span>
class gameManager(pygame.sprite.LayeredDirty) :
def __init__(self, selfdata) :
pygame.sprite.LayeredDirty.__init__(self)
def keyevent(self, keypressed) :
for son in self.sprites() :
son.keyevent(keypressed)
瀹氫箟涓涓?/span>gameManager綾伙紝瀹冪戶鎵夸簡(jiǎn)pygame.sprite.LayeredDirty錛屽茍涓旀坊鍔犱竴涓?/span>keyevent鐨勬垚鍛樺嚱鏁幫紝鐢ㄤ簬瀵歸敭鐩樹(shù)簨浠惰繘琛屽鐞嗭紝瀹冪殑鎿嶄綔寰堢畝鍗曪紝璋冪敤瀹冨鍣ㄩ噷鐨勫厓绱犵殑keyevent鍑芥暟錛屽畠瀹瑰櫒閲岀殑鍏冪礌鏈夊彲鑳芥槸鍙︿竴涓?/span>gameManager銆佹垨鑰呮槸涓涓崟綰殑RenderObject銆傚鏋滄槸gameManager鐨勮瘽灝變細(xì)榪涜閫掑綊璋冪敤錛岀洿鍒版槸RenderObject錛屾墍浠ユ垜浠繕瑕佺粰RenderObject瀹氫箟涓涓?/span>keyevent鍑芥暟錛屽儚榪欐牱錛?/span>
class RenderObject(pygame.sprite.DirtySprite) :
… …
def keyevent(self, keypressed) :
pass
鎴戜滑鎶?/span>keyevent瀹氫箟鍦ㄥ熀綾?/span>RenderObject涓紝騫朵笖鐢?/span>pass琛ㄧず瀹冧粈涔堥兘涓嶅仛錛岀劧鍚庣瓑鐫瀛愮被鍘誨疄鐜板畠銆?/span>
class Player(RenderObject) :
… …
def keyevent(self, keypressed) :
left_or_right = keypressed[K_RIGHT] - keypressed[K_LEFT]
up_or_down = keypressed[K_DOWN] - keypressed[K_UP]
self.move(left_or_right, up_or_down)
Player鏄?/span>RenderObject鐨勪竴涓瓙綾伙紝鎴戜滑鍙互鐢ㄤ互涓婄殑璇彞瀹炵幇Player鐨勮璧幫紝keypressed鍏跺疄鏄?/span>pygame.key.get_pressed()錛岀敤浜庤幏鍙栧綋鍓嶉敭鐩樼殑鏌愪釜閿槸鍚︽寜涓嬬殑鏄犲皠琛ㄣ?/span>
鎺ヤ笅鏉ユ垜浠敤涔嬪墠鐨勬ā鍧楁潵鍐欎竴涓父鎴忕殑鑳屾櫙錛屽埄鐢ㄥ浘4-1鐨勮祫婧愭嫾鎺ュ嚭鍥?/span>4-2鐨勫浘鍍忥紝騫朵笖璁╁畠鍦ㄥ睆騫?/span>Y杞存柟鍚戣繘琛屾粴灞忔搷浣溿?/span>
鍥?/span> 4-1
鍥?/span> 4-2
棣栧厛瑕佹槑紜殑涓鐐瑰氨鏄浘鐗囩殑鍥涗釜鏂瑰悜蹇呴』鏄彲鎷兼帴鐨勶紝涔熷氨鏄鐢?/span>9寮犵浉鍚岀殑鍥劇墖鎷兼垚涓涓節(jié)瀹牸錛岀敤鑲夌溂鏄垎杈ㄤ笉鍑哄畠浠槸涔?jié)寮犲泟囩殑锛岀湅鍒扮殑鏄竴涓畬鏁寸殑鍥懼儚銆?/span>
鎴戜滑瀹氫箟涓涓?/span>RenderBack綾伙細(xì)
class RenderBack(RenderObject) :
def __init__(self, selfdata) :
RenderObject.__init__(self, selfdata)
do_init()
def update(self) :
RenderObject.update(self)
do_update()
棣栧厛紜畾鍋氳繖涔堜竴涓儗鏅渶瑕佺敤鍒扮殑鏁版嵁錛岃儗鏅殑瀹介珮鏄偗瀹氳鐨勶紝鑰屼笖瑕佹眰瀹冨湪Y鏂瑰悜鍋氭粴灞忔搷浣滐紝鎵浠ヨ繖涓儗鏅殑瀹為檯鐨勯珮鑲畾瑕佹瘮灞忓箷涓婃樉紺洪珮榪樿闀匡紙鎴戜滑鍋囪浠栨槸鍥?/span>4-1鍥劇墖楂樼殑鏁存暟鍊嶏級(jí)錛岄偅涔堟垜浠敤涓涓洓鍏冪粍(x, y, z, w)鏉ヨ〃紺洪渶瑕佺煡閬撶殑鏁版嵁錛?/span>
x : 鑳屾櫙鍥捐祫婧愬湪images[]鐨勭儲(chǔ)寮曞彿
y : 鐢熸垚鍥劇殑瀹?/span>
z : 鐢熸垚鍥劇殑楂?/span>
w: 鐢熸垚鍥懼湪绔栫洿鏂瑰悜鐨勫師鍥懼浘鍧楃殑鏁伴噺
榪欎釜鍥涘厓緇勬槸浣滀負(fù)selfdata琚紶鍒?/span>__init__鍑芥暟涓繘琛屽垵濮嬪寲鐨勶紝騫朵笖鍙互鍦ㄩ厤緗枃浠朵腑淇敼瀹冪殑鍊箋?/span>
鍥犱負(fù)鏈鍚庣殑鍥懼儚瑕佽繘琛?/span>Y鏂瑰悜鐨勬粴灞忔搷浣滐紝鎵浠ユ垜浠繕闇瑕佸畾涔変竴涓?/span>Y鏂瑰悜鐨勫亸縐婚噺錛屼互渚挎瘡嬈$粯鍒剁殑鏃跺欒繘琛屽亸縐繪搷浣溿傝繖鏍峰垵濮嬪寲灝卞彲浠ヨ繖涔堝啓錛?/span>
self.image = pygame.Surface( (int(selfdata[1]), int(selfdata[2])) )
self.rect = self.image.get_rect()
self.source_rect = self.image.get_rect()
self.backlen = int(selfdata[3])
self.backimage = RenderObject( [ selfdata[0] ] )
self.top_offset = self.backimage.image.get_height() * self.backlen - self.rect.height
榪欓噷闇瑕佹敞鎰忕殑鏄紝LayeredDirty鍦ㄥDirtySprite榪涜緇樺埗鐨勬椂鍊欐繪槸瀵?/span>sprite.image鐨勫唴瀹硅繘琛岀粯鍒剁殑錛屾墍浠ュ湪RenderBack閲屾垜浠渶瑕侀澶栧畾涔変竴涓?/span>backimage鏉ュ鍘熷浘榪涜緙撳瓨錛岀劧鍚庨氳繃寰幆灝嗗畠blit鍒?/span>image涓娿傝繖鏍?/span>RenderBack鐨勬嫢鏈夎呮墠鑳芥壘鍒?/span>image灝嗗畠緇樺埗鍑烘潵銆?/span>
瀵逛簬update鍑芥暟錛屾瘡涓甯ф垜浠渶瑕佹洿鏂?/span>self.top_offset榪欎釜Y鏂瑰悜鐨勫亸縐婚噺錛屽茍涓旀牴鎹畠鏇存柊image鍥懼儚銆傚叿浣撳疄鐜板涓嬶細(xì)
def update(self) :
RenderObject.update(self)
xstep = self.backimage.image.get_width()
ystep = self.backimage.image.get_height()
self.top_offset -= 3
y_offset = self.top_offset % ystep
for x in range(0, self.rect.width + xstep, xstep) :
self.image.blit( self.backimage.image, (x, 0), ((0, y_offset), (xstep, ystep - y_offset) ) )
for y in range(ystep - y_offset, self.rect.height + ystep, ystep) :
for x in range(0, self.rect.width + xstep, xstep) :
self.image.blit( self.backimage.image, (x, y), ((0,0), (xstep, ystep) ) )
(xstep, ystep)鏄師鍥劇殑灝哄錛屾瘡涓甯ф垜浠self.top_offset榪涜鑷噺鎿嶄綔錛堟晥鏋滃氨鏄鏈鍚庣殑鍥懼儚鏈変竴縐嶅悜涓婂歡浼哥殑鎰熻錛屼篃灝辨槸婊氬睆鐨勬晥鏋滐級(jí)銆?/span>
鐒跺悗鎴戜滑鍒?/span>x鏂瑰悜鍜?/span>y鏂瑰悜榪涜璁ㄨ錛屽洜涓?/span>x鏂瑰悜娌℃湁婊氬睆鎿嶄綔錛屾墍浠ュ彧瑕佺敤鐜版湁鐨勫浘鐗囧~鍏呮暣涓搴﹀嵆鍙紝姣斿鍘熷浘鏄?/span>W=100涓儚绱狅紝闇瑕佸~鍏呯殑鑳屾櫙鏄?/span>D=250涓儚绱狅紝閭d箞姘村鉤鏂瑰悜鑷沖皯闇瑕佺敤鍒?/span>[ (D + W – 1) / W ] = 3寮犲師鍥撅紙[x]琛ㄧず姣?/span>x灝忕殑鏈澶ф暣鏁幫紝鍗沖彇涓嬫暣錛夈傚浜庣珫鐩存柟鍚戯紝鍥犱負(fù)鏈夋粴灞忔搷浣滐紝鎵浠ユ湁涓ら儴鍒嗙粍鎴愶細(xì)絎竴鎺掞紙浠庡師鍥劇殑y鏂瑰悜鏌愪釜浣嶇疆綺樿創(chuàng)榪囨潵鐨勶級(jí)浠ュ強(qiáng)闈炵涓鎺掞紙鎬繪槸綺樿創(chuàng)鍘熷浘錛夈傚皢self.top_offset 瀵?/span> ystep 鍙栨ā錛屽緱鍒扮殑鏄渶瑕佺粯鍒跺浘鍍忕殑鏈涓婃柟鍦ㄥ師鍥劇殑鍋忕Щ閲忥紝閫氳繃瀹冨彲浠ョ粯鍒剁涓鎺掞紝鐒跺悗鍐嶈皟鐢ㄤ袱灞?/span>for寰幆緇樺埗鍚庨潰鍑犳帓銆傝繖鏍烽殢鐫鏃墮棿鐨勬帹縐伙紝涓涓?/span>Y鏂瑰悜鐨勬粴灞忔晥鏋滃氨鍑烘潵浜?jiǎn)銆傦紙鏈畬寰呯畫錛?/span>