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

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

有沒有辦法在 python 中生成不同的對(duì)象實(shí)例?

有沒有辦法在 python 中生成不同的對(duì)象實(shí)例?

Smart貓小萌 2022-03-09 20:50:08
我正在用 python 制作游戲(使用街機(jī)庫(kù))。我做了一個(gè)“武器”類,我可以在其中制作不同的武器實(shí)例(具有不同的精靈、傷害統(tǒng)計(jì)等)。我想要它,所以當(dāng)某個(gè)變量為真時(shí),槍會(huì)創(chuàng)建一個(gè)類的新實(shí)例(子彈),但我不想將每個(gè)實(shí)例分配給一個(gè)新變量等。有沒有辦法做到這一點(diǎn)?并且請(qǐng)不要太復(fù)雜,因?yàn)槲以?Python 方面還沒有走得太遠(yuǎn)。class Weapon(object):    def __init__(self, sprite, size):        self.weapon = arcade.Sprite(sprite,size)        self.attacking = True    def draw(self):        self.weapon.draw()        if self.attacking:            # Creates an instance of Bullet Class with initialized variables            # Every single time this variable is turned into True
查看完整描述

2 回答

?
陪伴而非守候

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

我不會(huì)那樣做,我會(huì)創(chuàng)建一個(gè)包含 draw() 邏輯的 Sprite 類,其中一個(gè) Player 和一個(gè) Weapon 類將繼承玩家將包含武器并在包含你所有的 Game 類中實(shí)例化邏輯


class Sprite:

    def draw(self):

        # Draw logic, maybe have an image sprite member variable


class Bullet(Sprite):

    def __init__(self, posX, posY, angle, velocity, game):

        self.posX = posX

        self.posY = posY

        self.angle = angle

        self.velocity = velocity

        self.game = game

        self.game.bullets.append(self)


    def fly(self):

         # Add some trigonometry here using the angle and velocity and implement some collision algorithm


class Weapon(Sprite):

    posX = 0

    posY = 0 #Probably gonna need to keep track of the position, you should init them in constructor

    angle = PI

    bullets = []


    def shoot(self):

        if len(self.bullets) <= 10: # maybe you don't want too many bullets

            self.bullets.append(Bullet(self.posX, self.posY, self.angle, 100))


class Player(Sprite):

    posX = 0

    posY = 0

    def __init__(self, game):

        self.game = game

        self.weapon = Weapon()


    def shoot(self):

        self.weapon.shoot()


class Game:

    players = []

    bullets = []


    def __init__(self, player_count=1):

        for i in range(player_count):

            self.players.append(Player(self))


    def draw(self):

        for player in self.players:

            player.draw()

        for bullet in self.bullets:

            bullet.fly()



def main():

    game = Game(1)

    game.start() # need to implement start logic, rerendering every few MS, etc.


if __name__ == "__main__":

    main()


查看完整回答
反對(duì) 回復(fù) 2022-03-09
?
慕村9548890

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

您可以為此使用設(shè)置器


class Weapon(object):

    ...


    @property

    def attacking(self):

        return self._attacking


    @attacking.setter

    def attacking(self, value):

        if value and not self._attacking:

            # logic for when attacking become true

        self._attacking = value


然后,當(dāng)您somewep.attacking = True對(duì)代碼的其他部分執(zhí)行操作時(shí),setter 將運(yùn)行。關(guān)于保存 Bullet 實(shí)例。如果實(shí)例化Bullet具有它需要的所有副作用,那么你不需要保存它,Bullet(parameters, ...)你會(huì)沒事的。


如果Bullet框架正在繪制,那么它有一個(gè)對(duì)它的引用,只要框架引用它,GC就不應(yīng)該收集它


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

添加回答

舉報(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)