CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này sẽ đưa bạn qua pyglet mô-đun phát triển trò chơi bằng Python. Nó được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.

Lời nói đầu.
Lý do tôi không chọn pygame rất đơn giản, vì pyglet đơn giản và nhẹ hơn, giống như sự khác biệt giữa django và jar.
Tôi tin rằng sau khi đọc bài viết này, bạn cũng sẽ quyết định lựa chọn pyglet.
Bài viết này chủ yếu tập trung vào việc cài đặt, cách sử dụng cơ bản và các ví dụ về pyglet.
1. Cài đặt
。
Giống như hầu hết các phương pháp cài đặt mô-đun, pyglet được cài đặt như sau:
- pip cài đặt pyglet
2. Cách sử dụng cơ bản
。
- #Nhập mô-đun
- nhập khẩu pyglet
Bây giờ chúng ta hãy xem các phương pháp cụ thể trong mô-đun này, vậy làm thế nào để xem nó? Chúng ta đều biết rằng nếu muốn xem tất cả các mô-đun trong hệ thống, bạn có thể sử dụng nó.
- danh sách pip
Ngoài ra còn có một cách tiếp cận Pythonic hơn:
- nhập khẩu hệ thống
- in(sys.modules.keys())
Chà, hôm nay chúng ta sẽ xem xét tất cả các phương thức của pyglet, vì vậy để hiểu dir, hãy sử dụng hàm dựng sẵn này:
- in(dir(pyglet))
。
Chúng ta đừng nhìn vào những phương pháp được gạch chân trước, vì những phương pháp đó là hướng nghiên cứu của các ông lớn trước tiên chúng ta hãy nhìn vào những phương pháp dân sự hơn, chẳng hạn như ứng dụng đầu tiên, hình ảnh, đồng hồ, media, os, sys, text, Version, window. , input, lib, font, event, nhìn sơ qua bạn có thể biết nó làm gì không? Cái gì, bạn không biết à? Điều đó chỉ cho thấy tiếng Anh của bạn quá kém. Ví dụ: nếu tôi muốn lấy số phiên bản của nó thì phiên bản phải là lựa chọn đầu tiên. Hãy thử:

Kết quả đúng như chúng tôi mong đợi, nó thực sự rất tài năng. Vì chúng ta sẽ sử dụng nó để viết trò chơi nên cửa sổ chắc chắn là không thể thiếu.
Vì chúng ta nói về cửa sổ nên ấn tượng đầu tiên của chúng ta phải là cửa sổ, vì nó có nghĩa là cửa sổ.

Chúng ta có thể thấy rằng nó không hiển thị một cửa sổ, điều đó có nghĩa là có một cái gì đó bị thiếu. Chúng ta có thể thấy từ tài liệu chính thức và nó dường như có rất nhiều tham số:

Đây là những gì tôi nhận được từ tài liệu mã nguồn của nó. Có thể thấy chúng đều là những từ tiếng Anh mà chúng ta thường thấy thường xuyên hơn. Mô tả các thông số này như sau
- chiều rộng: chiều rộng
- chiều cao: chiều cao
- chú thích: tiêu đề
- có thể thay đổi kích thước: liệu nó có thể thay đổi kích thước hay không
- phong cách: phong cách
- toàn màn hình: có để toàn màn hình không
- có thể nhìn thấy: liệu nó có thể nhìn thấy được không
- vsync: chưa chắc chắn
- file_drops: xóa tập tin
- hiển thị: thiết bị được chỉ định
- màn hình: màn hình
- cấu hình: cấu hình
- bối cảnh: bộ xử lý bối cảnh
- chế độ: chế độ
Mặc dù có nhiều tham số nhưng không phải tất cả chúng đều có thể được sử dụng. Hãy đơn giản tạo một cửa sổ.
- pyglet.window.Window(600, 600) #Tạo cửa sổ 600*600
- pyglet.app.run() #Start, hơi giống phương thức khởi động của jar
。
Điều này sẽ khởi chạy thành công một cửa sổ.
Trên thực tế, có rất nhiều phương pháp trong cửa sổ Những ai đang sử dụng chức năng nhắc nhở tự động của IDE chắc hẳn đã quen thuộc với nó:
- thắng.lấy_vị_trí()
- win.set_location(x,y)
- thắng. lấy_kích_thước()
- win.chiều rộng
- thắng.chiều cao
Tôi nghĩ mọi người nên làm quen với nó.
Nhưng điều này là chưa đủ. Chúng ta phải sửa đổi nó một chút, chẳng hạn như thêm một số văn bản, hình ảnh, v.v.
1. Thêm văn bản
。
Để hiển thị văn bản, chúng ta phải sử dụng phương thức văn bản. Phương thức văn bản có nhiều phương thức phụ. Vì muốn thêm văn bản nên trước tiên chúng ta phải có nhãn, vì vậy trước tiên chúng ta cần thêm phương thức nhãn. nhãn phương thức có:

Có thể thấy rằng thực sự có rất nhiều trong số đó. Vui lòng xem mô tả thông số bên dưới:
- văn bản: văn bản
- font_name: tên phông chữ
- font_size: cỡ chữ
- in đậm: Có in đậm không
- in nghiêng: có nghiêng không
- màu sắc: màu chữ
- x:x tọa độ góc dưới bên trái của văn bản
- y: y tọa độ góc dưới bên trái của văn bản
- chiều rộng: chiều rộng văn bản
- chiều cao: chiều cao văn bản
- điểm neo tọa độ Anchor_x:x, có thể được chia thành:bên trái trung tâm Phải
- neo_y: điểm neo tọa độ y, có thể được chia thành: tâm đường cơ sở dưới cùng đứng đầu
- căn chỉnh: vị trí nằm ngang
- multiline: Có ngắt dòng hay không, nếu có thì cần chỉ định chiều rộng
- dpi: Số điểm con trỏ di chuyển trên màn hình cho mỗi inch chuột di chuyển
- batch: xử lý hàng loạt
- nhóm:Nhóm
Tiếp theo chúng ta cần tạo nhãn:
- nhãn = pyglet.text.Nhãn('đụ mẹ mày',
- cỡ chữ = 40,
- x=win.width//2, y=win.height//2, #Một nửa chiều rộng và chiều cao của cửa sổ
- neo_x='trung tâm', neo_y='trung tâm') #vị trí ở giữa
sau đó vẽ văn bản
- nhãn.vẽ()
Nhưng điều này không thể thêm văn bản vào cửa sổ, vì cửa sổ trước đó chưa bị xóa. Việc vẽ lại cửa sổ thực chất là một quá trình xóa, thêm và xóa. Vì phương thức on_draw được kích hoạt khi cửa sổ được tạo nên chúng ta cần ghi đè on_draw tại đây. phương pháp thời gian.
- @win.event #Decorator
- def on_draw():#Viết lại phương thức on_draw
- win.clear() #Xóa cửa sổ
- label.draw() #Redraw cửa sổ
Bằng cách này, cửa sổ sẽ đạt được hiệu ứng mới nhất, kèm theo văn bản, sau đó bắt đầu:
- pyglet.app.run()
。
2. Thêm hình ảnh
。
Về hình ảnh thì tôi nghĩ mọi người chắc hẳn đã quen thuộc với những hình ảnh bên trong.
Sau đó, đầu tiên chúng ta đọc hình ảnh và vẽ lại nó.
- nhập khẩu pyglet
- thắng=pyglet.window.Window(600, 600)
- ảnh=pyglet.ảnh.trọng tải('2.jpg') #Đọc hình ảnh
- @win.sự kiện
- def on_draw(): #Phương thức viết lại
- win.clear() #Xóa cửa sổ
- image.blit(0, 0) #Vẽ lại cửa sổ, bắt đầu từ (0,0) ở góc dưới bên trái
- pyglet.app.run() #Bắt đầu
Một thông số rất quan trọng cần nói ở đây là blit, cũng giống như draw để hiển thị văn bản, bạn phải dựa vào nó nếu muốn hình ảnh hiển thị trên màn hình.
Tất nhiên, tài liệu chính thức cho thấy có một phương pháp khác:
- nhập khẩu pyglet
-
- thắng = pyglet.window.Window()
- hình ảnh = pyglet.resource.image('2.jpg') #Đọc tệp tài nguyên
- @win.sự kiện
- định nghĩa on_draw():
- thắng. xóa()
- hình ảnh. trở thành (0, 0)
-
- pyglet.app.run()
Cũng không sao cả, bạn chỉ cần chọn một trong hai cách, tùy theo ý mình.
Một số chiến lược tốt để tải hình ảnh trong các thư mục khác nhau là gì:
- pyglet.resource.path = ['./hình ảnh'] #Nhập đường dẫn hình ảnh trước nhưng đường dẫn phải nằm trong cùng thư mục với chương trình
- pyglet.resource.reindex() #Tạo chỉ mục
- hình ảnh = pyglet.resource.image("1.jpg") #Tải ảnh
- image.get_khu vực (x, y, chiều rộng, chiều cao) #Nhận hình ảnh mới
Bạn cũng có thể sử dụng image.load().
- từ pyglet nhập hình ảnh
- picture = hình ảnh.trọng tải('hình ảnh.png') #Đọc hình ảnh
- #Bạn có thể chụp ảnh màn hình của ảnh này và tạo ảnh mới.
- picture.get_region(x, y, chiều rộng, chiều cao)
Hiện tại chúng ta mới chỉ tiếp xúc với sự kiện on_draw, vậy pyglet còn có những sự kiện xử lý bàn phím và chuột thú vị nào nữa?
3. Sự kiện bàn phím
。
cách sử dụng:
- def on_key_press(ký hiệu, từ bổ nghĩa): #Bàn phím nhấn
- vượt qua
-
- def on_key_release(ký hiệu, từ bổ nghĩa):#Keyboard Release
- vượt qua
1) Các ký hiệu thường dùng.
Các ký hiệu chính:
- chìa khóa.Một #bức thư
- chìa khóa._1 #số
- #Phím điều khiển
- chìa khóa.ĐI VÀO hoặc chìa khóa.TRỞ LẠI
- chìa khóa.KHÔNG GIAN
- chìa khóa.PHÍM TRỞ LẠI
- chìa khóa.XÓA BỎ
- chìa khóa.TRỪ
- chìa khóa.BÌNH ĐẲNG
- chìa khóa.DẤU XẠ NGƯỢC
-
- #bàn phím nhỏ
- chìa khóa.NUM_1
- chìa khóa.NUM_2
- chìa khóa.NUM_EQUAL
- chìa khóa.NUM_DIVIDE
- chìa khóa.NUM_NHIỀU
- chìa khóa.NUM_SUBTRACT
- chìa khóa.NUM_THÊM
- chìa khóa.NUM_DECIMAL
- chìa khóa.NUM_ENTER
-
- #Phím bổ trợ trái và phải
- chìa khóa.LCTRL
- chìa khóa.RCTRL
- chìa khóa.CHỈNH SỬA
- chìa khóa.CHỈNH SỬA
Xác định phím nào được nhấn:
- nhập khẩu pyglet
- từ pyglet.window nhập khẩu chìa khóa
- thắng=pyglet.window.Window(500,400)
- @win.sự kiện
- def on_key_press(ký hiệu, bộ điều chỉnh):
-
- nếu biểu tượng == chìa khóa.TRONG:
- in('tiếp tục đi')
-
- biểu tượng Elif == chìa khóa.S:
- in('Mặt sau')
-
- biểu tượng Elif == chìa khóa.MỘT:
- in('Dịch sang trái')
-
- biểu tượng Elif == chìa khóa.D:
- in('Chuyển sang phải')
-
- nếu các từ bổ nghĩa & chìa khóa.MOD_CTRL:
- in('qua')
-
- pyglet.app.run()
Chúng ta có thể thấy rằng kết quả đúng như chúng ta mong đợi:

Bằng cách này, mọi người sẽ có nhu cầu viết trò chơi.
Tất nhiên, pyglet cũng có thể lưu trữ trạng thái bàn phím hiện tại để có thể gọi nó bất cứ lúc nào, điều này có thể được triển khai bằng KeyStateHandler().
- nhập khẩu pyglet
- từ pyglet.window nhập khẩu chìa khóa
- thắng=pyglet.window.Window(500,400)
- kd = chìa khóa.KeyStateHandler() #Khởi tạo
- win.push_handlers(kd) #Cài đặt trạng thái khóa vào bản ghi cửa sổ Tất nhiên, nếu bạn cài đặt nó, bạn sẽ ném nó: pop.
- nếu kd[chìa khóa.KHÔNG GIAN]:
- in('Thanh dấu cách đã được nhấn')
4. Sự kiện chuột.
- def on_mouse_motion(x,y,dx,dy):#chuyển động của chuột
- vượt qua
-
- def on_mouse_press(x, y, nút, công cụ sửa đổi): #Mouse press
- vượt qua
-
- def on_mouse_release(x, y, Button, modifier):#Mouse Release
- vượt qua
-
- def on_mouse_drag(x, y, dx, dy, nút, sửa đổi):#Kéo chuột
- vượt qua
-
- def on_mouse_enter(x, y): #Mouse vào cửa sổ
- vượt qua
-
- def on_mouse_leave(x, y): #Con chuột rời khỏi cửa sổ
- vượt qua
-
- def on_mouse_scroll(x, y, Scroll_x, Scroll_y):#Bánh xe chuột
- vượt qua
Chúng ta có thể thực hiện một số chức năng thú vị của nó:
- nhập khẩu pyglet
- thắng=pyglet.window.Window(500,400)
- @win.sự kiện
- def on_mouse_motion(x,y,dx,dy):#chuyển động của chuột
- in('di chuyển')
- @win.sự kiện
- def on_mouse_press(x, y, nút, công cụ sửa đổi): #Mouse press
- in('Nhấp chuột')
- @win.sự kiện
- def on_mouse_release(x, y, Button, modifier):#Mouse Release
- in('Thả chuột')
- @win.sự kiện
- def on_mouse_drag(x, y, dx, dy, nút, sửa đổi):#Kéo chuột
- in('Kéo chuột')
- @win.sự kiện
- def on_mouse_enter(x, y): #Mouse vào cửa sổ
- in('Nhập cửa sổ')
- @win.sự kiện
- def on_mouse_leave(x, y): #Con chuột rời khỏi cửa sổ
- in('Rời khỏi cửa sổ')
- @win.sự kiện
- def on_mouse_scroll(x, y, Scroll_x, Scroll_y):#Bánh xe chuột
- in('Bánh xe chuột')
-
- pyglet.app.run()
。
Như bạn có thể thấy, chúng tôi đã nắm bắt thành công quỹ đạo của con chuột.
Hằng số chuột:
Điều này có thể được sử dụng để xác định nút chuột nào đã được kích hoạt.
- pyglet.window.mouse.BÊN TRÁI #bên trái
- pyglet.window.mouse.MIDDLE #Bánh xe cuộn giữa
- pyglet.window.mouse.PHẢI #Phải
Thay đổi con trỏ chuột:
- thắng.set_mouse_visible(hiển thị=ĐÚNG VẬY) #trình diễn SAItrốn
- con trỏ = win.get_system_mouse_cursor(win.CURSOR_HELP) #Lấy con trỏ do hệ điều hành xác định
- thắng.set_con_trỏ_chuột(con trỏ) #Đặt giao diện chuột
。
Cũng có thể sử dụng hình ảnh tùy chỉnh làm con trỏ:
- hình ảnh = pyglet.image.trọng tải('2.jpg') #Đọc hình ảnh
- con trỏ = pyglet.window.ImageMouseCursor(image, 16, 8) #Thêm hình ảnh vào con trỏ chuột
- thắng.set_con_trỏ_chuột(con trỏ) #Đặt con trỏ chuột
- thắng.set_mouse_visible(hiển thị=ĐÚNG VẬY) #Đặt hiển thị
Kích hoạt chế độ độc quyền của chuột
- thắng.set_exclusive_mouse(ĐÚNG VẬY) #game bắn súng thường xuyên
3. Sự kiện nhập văn bản
。
Khi được sử dụng trong trò chơi, việc nhập một số lệnh nhất định có thể thay đổi các tham số và giá trị nhất định để đạt được hiệu quả nhất định.
- nhập khẩu pyglet
- thắng=pyglet.window.Window(500,400)
- @win.sự kiện
- def on_text(text): #Input text sự kiện
- nếu văn bản =='Anh Yêu Em':
- in('tôi cũng yêu bạn')
4. Sự kiện dưới cửa sổ
。
1.Thay đổi kích thước.
Cách sử dụng: on_resize(chiều rộng, chiều cao).
- thắng=pyglet.window.Window(500,400)
- @cửa sổ.sự kiện
- def on_resize(chiều rộng, chiều cao):
- chiều rộng=100
- chiều cao = 200
- pyglet.app.run()
Chúng ta đều biết rằng nếu mọi người thiết lập như thế này sẽ tốn thời gian, công sức và không ngắn gọn. Chúng ta có thể sử dụng một lớp để gói gọn nó:
- nhập khẩu pyglet
- từ pyglet.window nhập khẩu chìa khóa
- thắng=pyglet.window.Window(500,400)
- class win(pyglet.window.Window): #Kế thừa lớp Window
- def on_resize(self,width,height): #Phương thức viết lại
- self.width=200 #Đặt lại chiều rộng
- self.height=100 #Đặt lại chiều cao
-
- def on_text(self,text): sự kiện #Text
- aa=đầu vào('im lặng:')
- nếu aa=='Anh Yêu Em':
- in('tôi cũng yêu bạn')
- def on_key_press(self,symbol, modifier): #Nghe sự kiện bàn phím
- nếu biểu tượng == chìa khóa.TRONG:
- in('tiếp tục đi')
- self.width=self.width+100
-
- biểu tượng Elif == chìa khóa.S:
- in('Mặt sau')
- self.width=self.width+200
- biểu tượng Elif == chìa khóa.MỘT:
- in('Dịch sang trái')
- self.width=self.width-200
- biểu tượng Elif == chìa khóa.D:
- in('Chuyển sang phải')
- self.width=self.width-100
- nếu các từ bổ nghĩa & chìa khóa.MOD_CTRL:
- in('qua')
- self.width=self.width+300
-
- thắng()
- pyglet.app.run()
Nó hơi lag một chút nhưng đó không phải là vấn đề lớn. Điều quan trọng nhất là chúng tôi đã triển khai nó.

5. Phát nhạc
。
pyglet không chỉ có thể làm game mà còn có thể chơi nhạc, vậy nó được triển khai như thế nào?
1. Sử dụng media.load để phát âm thanh.
- nhập khẩu pyglet
- thắng=pyglet.window.Window()
- âm thanh = pyglet.media.trọng tải('11.wav', phát trực tuyến=SAI) #Tải nhạc, lưu ý chỉ phát được âm thanh định dạng wav
- sound.play() #play
- pyglet.app.run()
2. Sử dụng Resource.media để phát âm thanh.
- nhập khẩu pyglet
- thắng=pyglet.window.Window()
- âm thanh = pyglet.resource.media('11.wav', phát trực tuyến=SAI) #Tải nhạc, lưu ý chỉ phát được âm thanh định dạng wav
- sound.play() #play
- pyglet.app.run()
Trên thực tế, cả hai phương pháp đều có thể được sử dụng trong hầu hết các hoạt động tải, chẳng hạn như phương tiện /hình ảnh/văn bản.
Nếu cần kiểm soát việc phát lại, chúng ta cần giới thiệu một phương thức khác: Player(). Lưu ý rằng phương thức đầu tiên được viết hoa.
- chơi = pyglet.media.Player()
Sau đó, chúng tôi thêm âm thanh đã phát vào hàng đợi:
- play.queue(âm thanh)
Chơi lần cuối:
- chơi.chơi()
Thông qua mô tả ở trên, giờ đây chúng ta có thể thêm nhiều bản nhạc vào hàng đợi của mình. Vui lòng xem bên dưới:
- nhập khẩu pyglet
- thắng=pyglet.window.Window()
- âm thanh = pyglet.resource.media('11.wav', phát trực tuyến=SAI)
- âm thanh1=pyglet.media.trọng tải('2.wav', phát trực tuyến=SAI)
- chơi = pyglet.media.Player()
- play.queue(âm thanh) #queue one
- play.queue(sound1)#Queue 2
- play.play()#Play
- thắng.đóng() #Ẩn cửa sổ đen, bạn có thể chơi khăm người khác
- pyglet.app.run()
Đôi khi chúng ta muốn những âm thanh này phát theo vòng lặp, vậy thực tế chúng ta chỉ cần thêm một vòng lặp là được.
- nhập khẩu pyglet
- thắng=pyglet.window.Window()
- âm thanh = pyglet.resource.media('11.wav', phát trực tuyến=SAI)
- âm thanh1=pyglet.media.trọng tải('2.wav', phát trực tuyến=SAI)
- chơi = pyglet.media.Player()
- định nghĩa xh():
- while 1: #Loop nếu điều kiện đúng
- mang lại âm thanh #Lặp lại liên tục
- tạo ra âm thanh1
- play.queue(xh()) #Thêm vào hàng đợi
- play.play() #Play
- pyglet.app.run() #Bắt đầu
6. Phát lại video
。
Pyglet toàn năng có thể xử lý âm thanh và video của trò chơi, hahaha.
Phương pháp phát video tương tự như phương pháp phát âm thanh, nhưng có nhiều điểm khác biệt. Ngoài ra còn có hai phương pháp:
1. Sử dụng media.load để phát video.
- nhập khẩu pyglet
- thắng=pyglet.window.Window()
- video = pyglet.media.trọng tải('12.mp4') #Load video, lưu ý không có tham số streaming
- play=pyglet.media.Player() #Tạo đối tượng người chơi
- play.queue(video) #Thêm hàng đợi nhiệm vụ
- play.play() #Play
- @win.sự kiện
- định nghĩa on_draw():
- thắng. xóa()
- play.get_texture().blit(30,60) #Đặt vị trí của video trong cửa sổ màu đen, bạn cũng có thể sử dụng play.texture.blit(30,60)
- pyglet.app.run()
2. Sử dụng Resource.media để phát video.
- nhập khẩu pyglet
- thắng=pyglet.window.Window()
- video = pyglet.resource.media('12.mp4') #Load video, lưu ý không có tham số streaming
- play=pyglet.media.Player() #Tạo đối tượng người chơi
- play.queue(video) #Thêm hàng đợi nhiệm vụ
- play.play() #Play
- @win.sự kiện
- định nghĩa on_draw():
- thắng. xóa()
- play.get_texture().blit(30,60) #Đặt vị trí của video trong cửa sổ màu đen
- pyglet.app.run()
Tóm tắt
。
Pyglet cũng có nhiều ví dụ thú vị, chẳng hạn như vẽ canvas, nhưng so với những điểm mình nêu thì vẫn có vẻ hơi nhàm chán, hi vọng nội dung trên có thể giúp các bạn nhanh chóng phát triển một ứng dụng thực tế.
Địa chỉ gốc: https://mp.weixin.qq.com/s/yvL-tq-1Pezh_QcxOpnpnQ.
Cuối cùng, bài viết này giúp bạn hiểu về pyglet mô-đun phát triển trò chơi trong Python. Nếu bạn muốn biết thêm về một bài viết giúp bạn hiểu về pyglet mô-đun phát triển trò chơi trong Python, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục. để duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!