柳州天气预报,腾冲,会议纪要-uc工程目录-提供最新集团工程信息和内部创业咨询

频道:新闻世界 日期: 浏览:235

这是用 Python 从头开端构建游戏的系列文章的第三部分。

-- Seth Kenlon(作者)

在 这个系列的榜首篇文章 中,我解说了怎么运用 Python 创立一个简略的依据文本的骰子游戏。在第二部分中,我向你们展现了怎么从头开端构建游戏,即从 创立游戏的环境 开端。可是每个游戏都需求一名玩家,而且每个玩家都需求一个可控制的人物,这也便是咱们接下来要在这个系列的第三部分中需求做的。

在 Pygame 中,玩家控制的图标或许化身被称作 妖精(sprite)。假如你现在还没有任何可用于玩家妖精的图画,你能够运用 Krita 或 Inkscape 来自己创立一些图画。假如你对自己的艺术细胞缺乏自信,你也能够在 OpenClipArt.org 或 OpenGameArt.org 查找一些现成的图画。假如你还未按照上一篇文章所说的独自创立一个 images 文件夹,那么你需求在你的 Python 项目目录中创立它。将你想要在游戏中运用的图片都放 images 文件夹中。

为了使你的游戏真实的影响,你应该为你的英豪运用一张动态的妖精图片。这意味着你需求制作更多的资料,而且它们要大不相同。最常见的动画便是走路循环,经过一系列的图画让你的妖精看起来像是在走路。走路循环最方便粗糙的版别需求四张图画。



留意:这篇文章中的代码示例一起兼容停止的和动态的玩家妖精。

将你的玩家妖精命名为 hero.png。假如你正在创立一个动态的妖精,则需求在姓名后边加上一个数字,从 hero1.png 开端。

创立一个 Python 类

在 Python 中,当你在创立一个你想要显现在屏幕上的目标时,你需求创立一个类。

在你的 Python 脚本挨近顶端的方位,参加如下代码来创立一个玩家。在以下的代码示例中,前三行现已在你正在处理的 Python 脚本中:

import pygame

import sys

import os # 以下是新代码

class Player(pygame.sprite.Sprite):

'''

生成一个玩家

'''

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.images = []

img = pygame.image.load(os.path.join('images','hero.png')).convert()

self.images.append(img)

self.image = self.images[0]

self.rect = self.image.get_rect()

假如你的可控制人物具有一个走路循环,在 images 文件夹中将对应图片保存为 hero1.png 到 hero4.png 的独立文件。

运用一个循环来通知 Python 遍历每个文件。

'''

目标

'''

class Player(pygame.sprite.Sprite):

'''

生成一个玩家

'''

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.images = []

for i in range(1,5):

img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert()

self.images.append(img)

self.image = self.images[0]

self.rect = self.image.get_rect()

将玩家带入游戏国际

现在现已创立好了一个 Player 类,你需求运用它在你的游戏国际中生成一个玩家妖精。假如你不调用 Player 类,那它永久不会起作用,(游戏国际中)也就不会有玩家。你能够经过立马运转你的游戏来验证一下。游戏会像上一篇文章结尾看到的那样运转,并得到清晰的成果:一个空荡荡的游戏国际。

为了将一个玩家妖精带到你的游戏国际,你有必要经过调用 Player 类来生成一个妖精,并将它参加到 Pygame 的妖精组中。在如下的代码示例中,前三行是现已存在的代码,你需求在这以后增加代码:

world = pygame.display.set_mode([worldx,worldy])

backdrop = pygame.image.load(os.path.join('images','stage.png')).convert()

backdropbox = screen.get_rect()

# 以下是新代码

player = Player() # 生成玩家

player.rect.x = 0 # 移动 x 坐标

player.rect.y = 0 # 移动 y 坐标

player_list = pygame.sprite.Group()

player_list.add(player)

测验发动你的游戏来看看发生了什么。高能预警:它不会像你预期的那样作业,当你发动你的项目,玩家妖精没有呈现。事实上它生成了,只不过只呈现了一毫秒。你要怎么修正一个只呈现了一毫秒的东西呢?你或许回想起上一篇文章中,你需求在主循环中增加一些东西。为了使玩家的存在时刻超越一毫秒,你需求通知 Python 在每次循环中都制作一次。

将你的循环底部的句子更改如下:

world.blit(backdrop, backdropbox)

player_list.draw(screen) # 制作玩家

pygame.display.flip()

clock.tick(fps)

现在发动你的游戏,你的玩家呈现了!

设置 alpha 通道

依据你怎么创立你的玩家妖精,在它周围或许会有一个色块。你所看到的是 alpha 通道应该占有的空间。它本来是不行见的“色彩”,但 Python 现在还不知道要使它不行见。那么你所看到的,是围绕在妖精周围的鸿沟区(或现代游戏术语中的“ 命中区(hit box)”)内的空间。



你能够经过设置一个 alpha 通道和 RGB 值来通知 Python 使哪种色彩不行见。假如你不知道你运用 alpha 通道的图画的 RGB 值,你能够运用 Krita 或 Inkscape 翻开它,并运用一种共同的色彩,比方 #00ff00(差不多是“绿屏绿”)来填充图画周围的空白区域。记下色彩对应的十六进制值(此处为 #00ff00,绿屏绿)并将其作为 alpha 通道用于你的 Python 脚本。

运用 alpha 通道需求在你的妖精生成相关代码中增加如下两行。相似榜首行的代码现已存在于你的脚本中,你只需求增加别的两行:

img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert()

img.convert_alpha() # 优化 alpha

img.set_colorkey(ALPHA) # 设置 alpha

除非你通知它,不然 Python 不知道将哪种色彩作为 alpha 通道。在你代码的设置相关区域,增加一些色彩界说。将如下的变量界说增加于你的设置相关区域的恣意方位:

ALPHA = (0, 255, 0)

在以上示例代码中,0,255,0 被咱们运用,它在 RGB 中所代表的值与 #00ff00 在十六进制中所代表的值相同。你能够经过一个优异的图画应用程序,如 GIMP 、Krita 或 Inkscape,来获取所有这些色彩值。或许,你能够运用一个优异的体系级色彩选择器,如 KColorChooser ,来检测色彩。



假如你的图画应用程序将你的妖精布景烘托成了其他的值,你能够按需调整 ALPHA 变量的值。不管你将 alpha 设为多少,最终它都将“不行见”。RGB 色彩值是十分严厉的,因而假如你需求将 alpha 设为 000,但你又想将 000 用于你图画中的黑线,你只需求将图画中线的色彩设为 111。这样一来,(图画中的黑线)就满足挨近黑色,但除了电脑以外没有人能看出差异。

运转你的游戏检查成果。



在 这个系列的第四篇文章 中,我会向你们展现怎么使你的妖精动起来。多么的激动人心啊!


via: https://opensource.com/article/17/12/game-python-add-a-player

作者: Seth Kenlon 选题: lujun9972 译者: cycoe 校正: wxy

本文由 LCTT 原创编译, Linux我国 荣誉推出

点击“了解更多”可拜访文内链接