Làm thế nào để bạn thêm một bước nhảy trong python?

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ỉ email

Thô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