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

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

Pygame 不允許我將 float 用于 rect.move,但我需要它

Pygame 不允許我將 float 用于 rect.move,但我需要它

互換的青春 2023-06-06 10:26:33
我最近在 Python 3 和 Pygame 中重新創(chuàng)建了一個(gè)版本的Lunar Lander(你知道,舊的復(fù)古游戲):rect.move由于重力,我的著陸器沿 y 軸移動(dòng) (???) 每一幀。\問題:在我達(dá)到 1 m/s 之前,添加到 rect.move 的 y 值是一個(gè)小于 1 的浮點(diǎn)數(shù):我必須使用int()它來向上舍入,因?yàn)?pygame 不喜歡浮點(diǎn)數(shù)。在以前的 Tkinter 版本中,著陸器的 y 坐標(biāo)是這樣的:0.010.02...0.7651.031.45...在pygame中它是000...11122...這真的很煩人,因?yàn)檫\(yùn)動(dòng)不流暢。有人知道如何解決這個(gè)問題嗎?比如,輸入一個(gè)浮點(diǎn)數(shù)到rect.move?提前致謝!
查看完整描述

1 回答

?
長風(fēng)秋雁

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

由于pygame.Rect應(yīng)該代表屏幕上的一個(gè)區(qū)域,一個(gè)pygame.Rect對象只能存儲整數(shù)數(shù)據(jù):

Rect 對象的坐標(biāo)都是整數(shù)。[...]

如果要以浮點(diǎn)精度存儲對象位置,則必須將對象的位置分別存儲在單獨(dú)的變量和屬性中,并同步對象pygame.Rect。round坐標(biāo)并將其分配給.topleft矩形的位置(例如):

x,?y?=?#?floating?point?coordinates
rect.topleft?=?round(x),?round(y)

因此(x, y)是準(zhǔn)確的位置并且(rect.x, rect.y)包含最接近該位置的整數(shù)。

請參見以下示例。紅色物體是通過直接改變物體的位置來移動(dòng)的pygame.Rect,而綠色物體的位置存儲在單獨(dú)的屬性中,移動(dòng)是用浮點(diǎn)精度計(jì)算的。你可以清楚地看到紅色物體在方向和速度方面的不準(zhǔn)確:

import pygame


class RedObject(pygame.sprite.Sprite):

? ? def __init__(self, p, t):

? ? ? ? super().__init__()

? ? ? ? self.image = pygame.Surface((20, 20), pygame.SRCALPHA)

? ? ? ? pygame.draw.circle(self.image, "red", (10, 10), 10)

? ? ? ? self.rect = self.image.get_rect(center = p)

? ? ? ? self.move = (pygame.math.Vector2(t) - p).normalize()

? ? def update(self, window_rect):

? ? ? ? self.rect.centerx += self.move.x * 2

? ? ? ? self.rect.centery += self.move.y * 2

? ? ? ? if not window_rect.colliderect(self.rect):

? ? ? ? ? ? self.kill()


class GreenObject(pygame.sprite.Sprite):

? ? def __init__(self, p, t):

? ? ? ? super().__init__()

? ? ? ? self.image = pygame.Surface((20, 20), pygame.SRCALPHA)

? ? ? ? pygame.draw.circle(self.image, "green", (10, 10), 10)

? ? ? ? self.rect = self.image.get_rect(center = p)

? ? ? ? self.pos = pygame.math.Vector2(self.rect.center)

? ? ? ? self.move = (pygame.math.Vector2(t) - p).normalize()

? ? def update(self, window_rect):

? ? ? ? self.pos += self.move * 2

? ? ? ? self.rect.center = round(self.pos.x), round(self.pos.y)

? ? ? ? if not window_rect.colliderect(self.rect):

? ? ? ? ? ? self.kill()


pygame.init()

window = pygame.display.set_mode((400, 400))

clock = pygame.time.Clock()


start_pos = (200, 200)

all_sprites = pygame.sprite.Group()


run = True

while run:

? ? clock.tick(100)

? ? for event in pygame.event.get():

? ? ? ? if event.type == pygame.QUIT:

? ? ? ? ? ? run = False

? ? ? ? if event.type == pygame.MOUSEBUTTONDOWN:

? ? ? ? ? ? all_sprites.add(RedObject(start_pos, event.pos))

? ? ? ? ? ? all_sprites.add(GreenObject(start_pos, event.pos))


? ? all_sprites.update(window.get_rect())


? ? window.fill(0)

? ? all_sprites.draw(window)

? ? pygame.draw.circle(window, "white", start_pos, 10)

? ? pygame.draw.line(window, "white", start_pos, pygame.mouse.get_pos())

? ? pygame.display.flip()


pygame.quit()

exit()


查看完整回答
反對 回復(fù) 2023-06-06
  • 1 回答
  • 0 關(guān)注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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