Cách tạo nhân vật trong python Đầy đủ

Cách tạo nhân vật trong python Đầy đủ

Mẹo về Cách tạo nhân vật trong python Chi Tiết


Pro đang tìm kiếm từ khóa Cách tạo nhân vật trong python được Cập Nhật vào lúc : 2022-11-01 14:40:22 . Với phương châm chia sẻ Thủ Thuật về trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi Read Post vẫn ko hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Tác giả lý giải và hướng dẫn lại nha.


Long time no see, ngày hôm nay mình xin phép được đào mộ lại một series về làm trò chơi với pygame. Đây là một series tưởng chừng đã biết thành mình vùi trong quên lãng nhưng lương tâm cắn rứt, tác giả quyết định hành động hoàn thành xong nốt series này


Cách tạo nhân vật trong python. Hãy cùng tiếp tục phần 3 của serie với chủ đề : Va chạm và hoạt động và sinh hoạt giải trí Nội dung chính Show


  • Chuyển động trong pygame

  • Mô phỏng trọng tải

  • Va chạm với mặt đất

  • Source Code

Chuyển động trong pygame


Ở phần trước ta đã biết phương pháp đổi sprite của Mario thông qua những state:

v_state là trạng thái theo chiều dọc: đang nhảy (jumping) và theo chiều ngang h_state: đang đứng yên (standing) hay là đang hoạt động (running) cùng với đó là những trạng thái đang quay mặt về phía nào (facing): trái hay phải. Tuy nhiên, ta chưa thể tương tác với Mario. Ta sẽ thực thi việc tương tác này thông qua những những phím di tán : lên (nhảy lên), trái (di tán sang trái), phải (di tán sang phải) kèm theo là quay mặt nếu thiết yếu.


Để xử lý những sự kiện phím ấn mà

người tiêu dùng nhập vào, ta định nghĩa thêm hàm handle trong class Mario để xử lý những xự kiện. Như ở bài trước, tại hàm run, hàm lặp chính của trò chơi, sau mỗi clock tick ta lấy ra những sự kiện trình làng trong trò chơi và đưa cho từng đối tượng người dùng trong trò chơi để xử lý một cách thích hợp


def run(self):

# main trò chơi loop

while True:

# hold frame rate 60 fps

dt = self.clock.tick(60)

self.time_step += 1

# enumerate sự kiện

for sự kiện in pygame.sự kiện.get():

if sự kiện.type == pygame.QUIT:

sys.exit(0)

# sprite handle sự kiện

self.handle(sự kiện)


self.update(dt / 1000.)

# re-draw screen

self.draw(self.screen)


Tại hàm handle của vòng lặp của trò chơi, ta tiến hành gọi đến hàm handle của mario để xử lý:


def handle(self, sự kiện):

self.my_mario.handle(sự kiện)

pass


Trong phần này ta sẽ tiến hành implement hàm handle cho Mario.


def handle(self, sự kiện):

if sự kiện.type == pygame.KEYDOWN:

if sự kiện.key == pygame.K_UP:

if self.v_state == “resting”:

self.jump()

elif sự kiện.key == pygame.K_RIGHT:

self.move_right()

elif sự kiện.key == pygame.K_LEFT:

self.move_left()

elif sự kiện.type == pygame.KEYUP:

if sự kiện.key == pygame.K_RIGHT or

sự kiện.key == pygame.K_LEFT:

self.vx = 0

self.h_state = “standing”


Như trong phần code ở phía

trên, tham số truyền vào là biến sự kiện, từ biến này ta hoàn toàn có thể kiểm tra xem sự kiện đó là nhấn 1 phím xuống hay là không (sự kiện.type == pygame.KEYDOWN), tại đây ta sẽ thực thi những hành vi: nếu là nhấn phím sang phải sẽ thực thi hành vi di tán sang phải. Dưới đấy là rõ ràng của hàn move_right. Đối với hàm move_left, toàn bộ chúng ta làm hoàn toàn tương tự. Hàm jump toàn bộ chúng ta sẽ nói kỹ hơn khi thực thi mô phỏng trọng lượng.


def move_right(self):

self.vx = 2.5

self.h_state = “running”

self.h_facing = “right”


Đó là logic khi toàn bộ chúng ta nhấn một phím xuống. Việc cần làm tiếp Từ đó là xử

lý khi ta nhả phím ra, thời gian hiện nay ta sẽ update lại những trạng thái của Mario về trạng thái đứng yên như ở đoạn code phía trên.


Việc di tán sang bên phải, đơn thuần và giản dị là thiết lập vận tốc theo chiều x, thay đổi những trạng thái tương ứng với hướng di tán. sau khi thực thi tiến trình này, chạy thử ta thấy mario đã di tán theo như đúng những hướng trái phải mà ta chỉ định.


Mô phỏng trọng tải


Chúng ta cũng xem qua một chút ít logic về phần hoạt động và sinh hoạt giải trí của Mario. Thứ luôn kéo toàn bộ chúng ta về

với mặt đầt, khiến ta không thể bay lượn như chim đó đó đó là trọng tải. Hãy mô phỏng trọng lượng trong trò chơi như sau. Đầu tiên là định nghĩa một số trong những thông số:


GRAVITY = 0.4

MAX_VX = 3

MAX_VY = 20

def update(self, dt, trò chơi):

last = self.rect.copy()

if abs(self.vx) > self.MAX_VX:

self.vx = math.copysign(self.MAX_VX, self.vx)

if abs(self.vy) > self.MAX_VY:

self.vy = math.copysign(self.MAX_VY, self.vy)

dy = self.vy

dx = self.vx

self.vy += self.GRAVITY

self.rect = self.rect.move(dx, dy)

new = self.rect4


Ở đây ta nên phải có một chút ít kiến thức và kỹ năng về vật lý. Ta giả lập trọng tải như sau:


  • cứ mỗi trò chơi step ta tính toán lại vận tốc của Mario, thêm vào đó vào vận tốc theo chiều y một lượng là GRAVITY

  • Li độ mà vật di tán được sau từng bước trò chơi sẽ đó đó là vận tốc của vật theo những chiều x, y

  • Tính toán lại

    những vận tốc tối đa để tránh việc nhân vật của toàn bộ chúng ta rơi quá nhanh.

Khi đó việc thực thi nhảy lên chỉ đơn thuần và giản dị là di tán với vận tốc âm theo phương y:


def jump(self):

self.vy = -9

self.v_state = “jumping”


Ta init vị trí của Mario như sau tại hàm init của main:


self.tilemap = tmx.load(“map.tmx”, self.screen.get_size())

self.sprites = tmx.SpriteLayer()

self.my_mario = mario.Mario(self.sprites)

self.my_mario.set_position(100, 100)

self.tilemap.layers.append(self.sprites)


Như vậy vật sẽ ngày càng di tán xuống dưới và ngày càng nhanh theo như đúng mô phỏng trọng tải.



Cách tạo nhân vật trong python


Va chạm với mặt đất


Để hoàn toàn có thể thực thi phần va chạm với platformer ta cần sửa đổi lại Map trong Tiled một chút ít. Như đã nó sơ qua trong bài thứ nhất của series. Map được phân thành những lớp background layer, midground layer, foreground layer, những layer này sẽ là phần hiển thị. Nhưng phần sẽ tương tác với đối tượng người dùng của trò chơi sẽ là trigger layer, phần này chứa những đối tượng người dùng nhưng lại không hiển thị, làm ta có cảm hứng là đối tượng người dùng đang tương tác với lớp tile.


Trong lớp trigger của file map, ta thêm những đối

tượng hình chữ nhật với những thuộc tính như sau:



Cách tạo nhân vật trong python


Ta đặt giá trị cho thuộc tính là “tlbr” nghĩa là block theo toàn bộ những hướng trên (t) trái (l) dưới (b) phải (r) cho platform. Và tương tự cho đối tượng người dùng wall dùng để ngăn căn người chơi đi thoát khỏi màn hình hiển thị. Tất cả những đối tượng người dùng này đều nằm trong lớp trigger của map.



Cách tạo nhân vật trong python


Tiếp đó ta nên phải xử lý va chạm giữa người chơi với những đối tượng người dùng thuộc kiểu blocker này. Khi đó toàn bộ code của hàm update sẽ như sau:


def update(self, dt, trò chơi):

last = self.rect.copy()

if abs(self.vx) > self.MAX_VX:

self.vx = math.copysign(self.MAX_VX, self.vx)

if abs(self.vy) > self.MAX_VY:

self.vy = math.copysign(self.MAX_VY, self.vy)

dy = self.vy

dx = self.vx

self.vy += self.GRAVITY

self.rect = self.rect.move(dx, dy)


new = self.rect

for cell in trò chơi.tilemap.layers[‘triggers’].collide(new, ‘blockers’):

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:

new.bottom = cell.top

self.v_state = “resting”

self.vy = 0

if last.top >= cell.bottom and new.top < cell.bottom:

new.top = cell.bottom

self.vy = 0


trò chơi.tilemap.set_focus(new.x, new.y)


  • Đầu tiên ta tính toán vị trí của Mario theo lực tác động của trọng tải.

  • Tiếp đến là tính toán va chạm với blocker. Nguyên lý rất đơn thuần và giản dị: lấy ra những blocker, kiểm tra xem phần bao ngoài của chúng có giao với phần bao ngoài của

    Mario hay là không. Nếu có giao nhau ta sẽ thiết lập lại bao ngoài mới (new) cho Mario để chúng ko còn giao nhau nữa.

Hình demo khi hiển thị lớp trigger



Cách tạo nhân vật trong python


và lúc không hiển thị lớp trigger:



Cách tạo nhân vật trong python


End


Vậy là ta đã có một nhân vật Mario hoàn toàn có thể di tán trên một địa

hình cơ bản rồi. Phần tiếp theo sẽ là những phương pháp sử dụng map nâng cao cùng với Tiled


Source Code


https://github.com/vigov5/mario_game/


Tải thêm tài liệu liên quan đến nội dung bài viết Cách tạo nhân vật trong python


programming

python

Get_rect trong Python

Animation trong pygame

Font trong pygame

Event trong pygame

Cách cài pygame


Cách tạo nhân vật trong pythonReply
Cách tạo nhân vật trong python1
Cách tạo nhân vật trong python0
Cách tạo nhân vật trong python Chia sẻ


Share Link Down Cách tạo nhân vật trong python miễn phí


Bạn vừa Read nội dung bài viết Với Một số hướng dẫn một cách rõ ràng hơn về Video Cách tạo nhân vật trong python tiên tiến và phát triển nhất Chia SẻLink Download Cách tạo nhân vật trong python Free.



Hỏi đáp vướng mắc về Cách tạo nhân vật trong python


Nếu sau khi đọc nội dung bài viết Cách tạo nhân vật trong python vẫn chưa hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Admin lý giải và hướng dẫn lại nha

#Cách #tạo #nhân #vật #trong #python

Related posts:

Post a Comment

Previous Post Next Post

Discuss

×Close