解決Pygame精靈會跳但不會走的問題
問題背景:
在 Pygame 中,建立了一個可以跳躍但是無法正常移動的精靈物件,移動時只能移動幾個畫素,希望解決這個問題,以便精靈物件能夠正常行走。
解決方案:
1、問題分析:
問題主要在於精靈物件的移動速度設定不當,導致精靈物件只能移動幾個畫素。
2、修復程式碼:
class Player(pygame.sprite.Sprite):
def __init__(self, *groups):
super(Player, self).__init__(groups)
self.image = pygame.image.load('Images\player1.png')
self.rect = pygame.rect.Rect((50, 650), self.image.get_size())
self.resting = False
self.dy = 0 #dy represents change in y velocity
def update(self, dt, game):
last = self.rect.copy()
key = pygame.key.get_pressed()
if key[pygame.K_LEFT]:
# Increase the move speed to allow the sprite to move smoothly
self.rect.x -= 500 * dt
if key[pygame.K_RIGHT]:
self.rect.x += 500 * dt
#if key[pygame.K_UP]:
# self.rect.y -= 300 * dt
#if key[pygame.K_DOWN]:
# self.rect.y += 300 * dt
if self.resting and key[pygame.K_SPACE]:
self.dy = -500 #If space bar is pressed, increase velocity.
self.dy = min(400, self.dy + 40) #Speed capped at 400. Gravity set at 40.
self.rect.y += self.dy * dt
new = self.rect
self.resting = False
for cell in pygame.sprite.spritecollide(self, game.walls, False):
#self.rect = last
cell = cell.rect
if last.right <= cell.left and new.right > cell.left:
new.right = cell.left
if last.left >= cell.right and new.left < cell.right:
new.left = cell.right
if last.bottom <= cell.top and new.bottom > cell.top:
#if you hit something while jumping, stop.
self.resting = True
new.bottom = cell.top
self.dy = 0
if last.top >= cell.bottom and new.top < cell.bottom:
new.top = cell.bottom
self.dy = 0 #If you hit the floor while jumping, stop
# Increase the speed of the sprite movement
move_speed = 500
# Modify the update method to update the position of the sprite based on the input
def update(self, dt, game):
key = pygame.key.get_pressed()
if key[pygame.K_LEFT]:
self.rect.x -= move_speed * dt
if key[pygame.K_RIGHT]:
self.rect.x += move_speed * dt
3、解釋:
-
class Player
: 定義了一個精靈類Player
,它繼承自pygame.sprite.Sprite
。 -
__init__(self, *groups)
:Player
的建構函式,初始化精靈物件。 -
update(self, dt, game)
:Player
的更新方法,根據輸入更新精靈物件的位置。-
dt
: 時間增量。 -
game
: 遊戲物件。
-
-
move_speed
: 定義了精靈物件的移動速度。 -
key
: 獲取當前按下的按鍵。 -
if key[pygame.K_LEFT]
: 如果按下左鍵,將精靈物件向左移動。 -
if key[pygame.K_RIGHT]
: 如果按下右鍵,將精靈物件向右移動。
透過調整
move_speed
的值,可以控制精靈物件的移動速度。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3006527/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決超過會話數問題會話
- 解決Oracle序列跳號問題Oracle
- 英語會話精靈 V2.0會話
- 英語會話精靈V1.0會話
- 解決手機連上WIFI但不能上網的問題WiFi
- Go GC:Go 1.5 將會解決延遲問題GoGC
- 簡單介紹Pygame 精準檢測影像碰撞的問題GAM
- 美國推行社會專案,利用AI解決流浪漢等社會問題AI
- javascript 的問題 ,不知你會不會。JavaScript
- 能源驅動的 AI 將會被用來解決能源問題AI
- Java NPOI 讀取Excel 跳列 問題解決JavaExcel
- 解決jequry使用keydown無法跳轉的問題
- Redis作為快取可能會出現的問題及解決方案Redis快取
- 安裝 laraBBS 原始碼包可能會碰到的問題及解決方法原始碼
- 圖靈社群MongoDB專題交流會圖靈MongoDB
- 面試可能會遇到的各種問題講解面試
- 在防護DDoS時會遇到哪些問題,該怎樣解決?
- Java 經典程式設計題 (更新有延遲,但不會缺席)Java程式設計
- “default”標籤跳過“ ”的初始化操作----問題解決
- 馬雲:阿里是一家解決社會問題的公司 要創造一個億的就業機會阿里就業
- 記圖靈社群MongoDB專題交流會圖靈MongoDB
- AIX網路一會通一會不通的問題AI
- 解決「問題」,不要解決問題
- vue前後端分離解決每次請求session都會變的問題Vue後端Session
- [解決問題] Vagrant nginx 站點配置問題(ThinkPHP HTML 無法調跳轉)NginxPHPHTML
- 知道策略模式!但不會在專案裡使用?模式
- 圖靈社群“持續交付”專題交流會圖靈
- 27道Redis精選面試題,你會做幾題?Redis面試題
- ACM 會場安排問題ACM
- 聊聊設計師面試會問的問題面試
- 解決 PBootCMS 網站出現的“會話目錄寫入許可權不足”的問題boot網站會話
- 圖靈社群技術專題交流會第一彈——MongoDB專題交流會綜述圖靈MongoDB
- 無線路由器撥號過程中可能會遇到的問題以及解決方法路由器
- 應用TRIZ理論解決AGV產品靈活性差的問題
- 報表為什麼會沒完沒了?怎麼解決這個問題?
- C# Thread.Sleep 不精準的問題以及解決方案C#thread
- 淺談精益生產與其他問題解決方法的區別
- python requests 怎麼解決 url 中../ 自動跳目錄的問題?Python