So implementieren Sie das Gehen und Doppelspringen von Spielcharakter-Elfen mithilfe von Pygame

巴扎黑
Freigeben: 2017-07-23 13:38:33
Original
5192 Leute haben es durchsucht

Ich muss zugeben, dass die Übersetzung und der Satz des Buches „Python Game Programming Einführung“ sehr schlecht sind, aber die Demos darin sind immer noch sehr gut, ich habe einige Anpassungen vorgenommen und sie hier eingestellt .

Zuerst die Materialien:

Hintergrund

Elfen

Alle Materialien sind diesem Buch entnommen

Der nächste Schritt besteht darin, die Elfenklasse zu erstellen:

 (self)
        self.master_image === -1= 1= 1=== 1============rect == (rect.width // width) * (rect.height // height) - 1 update(self, current_time, rate=30 current_time > self.last_time ++= 1 self.frame >== self.frame !== (self.frame % self.columns) *= (self.frame // self.columns) *=== self.frame
Nach dem Login kopieren

Der Elf Klasse „Platzieren“ Sie auf dem Spielbildschirm und fügen Sie einen Hintergrund hinzu

pygame.init()
screen = pygame.display.set_mode((800, 600))
font = pygame.font.Font(None, 24)
framerate = pygame.time.Clock()

bg = pygame.image.load("background.png").convert_alpha()
pl = pygame.image.load('caveman.png').convert_alpha()# 创建精灵组group = pygame.sprite.Group()


player = MySprite(screen)
player.load("caveman.png", 50, 64, 8)
player.first_frame = 1player.last_frame = 7player.position = 400, 303group.add(player)while True:for event in pygame.event.get():if event.type == QUIT:
            sys.exit()#   设置帧数framerate.tick(30)
    ticks = pygame.time.get_ticks()
Nach dem Login kopieren

In diesem Fall befindet sich das Sprite auf der Leinwand, und wir müssen es tun Bewegen Sie es nach links und rechts:

keys = pygame.key.get_pressed()if keys[K_ESCAPE]:
        sys.exit()if keys[K_RIGHT]:
        player.X += 8if keys[K_LEFT]:if player.X > 0:
            player.X -= 8
Nach dem Login kopieren

Dann springen und verdoppeln springen

Hier müssen wir auf den zweiten Sprung achten:

1. Du kannst vor der Landung nur zweimal springen, was bedeutet, dass der Elf nach dem zweiten Sprung nicht mehr springen kann

2 .Nach dem Drücken der Leertaste wird die Beschleunigung des Sprites zurückgesetzt

, was eine Änderung des vorherigen Codes erfordert:

jump_vel = 0.0#   设置一个记录跳跃次数的变量space_number = 0#   跳跃判断player_jumping = False
player_start_y = player.Ywhile True:for event in pygame.event.get():if event.type == QUIT:
            sys.exit()if event.type == KEYDOWN:if event.key == K_SPACE:#   跳跃次数小于2次时,if space_number < 2:
                    jump_vel = -15.0space_number += 1player_jumping = True

    keys = pygame.key.get_pressed()if keys[K_ESCAPE]:
        sys.exit()if keys[K_RIGHT]:
        player.X += 8if keys[K_LEFT]:if player.X > 0:
            player.X -= 8#   设置帧数framerate.tick(30)
    ticks = pygame.time.get_ticks()#   当按下空格后,jump_vel变量不断变大,直到接触地面if player_jumping:
        player.Y += jump_vel
        jump_vel += 2#   落地后,重置跳跃速度和其他判断变量if player.Y >= player_start_y:
                player_jumping = False
                player.Y = player_start_y
                jump_vel = 0
                space_number = 0#   创建背景    screen.blit(bg, (0, 0))# 精灵组更新group.update(ticks, 50)
    group.draw(screen)

    pygame.display.update()
Nach dem Login kopieren

Alle Codes:

import sys, time, random, math, pygamefrom pygame.locals import *class MySprite(pygame.sprite.Sprite):def __init__(self, target):
        pygame.sprite.Sprite.__init__(self)
        self.master_image = None
        self.frame = 0
        self.old_frame = -1self.frame_width = 1self.frame_height = 1self.first_frame = 0
        self.last_frame = 0
        self.columns = 1self.last_time = 0#   使用property方法,让精灵类对坐标操作更方便def _getx(self):return self.rect.xdef _setx(self, value):
        self.rect.x = value

    X = property(_getx, _setx)def _gety(self):return self.rect.ydef _sety(self, value):
        self.rect.y = value

    Y = property(_gety, _sety)def _getpos(self):return self.rect.topleftdef _setpos(self, pos):
        self.rect.topleft = pos

    position = property(_getpos, _setpos)def load(self, filename, width, height, columns):
        self.master_image = pygame.image.load(filename).convert_alpha()
        self.frame_width = width
        self.frame_height = height
        self.rect = Rect(0, 0, width, height)
        self.columns = columns
        rect = self.master_image.get_rect()
        self.last_frame = (rect.width // width) * (rect.height // height) - 1def update(self, current_time, rate=30):#   更新帧数if current_time > self.last_time + rate:
            self.frame += 1if self.frame > self.last_frame:
                self.frame = self.first_frame
            self.last_time = current_time# 当帧数发生改变时,创建新的图片if self.frame != self.old_frame:
            frame_x = (self.frame % self.columns) * self.frame_width
            frame_y = (self.frame // self.columns) * self.frame_height
            rect = Rect(frame_x, frame_y, self.frame_width, self.frame_height)
            self.image = self.master_image.subsurface(rect)
            self.old_frame = self.frame

pygame.init()
screen = pygame.display.set_mode((800, 600))
font = pygame.font.Font(None, 24)
framerate = pygame.time.Clock()

bg = pygame.image.load("background.png").convert_alpha()
pl = pygame.image.load('caveman.png').convert_alpha()# 创建精灵组group = pygame.sprite.Group()


player = MySprite(screen)
player.load("caveman.png", 50, 64, 8)
player.first_frame = 1player.last_frame = 7player.position = 400, 303group.add(player)


jump_vel = 0.0#   设置一个记录跳跃次数的变量space_number = 0#   跳跃判断player_jumping = False
player_start_y = player.Ywhile True:for event in pygame.event.get():if event.type == QUIT:
            sys.exit()if event.type == KEYDOWN:if event.key == K_SPACE:#   跳跃次数小于2次时,if space_number < 2:
                    jump_vel = -15.0space_number += 1player_jumping = True

    keys = pygame.key.get_pressed()if keys[K_ESCAPE]:
        sys.exit()if keys[K_RIGHT]:
        player.X += 8if keys[K_LEFT]:if player.X > 0:
            player.X -= 8#   设置帧数framerate.tick(30)
    ticks = pygame.time.get_ticks()#   当按下空格后,jump_vel变量不断变大,直到接触地面if player_jumping:
        player.Y += jump_vel
        jump_vel += 2#   落地后if player.Y >= player_start_y:
                player_jumping = False
                player.Y = player_start_y
                jump_vel = 0
                space_number = 0
                rush_number = 0#   创建背景    screen.blit(bg, (0, 0))# 精灵组更新group.update(ticks, 50)
    group.draw(screen)

    pygame.display.update()
Nach dem Login kopieren

Auf diese Weise wird ein grober Elf fertiggestellt, der Doppelsprünge ausführen kann.

Ich bin diesem Buch sehr dankbar, dass es Ideen für Einzelsprünge liefert und mich auf die Idee bringt, über Doppelsprünge nachzudenken. Tatsächlich scheint so etwas wie ein Doppelsprung einfach zu sein, aber tatsächlich erfordert die Umsetzung einiges an Überlegung.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie das Gehen und Doppelspringen von Spielcharakter-Elfen mithilfe von Pygame. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage