Trong sự kiện lệnh trò chuyện, dịch chuyển người chơi đến vị trí cao hơn vị trí hiện tại 100
khối
def on_chat[]:
# @highlight
player.teleport[pos[0, 100, 0]]
player.on_chat["jump", on_chat]
Bước 3. Sử dụng lệnh gạch chéo của bạn
Vào Minecraft gõ t để mở chat rồi nhập jump
Bước 4. Thêm một tham số vào lệnh gạch chéo
Thêm một biến tham số vào lệnh trò chuyện. Sử dụng tên biến num1
cho tham số. Điều này sẽ thêm một tham số số vào lệnh
# @highlight
def on_chat[num1]:
player.teleport[pos[0, 100, 0]]
player.on_chat["jump", on_chat]
Bước 5. Nhảy số lượng do người dùng nhập
Thay vì một số 100
ở vị trí dịch chuyển tức thời, hãy sử dụng tham số num1
để bạn sẽ nhảy theo số lượng do người chơi nhập
def on_chat[num1]:
# @highlight
player.teleport[pos[0, num1, 0]]
player.on_chat["jump", on_chat]
Bước 6. Sử dụng lệnh gạch chéo của bạn
Truy cập Minecraft và nhập bước nhảy 50 trong cuộc trò chuyện. Bạn nên nhảy 50 khối thay vì 100. Hãy thử nhảy 1000…
Trong bài viết này, bạn sẽ học cách triển khai logic nhảy và chạy trong Pygame. Để làm như vậy, chúng tôi sẽ triển khai logic trình phát
Bạn có thể thích
Tạo Kẻ xâm lược không gian bằng Python
Di chuyển
Di chuyển sang trái và phải tương tự như hướng dẫn trước và chỉ đơn giản là thay đổi vị trí [x,y] của người chơi. Để nhảy, chúng tôi sử dụng một công thức từ cơ học cổ điển.
F = 1/2 * m * v^2
Trong đó F là lực lên/xuống, m là khối lượng của vật và v là vận tốc. Vận tốc giảm dần theo thời gian vì khi người chơi nhảy, vận tốc sẽ không tăng nhiều hơn trong mô phỏng này. Nếu người chơi chạm đất, bước nhảy kết thúc. Trong Python, chúng tôi đặt một biến isjump để cho biết người chơi có nhảy hay không. Nếu là người chơi thì vị trí của người đó sẽ được cập nhật theo công thức trên
Mã đầy đủ
from pygame.locals import *
import pygame
import math
from time import sleep
class Player:
x = 10
y = 500
speed = 10
# Stores if player is jumping or not.
isjump = 0
# Force [v] up and mass m.
v = 8
m = 2
def moveRight[self]:
self.x = self.x + self.speed
def moveLeft[self]:
self.x = self.x - self.speed
def jump[self]:
self.isjump = 1
def update[self]:
if self.isjump:
# Calculate force [F]. F = 0.5 * mass * velocity^2.
if self.v > 0:
F = [ 0.5 * self.m * [self.v*self.v] ]
else:
F = -[ 0.5 * self.m * [self.v*self.v] ]
# Change position
self.y = self.y - F
# Change velocity
self.v = self.v - 1
# If ground is reached, reset variables.
if self.y >= 500:
self.y = 500
self.isjump = 0
self.v = 8
class App:
windowWidth = 800
windowHeight = 600
player = 0
def __init__[self]:
self._running = True
self._display_surf = None
self._image_surf = None
self.player = Player[]
def on_init[self]:
pygame.init[]
self._display_surf = pygame.display.set_mode[[self.windowWidth,self.windowHeight], pygame.HWSURFACE]
pygame.display.set_caption['Pygame pythonspot.com example']
self._running = True
self._image_surf = pygame.image.load["pygame.png"].convert[]
def on_event[self, event]:
if event.type == QUIT:
self._running = False
def on_loop[self]:
pass
def on_render[self]:
self._display_surf.fill[[0,0,0]]
self._display_surf.blit[self._image_surf,[self.player.x,self.player.y]]
self.player.update[]
pygame.display.flip[]
sleep[0.03]
def on_cleanup[self]:
pygame.quit[]
def on_execute[self]:
if self.on_init[] == False:
self._running = False
while[ self._running ]:
pygame.event.pump[]
keys = pygame.key.get_pressed[]
if [keys[K_RIGHT]]:
self.player.moveRight[]
if [keys[K_LEFT]]:
self.player.moveLeft[]
if [keys[K_UP]]:
self.player.jump[]
if [keys[K_ESCAPE]]:
self._running = False
self.on_loop[]
self.on_render[]
self.on_cleanup[]
if __name__ == "__main__" :
theApp = App[]
theApp.on_execute[]
Nếu bạn muốn nhảy lên các đối tượng, chỉ cần thêm chúng vào màn hình, phát hiện va chạm và đặt lại các biến nhảy nếu va chạm là đúng
Bạn có thể thích
Tạo Kẻ xâm lược không gian bằng Python
Tiếp theo
Đăng trong trò chơi
2015-05-06
- trò chơi
- pygame
Để lại câu trả lời.
Đừng điền vào đây nếu bạn là con người.
Tên
Địa chỉ emailThông báo
Gửi tin nhắn
Thor • Thứ Sáu, ngày 29 tháng 5 năm 2015
Cảm ơn, đây là một nền tảng vững chắc để bắt đầu. ]
John • Chủ nhật, ngày 09 tháng 8 năm 2015
Hướng dẫn rất hữu ích để hiểu lập trình pygame
vật lý của bạn là một chút off. Lực, F = ma. Biểu thức 1/2 * m * v^2 là động năng không phải lực. Nhưng những gì bạn thực sự muốn làm là tính toán sự thay đổi trong tọa độ y thẳng đứng để gia tốc trọng trường không đổi trong khi nhảy. Sự thay đổi tọa độ y được cho bởi dy = v * dt, trong đó dt là bước thời gian không đổi. Vận tốc thẳng đứng, v, không giảm tuyến tính do gia tốc không đổi [vì v = at] như chương trình ví dụ của bạn. Nhưng thuật ngữ F phải tỷ lệ thuận với v chứ không phải v^2. Nếu bạn thay đổi [tự. v * tự. v] để [tự. v] bạn không cần if/else vì biểu thức tỷ lệ thuận với chính nó. v đổi dấu với tự. v. Khối lượng không ảnh hưởng đến vận tốc thẳng đứng [bỏ qua lực cản của không khí] vì tất cả các vật thể đều được gia tốc bởi lực hấp dẫn với cùng tốc độ
Để giữ các thay đổi ở mức tối thiểu, tôi đã thay thế lệnh "if self. v>0" biểu thức cho F với một dòng.
F = [ tự. m * tự. v]
Rồi tôi thay đổi bản thân. m = 8 để làm cho độ cao nhảy giống như ban đầu.
Thay đổi mã xử lý bước nhảy vật lý dẫn đến một bước nhảy parabol đẹp như trong vật lý thế giới thực. Vật lý bình phương vận tốc ban đầu tăng nhanh và lơ lửng ở đỉnh cung lâu hơn. Điều đó có thể là mong muốn đối với một số trò chơi, nhưng đó không phải là cách nhảy hoạt động trong thế giới thực