第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何對(duì)沖突進(jìn)行編程

如何對(duì)沖突進(jìn)行編程

郎朗坤 2022-09-13 17:45:35
我想編寫(xiě)沖突代碼。我有2個(gè)類,如果它們碰撞其中一個(gè)應(yīng)該取消繪制1秒#Laden der Pygame Bibliothekimport pygameimport timeimport random#Initialisierung der Pygame Bibliothekpygame.init()# Spiel-Fenster erstellensize = [700, 500]screen = pygame.display.set_mode(size)screen.fill((255,255,255))# Noetig um die fps zu begrenzenclock = pygame.time.Clock()# Speichert ob das Spiel-Fenster geschlossen wurdedone = False生成只能向左和向右移動(dòng)的對(duì)象的第一個(gè)類class Schlitten():    def __init__(self, px, py, pscreen):        self.FARBE1 = (139,87,66)        self.FARBE2 = (139,90,43)        self.braun = (104,73,71)        self.x = px        self.grau = (118,122,121)        self.y = py        self.red = (255,0,0)        self.screen = pscreen        self.hit = False        def draw(self):        if self.hit == False:            pygame.draw.rect(self.screen, self.FARBE2, [self.x,self.y,5,75])            pygame.draw.rect(self.screen, self.FARBE2, [self.x+29,self.y,5,75])            pygame.draw.rect(self.screen, self.braun, [self.x+5,self.y+20,24,3])            pygame.draw.rect(self.screen, self.braun, [self.x+5,self.y+55,24,3])            pygame.draw.rect(self.screen, self.FARBE1, [self.x+6,self.y+15,3,50])            pygame.draw.rect(self.screen, self.FARBE1, [self.x+12,self.y+15,3,50])            pygame.draw.rect(self.screen, self.FARBE1, [self.x+18,self.y+15,3,50])            pygame.draw.rect(self.screen, self.FARBE1, [self.x+24,self.y+15,3,50])            pygame.draw.rect(self.screen, self.grau, [self.x+5,self.y+10,24,2])    def kollision(self):        self.hit = True    def movemint(self):        keys = pygame.key.get_pressed()        if keys [pygame.K_LEFT] :            self.x -= 4        if keys [pygame.K_RIGHT] :            self.x += 4        if self.x < 0:            self.x += 4        if self.x > 665:            self.x -= 4    def left(self):        return self.x    def right(self):        return self.x+34    def up(self):        return self.y    def down(self):        return self.y+75
查看完整描述

1 回答

?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

好的,首先是對(duì)這些問(wèn)題的標(biāo)準(zhǔn)回答:如果你使用PyGame Sprite函數(shù),在最初做一些額外的工作之后,你的程序?qū)⒏菀拙帉?xiě)和維護(hù)。


要在任意對(duì)象上進(jìn)行良好的碰撞,首先需要一個(gè)“邊界框”。這是一個(gè)圍繞您的對(duì)象的矩形。


查看施利滕/雪橇的代碼,我必須從各種繪圖坐標(biāo)中計(jì)算出這一點(diǎn)(但我只是在做一個(gè)快速/粗略的工作)。它看起來(lái)像從 和 渲染擴(kuò)展了另外 31 像素和 75 像素在 .您可能希望臨時(shí)添加一些代碼來(lái)繪制邊界框以進(jìn)行檢查。Schlitten.xSchlitten.yxy


因此,要定義碰撞函數(shù),我們需要一個(gè) PyGame 矩形。


class Schlitten:

    def __init__( self ):

        self.x      = px

        self.y      = py        

        self.width  = 31

        self.height = 75

        self.rect   = pygame.Rect( px, py, self.width, self.height )

從代碼中可以看出,PyGame 矩形只需要坐標(biāo)。需要隨著對(duì)象的移動(dòng)而更新,但我們可以在碰撞測(cè)試之前執(zhí)行此操作。我們添加了,因此我們的代碼不會(huì)到處都是無(wú)意義的數(shù)字。此外,如果雪橇的繪圖發(fā)生變化,則只需在一個(gè)地方調(diào)整這些數(shù)字。.rectself.widthself.height


無(wú)論如何,現(xiàn)在對(duì)于碰撞函數(shù):


class Schlitten:

    ...


    def collideWith( self, other_rect ):

        """ Has the sleigh collided with the other object """

        self.rect.x = self.x              # update the rect position 

        self.rect.y = self.y

        collision   = self.rect.colliderect( other_rect )

        return collision

對(duì)類進(jìn)行類似的更改 - 至少到代碼具有 .Baumbaum.rect


class Baum():

    def __init__( self, pos_x, pos_y, pscreen, pschlitten ):

        self.x      = pos_x

        self.y      = pos_y

        self.width  = 50

        self.height = 95

        self.rect   = pygame.Rect( pos_x, pos_y, self.width, self.height )


    def bewegung( self ):

        self.y      += 5

        self.rect.y += 5


    def spawn( self ):

        if self.y > 600:

            self.y      = -50

            self.x      = random.randrange(0,700)

            self.rect.x = x

            self.rect.y = y

然后,這允許代碼快速輕松地檢查沖突:


alles_baumen = [ Baum1, Baum2, Baum3 ]    # all tree objects


# main loop

while not exiting:

    ...


    for baum in alles_baumen:                       # for each tree

        baum.draw()

        baum.bewegung()

        baum.spawn()

        if ( speiler1.collideWith( baum.rect ) ):   # player hits tree?

            speiler1.kollision()                    # Oh-noes!

注: 樹(shù)繪圖功能將繪制樹(shù),就好像坐標(biāo)是左下角一樣。我所做的更改沒(méi)有考慮到這一點(diǎn),因此要么更改繪圖代碼,要么更改 的位置以適應(yīng)此負(fù) y 布局。yBaum.rect


查看完整回答
反對(duì) 回復(fù) 2022-09-13
  • 1 回答
  • 0 關(guān)注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)