fastgame文档
Fastgame是我自己开发的游戏库,把自己的文档CV下:
一、Fastgame用前提示
fastgame支持的文件格式
图片:
- JPG
- PNG
- GIF(无动图)
- BMP
- SVG(有缩放错误)
- WEBP(有缩放错误)
- PCX
- TGA
- TIF
- LBM
- XPM
视频:
- MP4
- AVI
- FIV
音频:
- OGG
- WAV(未压缩)
- MP3(需要有FFMpeg运行环境)
fastgame设计思想
参考了pyglet
的装饰器和scratch
的事件驱动模式。
fastgame坐标系
一切坐标都以对象的矩形左上角为原点。
窗口的(0, 0)点为窗口左上角。
fastgame适合的程序
- 图片2D游戏。
- 画布像素2D游戏。
- 简单的、需要特殊效果的GUI界面。
二、Fastgame模块详解
fastgame.api
fastgame的各类API。
底层模块。
fastgame.__main__
通过命令行检测fastgame安装,及查看fastgame版本:
fastgame -v
也可以:
fastgame version
fastgame.exceptions
fastgame的各个异常。
fastgame.exceptions.FastGameError
fastgame异常基类。
fastgame.exceptions.CannotImportError
fastgame未能导入模块异常。
fastgame.exceptions.EngineError
fastgame音频播放引擎异常。
fastgame.exceptions.NotCreatedGameError
未创建fastgame游戏错误。
fastgame.exceptions.OutOfCanvasError
fastgame画笔路径超出画布异常。
fastgame.exceptions.NotPolygonError
fastgame非几何多边形异常。
fastgame.exceptions.StyleNotFoundError
fastgame风格不存在异常。
fastgame.exceptions.JoystickError
fastgame游戏手柄异常。
fastgame.exceptions.VideoError
fastgame视频组件异常。
fastgame.locals
定义了Fastgame常用的常量。
from fastgame.locals import *
fastgame.version
Fastgame版本系统。
fastgame.version.major
Fastgame主版本号。
fastgame.version.minor
Fastgame次版本号。
fastgame.version.micro
Fastgame微版本号。
fastgame.version.vernum
Fastgame版本元组。
等价于(major, minor, micro)
实例:
from fastgame.version import vernum
if vernum < (1, 0, 0):raise SystemExit
fastgame.version.version
Fastgame版本字符串。
等于fastgame -v
的结果。
import fastgame
from fastgame.version import version
if fastgame.__version__ != version:raise SystemExit
fastgame.core.game
Fastgame主要游戏文件。
fastgame.core.game.FastGame
Fastgame游戏类。
fastgame.core.game.FastGame()
用法:
FastGame(title: str = 'Fast Game Window', size: Tuple[int, int] = (500, 500),style: int = NORMAL, depth: int = 0, icon: str = None, fps: int = 16,debug_messages: bool = False, init_pygame: bool = True
)
参数说明:
title
: 游戏窗口的标题。size
: 游戏窗口的大小。第一个值为长,第二个值为宽。设为(0, 0)时,大小与屏幕大小相同。style
: 游戏窗口风格。
风格 | 效果 |
---|---|
fastgame.NORMAL
|
正常窗口 |
fastgame.FULLSCREEN
|
全屏窗口 |
fastgame.RESIZEABLE
|
可缩放窗口 |
fastgame.NO_FRAME
|
无边框窗口 |
风格允许使用 |
运算符。
实例(无边框+可缩放)
import fastgame
from fastgame.locals import *
game = fastgame.FastGame(style=NO_FRAME | RESIZEABLE)
depth
: 游戏窗口位深。设为0则自动调整。icon
: 游戏窗口图标。可以使用fastgame支持的图像格式。
不支持ico格式!fps
: 每秒刷新帧数,即每秒显示几张图片,支持浮点数。debug_messages
: 是否进入调试模式,进入后有日志信息。init_pygame
: 是否自动初始化pygame
。建议设为True
。
fastgame.core.game.FastGame.mouse_position
mouse_position
是FastGame类的虚拟属性。
获取鼠标位置:
from fastgame import FastGame
game = FastGame()
x, y = game.mouse_position
设置鼠标位置(将鼠标移动至):
from fastgame import FastGame
game = FastGame()
game.mouse_position = (100, 100)
fastgame.core.game.FastGame.mouse_rel
获取鼠标在调用此虚拟属性前的一系列移动。
如下是一个返回的例子:
[(0, 0), (1, 0), (1, 1)]
实例:
from fastgame import FastGame
game = FastGame()
@game.update
def update():print(game.mouse_rel)
game.mainloop()
fastgame.core.game.FastGame.hide_mouse
隐藏鼠标指针。
实例1(隐藏鼠标指针):
from fastgame import FastGame
game = FastGame()
game.hide_mouse() # 方法1
FastGame.hide_mouse() # 方法2
实例2(设置鼠标光标):
from fastgame import FastGame, Sprite
game = FastGame()
cursor = Sprite('cursor.png') # cursor.png是鼠标光标图片
game.hide_mouse()
@game.update
def update():cursor.update()cursor.move_to_mouse()
game.mainloop()
fastgame.core.game.FastGame.show_mouse
显示鼠标指针。
实例(显示鼠标指针):
from fastgame import FastGame
game = FastGame()
game.show_mouse() # 方法1
FastGame.show_mouse() # 方法2
fastgame.core.game.FastGame.wm_info
获得系统的窗口信息。
由操作系统而定。
返回一个由操作系统填充数据的字典。
一些操作系统可能不会往里边填充信息,则返回一个空字典。大多数平台将返回一个"window"键,对应的值是当前显示界面的系统ID。
fastgame.core.game.FastGame.check_rate
用法:
FastGame.check_rate(rate)
检测当前的循环次数是否除以rate为0.
这可以用于一定频率地进行某操作。
实例(显示角色):
from fastgame import FastGame, Sprite
game = FastGame()
sprite = Sprite('test.png')
sprite.hide()
sprites = []
@game.update
def update():if game.check_rate(10):spr = sprite.clone()spr.show()sprites.append(spr)for spr in sprites:spr.update()
game.mainloop()
fastgame.core.game.FastGame.destroy
关闭窗口后结束此python程序。
若只是关闭窗口,将参数close_program设为False即可,但可能引发BUG。
会在关闭窗口后调用被FastGame.when_end装饰过的函数。
用法:
FastGame.destroy(status: int = 0, close_program: bool = True, *args, **kwargs
)
参数详解:
status
: 关闭状态码。close_program
: 是否结束此python程序。args
、kwargs
: 关闭前调用的when-end函数的形参。
fastgame.core.game.FastGame.toggle_debug
切换调试模式。
fastgame.core.game.FastGame.toggle_fullscreen
切换全屏模式。
fastgame.core.game.FastGame.get_counter
获取当前循环的次数。
返回值为int
型。
fastgame.core.game.FastGame.title
窗口标题。
是一个虚拟属性。
实例:
from fastgame import FastGame
game = FastGame()
print(game.title) # 获取窗口标题
game.title = 'Hello World' # 设置窗口标题
fastgame.core.game.FastGame.when_start
装饰器,装饰开始循环前的函数。
Fastgame的设计思想参考了Scratch3,仿照了一些事件驱动模式。
fastgame.core.game.FastGame.when_end
装饰器,装饰关闭窗口前的函数。
具体调用位置在关闭窗口后,退出pygame前。
fastgame.core.game.FastGame.on_mouse_down
装饰器,装饰鼠标按下时回调的函数。
获取鼠标按钮使用Fastgame.event.get('button')
fastgame.core.game.FastGame.on_mouse_up
装饰器,装饰鼠标放开时回调的函数。
fastgame.core.game.FastGame.on_mouse_move
装饰器,装饰鼠标移动时回调的函数。
fastgame.core.game.FastGame.on_key_down
装饰器,装饰任意按键按下时回调的函数。
fastgame.core.game.FastGame.on_key_up
装饰器,装饰任意按键放开时回调的函数。
fastgame.core.game.FastGame.update
装饰器,装饰显示角色的回调函数。
本函数是渲染游戏画面必需的。
fastgame.core.game.FastGame.mainloop
进入窗口显示的主循环。
会阻塞程序的运行。
用法:
FastGame.mainloop(status: int = 0, escape_quit: bool = False, render_all: bool = False
)
参数详解:
status
: 程序退出时的状态码escape_quit
: 用户按下ESC键时,是否关闭窗口。render_all
: 更新窗口时,是否渲染所有部分,或只渲染有变化的部分。
注:在正常情况下,建议将render_all
参数设为False,可以获得更高的性能。
fastgame.core.sprite
Fastgame主要角色模块。
fastgame.core.sprite.Sprite
Fastgame主要角色类。
继承自pygame.sprite.Sprite
fastgame.core.sprite.Sprite()
用法:
Sprite(image: str, size: Union[None, Tuple[int, int]] = None
)
参数详解:
image
: 角色图片文件。size
: 若不为None
,即为缩放后角色图片大小。
image参数支持导入./
和./resources/images
的图片,如下项目结构:
testgame│ game.py│└─resources└─images│ test.png
支持下面的导入方案:
from fastgame import Sprite
sprite = Sprite('test.png')
fastgame.core.sprite.Sprite.position
角色位置,一个虚拟属性。
实例:
from fastgame import FastGame, Sprite
game = FastGame()
sprite = Sprite('test.png')
print(sprite.position) # 获取角色位置
sprite.position = (100, 100) # 设置角色位置
fastgame.core.sprite.Sprite.update
在窗口上更新此角色。
必须在被Fastgame.update装饰过的函数中调用。
fastgame.core.sprite.Sprite.collide_other
检测此角色是否碰到了另一角色。
判断方法基于两个角色的矩形碰撞。
当有非长方形的角色参与检测,会出现没有碰撞,检测却是已经碰撞的情况。
用法:
Sprite.collide_other(sprite: Sprite)
参数sprite
: 另一个角色对象。
fastgame.core.sprite.Sprite.collide_mouse
检测此角色是否碰到了鼠标指针。
判断方法基于角色矩形。
当非长方形的角色参与检测,会出现没有碰撞,检测却是已经碰撞的情况。
fastgame.core.sprite.Sprite.collide_edge
检测此角色是否碰到了边缘。
判断方法基于角色矩形。
当非长方形的角色参与检测,会出现看似没有碰撞,检测却是碰撞的情况。
返回值为一个二元组,第一个值为是否碰撞左右边缘,第二个值为是否碰撞上下边缘。
实例:
from fastgame import FastGame, Sprite
game = FastGame()
sprite = Sprite('test.png')
collide_left_or_right, collide_up_or_down = sprite.collide_edge()
fastgame.core.sprite.Sprite.move_to_mouse
移动至鼠标指针的位置。
fastgame.core.sprite.Sprite.add_x
增加X坐标。
用法:
Sprite.add_x(add: int)
参数add
: 增加的X坐标,可以为负数。
将add设为负数即为减少X坐标。
fastgame.core.sprite.Sprite.add_y
增加Y坐标。
用法:
Sprite.add_y(add: int)
参数add
: 增加的Y坐标,可以为负数。
将add设为负数即为减少Y坐标。
fastgame.core.sprite.Sprite.set_x
设置X坐标。
用法:
Sprite.set_x(x: int)
参数x
: X坐标。
fastgame.core.sprite.Sprite.set_y
设置Y坐标。
用法:
Sprite.set_y(y: int)
参数y
: Y坐标。
fastgame.core.sprite.Sprite.move_to
移动至某点。
用法:
Sprite.move_to(x: int, y: int)
参数详解:
x
: X坐标。y
: Y坐标。
Sprite.move_to(x, y)
等价于Sprite.position = (x, y)
fastgame.core.sprite.Sprite.clone
创建克隆体。
克隆体的位置于此角色的位置相同。
本方法的概念不同于Scratch
的克隆体,而是相当于copy
方法。
fastgame.core.sprite.Sprite.hide
隐藏此角色。
也可以在update中进行条件判断,如下:
@game.update
def update():if something:sprite.update()
fastgame.core.sprite.Sprite.show
显示此角色。
在update中更新才有效。
fastgame.core.sprite.Sprite.resize
缩放此角色的图片。
WEBP
、SVG
等图片可能错位。
用法:
Sprite.resize(size: Tuple[int, int])
参数size
: 图片大小。
fastgame.core.sprite.Sprite.set_image
重置此角色的图片。
重设的图片对克隆体无效。
用法:
Sprite.set_image(image: str, size: Tuple[int, int] = None
)
参数详解:
image
: 角色图片文件。size
: 若不为None
,即为缩放后角色图片大小。
fastgame.core.sprite.Sprite.image
属性值,角色对应的pygame.Surface
对象。
底层pygame兼容接口。
fastgame.core.sprite.Sprite.rect
属性值,角色对应的pygame.rect.Rect
对象。
底层pygame兼容接口。
代码 | 意义 |
---|---|
Sprite.rect.x
|
角色X坐标 |
Sprite.rect.y
|
角色Y坐标 |
Sprite.rect.size
|
角色大小 |
Sprite.rect.width
|
角色长 |
Sprite.rect.height
|
角色宽 |
Sprite.rect.center
|
角色中心点 |
Sprite.rect.centerx
|
角色中心点X坐标 |
Sprite.rect.centery
|
角色中心点Y坐标 |
Sprite.rect.right
|
角色右部坐标 |
Sprite.rect.bottom
|
角色底部坐标 |
Sprite.rect.bottomleft
|
角色左下角位置 |
Sprite.rect.bottomright
|
角色右下角位置 |
Sprite.rect.topleft
|
角色左上角位置 |
Sprite.rect.topright
|
角色右上角位置 |
Sprite.rect.midtop
|
角色顶部中点位置 |
Sprite.rect.midbottom
|
角色底部中点位置 |
Sprite.rect.midleft
|
角色左部中点位置 |
Sprite.rect.midright
|
角色右部中点位置 |
fastgame.utils.color
Fastgame颜色模块。
fastgame.utils.color.Color
Fastgame颜色基类。
继承自pygame.Color
。
fastgame.utils.color.Color()
用法:
Color(*args: Union[str, Tuple[int, int, int], Tuple[int, int, int, int]],color_type=RGB
)
参数详解:
args
: 列表参数,支持如(0, 0, 0)
、0, 0, 0
和"#FFFFFF"
等的输入模式。color_type
: 必须使用关键字模式传参,颜色的类型。
支持的颜色类型:
- RGB, RGBA
- HEX
- CMYK
- HSV, HSVA
- HSL, HSLA
颜色类型通过from fastgame.locals import *
导入。
fastgame.utils.color的收录颜色
目前收录颜色:
颜色 | 代码 |
---|---|
白色 |
fastgame.utils.color.WHITE
|
黑色 |
fastgame.utils.color.BLACK
|
红色 |
fastgame.utils.color.RED
|
绿色 |
fastgame.utils.color.GREEN
|
蓝色 |
fastgame.utils.color.BLUE
|
棕色 |
fastgame.utils.color.BROWN
|
银色 |
fastgame.utils.color.SLIVER
|
灰色 |
fastgame.utils.color.GRAY
|
粉色 |
fastgame.utils.color.PINK
|
紫色 |
fastgame.utils.color.PURPLE
|
粉色 |
fastgame.utils.color.PINK
|
藏青色 |
fastgame.utils.color.NAVY
|
青色 |
fastgame.utils.color.CYAN
|
蓝绿色 |
fastgame.utils.color.TEAL
|
米黄色 |
fastgame.utils.color.BEIGE
|
金色 |
fastgame.utils.color.GOLD
|
橙色 |
fastgame.utils.color.ORANGE
|
黄褐色 |
fastgame.utils.color.TAN
|
土黄色 |
fastgame.utils.color.KHAKI
|
黄色 |
fastgame.utils.color.YELLOW
|
fastgame.utils.joystick
Fastgame游戏手柄模块。
在一些环境中不支持。
注意:实验功能,可能在接下来的版本中删除,导致不兼容!
fastgame.utils.joystick.Joystick
Fastgame游戏手柄类。
fastgame.utils.joystick.Joystick()
Joystick(joystick_id: int, init_joystick: bool = True
)
参数详解:
joystick_id
: 游戏手柄ID号。init_joystick
: 是否自动初始化pygame.joystick
。
fastgame.utils.joystick.Joystick.id
属性值。游戏手柄ID号。
fastgame.utils.joystick.Joystick.guid
属性值。游戏手柄GUID号。
fastgame.utils.joystick.Joystick.name
属性值。游戏手柄名称。
fastgame.utils.joystick.Joystick.devices
属性值。游戏手柄装置数。
fastgame.utils.joystick.Joystick.axes
属性值。游戏手柄球数。
fastgame.utils.joystick.Joystick.start_rumble
使游戏手柄发出持续而低沉的声音。
如果成功播放,则返回True,如果操纵杆不支持,则返回False.
用法:
Joystick.start_rumble(low_frequency: float, high_frequency: float, duration: int
)
参数详解:
low_frequency
: 最低频率。high_frequency
: 最高频率。duration
: 持续时间。
fastgame.utils.joystick.Joystick.stop_rumble
停止任何持续而低沉的声音。
fastgame.utils.joystick.Joystick.all_joysticks_id
静态方法。
返回所有游戏手柄的ID号。
fastgame.utils.joystick.load_all
载入所有游戏手柄。
返回所有游戏手柄对象的列表。
返回类型:List[Joystick]
fastgame.utils.music
Fastgame音频播放工具。
fastgame.utils.music.Player
音频播放器类。
fastgame.utils.music.Player()
用法:
Player(file: str, temp_wav: str = 'temp.wav'
)
参数详解:
file
: 音频文件。temp_wav
: 若为MP3类音频文件,则为临时WAV文件路径。
fastgame.utils.music.Player.set_mixer_value
静态方法。
重设混音器参数。
此函数会重启混音器。
用法:
Player.set_mixer_value(frequency: int = 44100, size: int = -16, channels: int = STEREO,buffer: int = 512
)
参数详解:
frequency
: 播放频率。size
: 每个音频样本使用了多少位。channels
: 是否立体声,1为普通声,2为立体声。buffer
: 音频播放缓冲区大小。缓冲区大小必须是2的幂(如果不是,则向上舍入到下一个最接近的2幂)
fastgame.utils.music.Player.engine
虚拟属性。
Fastgame采用mixer+music的双引擎模式。
实例:
from fastgame import Player
from fastgame.locals import *
player = Player('test.ogg')
engine = player.engine # 获取引擎
player.engine = MUSIC # 设置引擎为pygame.mixer.music
player.engine = MIXER # 设置引擎为pygame.mixer
fastgame.utils.music.Player.play
开始播放音频。
用法:
Player.play(loops: int = 0, start: float = 0.0, fade_ms: int = 0,max_time: float = 0.0
)
参数详解:
loops
: 第一次播放后将重复多少次,设为-1可无限循环。start
: 引擎为music时,为音乐开始播放的时间位置。fade_ms
: 使声音以0%音量开始播放,并在给定的时间内淡入100%音量。max_time
: 引擎为mixer时,在给定的毫秒数后停止播放。
fastgame.utils.music.Player.pause
暂停所有音乐。
fastgame.utils.music.Player.unpause
继续播放所有音乐,取消暂停。
fastgame.utils.music.Player.stop
停止所有音乐。
fastgame.utils.music.Player.busy
属性值,引擎是否繁忙。
fastgame.utils.music.Player.restart
重新开始所有播放音乐。仅支持music引擎。
fastgame.utils.music.Player.volume
虚拟属性,播放器的音量。
实例:
from fastgame import Player
player = Player('test.ogg')
volume = player.volume # 获取音量
player.volume = 0.75 # 设置音量为75%
fastgame.utils.music.play_sound
播放音频。会在内部创建一个music引擎的fastgame.Player
对象。
用法:
play_sound(file: str, **kwargs
)
参数详解:
file
: 音频文件路径。kwargs
: 关键字参数,play的参数
fastgame.utils.printscreen
Fastgame截图工具模块。
fastgame.utils.printscreen.screenshot
对窗口进行截图,并保存。
返回截图图片的fastgame.Sprite
对象。
用法:
screenshot(save_path: str = 'screenshot.png'
)
参数save_path
: 截图图片路径。
fastgame.utils.timer
Fastgame计时器模块。
fastgame.utils.timer.Timer
Fastgame计时器类。
fastgame.utils.timer.Timer()
创建计时器。
fastgame.utils.timer.Timer.reset
计时器归零。
fastgame.utils.timer.Timer.get
获取计时器计时值的近似值。
用法:
Timer.get(digits: int = 2
)
参数digits
: 保留的小数点位数。
实例:
import time
from fastgame import Timer
timer = Timer()
timer.reset()
time.sleep(1)
print(timer.get())
fastgame.utils.timer.Timer.get_real
获取计时器计时值的准确值。
fastgame.widget.background
Fastgame背景组件模块。
fastgame.widget.background.Background
Fastgame背景组件类。
继承自fastgame.core.sprite.Sprite
fastgame.widget.background.Background()
用法:
Background(image: str, auto_resize=True
)
参数详解:
image
: 背景图片路径。auto_resize
: 是否自适应窗口大小(自动缩放)。
fastgame.widget.background.Background.clone
克隆一个背景,用于双背景。
返回此克隆体。
fastgame.widget.background.Background.rolling_left
向左滚动,需要双背景。
用法:
Background.rolling_left(speed: int = 4
)
例子:
from fastgame import FastGame, Background
game = FastGame()
background1 = Background('test.png')
background2 = background1.clone()
@game.update
def update():background1.update()background2.update()background1.rolling_left()background2.rolling_left()
fastgame.widget.background.Background.rolling_right
向右滚动,需要双背景。
用法:
Background.rolling_right(speed: int = 4
)
fastgame.widget.background.Background.rolling_up
向上滚动,需要双背景。
用法:
Background.rolling_up(speed: int = 4
)
fastgame.widget.background.Background.rolling_down
向下滚动,需要双背景。
用法:
Background.rolling_up(speed: int = 4
)
fastgame.widget.button
Fastgame按钮组件模块。
fastgame.widget.button.Button
Fastgame按钮组件类。
fastgame.widget.button.Button()
用法:
Button(image: str, size: Tuple[int, int] = None,command: Callable[[], Any] = _pass, **kwargs
)
参数详解:
image
: 按钮图片路径。size
: 按钮大小。command
: 当按钮按下时,调用的函数。仿照tkinter
设计模式。callback
: 作为关键字实参被传入时,覆盖command
实参值。
fastgame.widget.button.Button.update
在窗口上更新此按钮,并检测和调用回调。
必须在被Fastgame.update装饰过的函数中调用。
fastgame.widget.button.Button.set_command
设置回调函数。
用法:
Button.set_command(command: Callable[[], Any]
)
也可做装饰器使用。
实例:
from fastgame import FastGame, Button
game = FastGame()
btn = Button('test.png')
@btn.set_command
def when_btn_down():...
fastgame.widget.canvas
Fastgame画笔组件和画笔模块。
fastgame.widget.canvas.Canvas
Fastgame画布组件类。
fastgame.widget.canvas.Canvas()
用法:
Canvas(position: Tuple[int, int] = (0, 0), size: Tuple[int, int] = (100, 100),bgcolor: ColorType = BLACK
)
参数详解:
position
: 画笔左上角位置。size
: 画布大小。bgcolor
: 画布背景色。不进行Canvas.update可隐藏画布。
fastgame.widget.canvas.Canvas.update
在窗口上更新此画布。
必须在被Fastgame.update装饰过的函数中调用。
fastgame.widget.canvas.Canvas.init_pen
初始化此画布画笔对象,并获得该画笔对象。
如canvas.init_pen()
等价于Pen(canvas)
。
所有关键字实参均传递给Pen
类。
fastgame.widget.canvas.Pen
Fastgame画笔类。
fastgame.widget.canvas.Pen()
用法:
Pen(canvas: Canvas, color: ColorType = WHITE, start_pos: Tuple[int, int] = (0, 0)
)
参数详解:
canvas
: 画笔的画布实例化对象。color
: 画笔的初始笔触色。start_pos
: 画笔起始位置。
fastgame.widget.canvas.Pen.set_color
设置画笔颜色。
用法:
Pen.set_color(color: ColorType
)
参数color
: 画笔笔触色。
fastgame.widget.canvas.Pen.down
设置画笔为落笔状态。
抬笔和落笔的状态参考了Scratch3
。
fastgame.widget.canvas.Pen.up
设置画笔为抬笔状态。
fastgame.widget.canvas.Pen.move_to
移动至某点。
当处于落笔状态时,会在原点和移动点画线。
当移动点位于画笔之外时,会引发OutOfCanvasError
用法:
Pen.move_to(x: int,y: int
)
参数x
: 移动点X坐标。
参数y
: 移动点Y坐标。
fastgame.widget.canvas.Pen.line
在当前点和另一点之间画线。
另一点不受画布大小影响。
用法:
Pen.line(x: int,y: int
)
参数x
: 另一点X坐标。
参数y
: 另一点Y坐标。
fastgame.widget.canvas.Pen.circle
画圆形。
圆形位置不受画布影响。
用法:
Pen.circle(x: int, y: int, radius: int, fill: bool = True, width: int = 1
)
x
: 圆形中心X坐标。y
: 圆形中心Y坐标。radius
: 圆形半径。fill
: 是否填充圆形。width
: 圆形边框大小。
fastgame.widget.canvas.Pen.rectangle
画矩形(长方形)。
矩形位置不受画布影响。
用法:
Pen.rectangle(x: int, y: int, size: Tuple[int, int], fill: bool = True, width: int = 1
)
参数详解:
x
: 矩形X坐标。y
: 矩形Y坐标。size
: 矩形大小。fill
: 是否填充矩形。width
: 矩形边框大小。
fastgame.widget.canvas.Pen.polygon
绘制任意多边形。
多边形位置不受画布影响。
用法:
Pen.polygon(points: List[Tuple[int, int]], fill: bool = True, width: int = 1
)
参数详解:
points
: 多边形各顶点坐标列表。fill
: 是否填充多边形。width
: 多边形边框大小。
fastgame.widget.canvas.Pen.fill_screen
将窗口统一填充某一种颜色。
用法:
Pen.fill_screen(fill_color: ColorType
)
参数fill_color
: 填充色。
fastgame.widget.label
Fastgame文字组件模块。
fastgame.widget.label.Label
Fastgame文字组件类。
需要pygame.font
模块运行正常。
有些操作系统不支持。
继承自pygame.sprite.Sprite
。
绝大多数方法与fastgame.core.sprite.Sprite
相同。
fastgame.widget.label.Label()
用法:
Label(text: str, font: str = None, size: int = 16, use_sys_font: bool = False,color: ColorType = BLACK, bgcolor: ColorType = None, antialias: bool = True, bold=False, italic=False,**kwargs
)
参数详解:
text
: 文本内容。font
: 字体文件路径或字体名称。size
: 文本大小。use_sys_font
: 是否使用系统字体。color
: 文本前景色。bgcolor
: 文本背景色。bold
: 是否加粗。italic
: 是否斜体。
注:粗体和斜体仅在使用系统字体时有效。antialias
: 是否使用抗锯齿。- 关键字实参
fgcolor
: 覆盖color
实参的值。 - 关键字实参
foreground_color
: 覆盖color
实参及fgcolor
关键字实参的值。 - 关键字实参
background_color
: 覆盖bgcolor
实参的值。
fastgame.widget.label.Label.position
虚拟属性。
文字位置。
实例:
from fastgame import FastGame, Label
game = FastGame()
text = Label('Hello, Fast Game')
x, y = text.position # 获取文字位置
text.position = (50, 50) # 设置文字位置
fastgame.widget.label.Label.update
在窗口上更新此文本。
必须在被Fastgame.update装饰过的函数中调用。
fastgame.widget.label.Label.hide
同fastgame.core.sprite.Sprite.hide
。
fastgame.widget.label.Label.show
同fastgame.core.sprite.Sprite.show
。
fastgame.widget.label.Label.collide_other
同fastgame.core.sprite.Sprite.collide_other
。
fastgame.widget.label.Label.collide_edge
同fastgame.core.sprite.Sprite.collide_edge
。
fastgame.widget.label.Label.move_to_mouse
同fastgame.core.sprite.Sprite.move_to_mouse
。
fastgame.widget.label.Label.add_x
同fastgame.core.sprite.Sprite.add_x
。
fastgame.widget.label.Label.add_y
同fastgame.core.sprite.Sprite.add_y
。
fastgame.widget.label.Label.set_x
同fastgame.core.sprite.Sprite.set_x
。
fastgame.widget.label.Label.set_y
同fastgame.core.sprite.Sprite.set_y
。
fastgame.widget.label.Label.move_to
同fastgame.core.sprite.Sprite.move_to
。
fastgame.widget.label.Label.resize
同fastgame.core.sprite.Sprite.resize
。
fastgame.widget.label.Label.set_style
设置字体风格。
用法:
Label.set_style(color: ColorType = BLACK, bgcolor: ColorType = None, antialias: bool = True, **kwargs
)
所有参数同__init__
方法。
高级实例(设置字体):
from fastgame import FastGame, Label
from pygame.font import SysFont # fastgame兼容pygame
game = FastGame()
text = Label('Hello World')
songti = SysFont('宋体', 16)
text.font = songti
text.set_text(text.text)
fastgame.widget.label.Label.set_text
设置文字。
用法:
Label.set_text(text: str
)
参数text
: 文本内容。
fastgame.widget.link
Fastgame超链接组件模块。
fastgame.widget.link.LinkButton
Fastgame超链接类,相当于HTML中的<a>
标签。
需要联网。内部封装webbrowser
模块。
继承自fastgame.widget.button.Button
。
如下python代码:
from fastgame import LinkButton
LinkButton('img/test.png', 'https://python.org/')
等价于:
<a href="https://python.org/"><img src="/img/test.png"></a>
fastgame.widget.link.LinkButton()
用法:
LinkButton( image: str, url: str, size: Tuple[int, int] = None, style=OPEN
)
参数详解:
image
: 按钮图片。url
: 按下按钮所对应的URL。size
: 按钮大小。style
: 浏览器打开方式。
代码 | 打开方式 |
---|---|
fastgame.locals.OPEN
|
正常打开 |
fastgame.locals.NEW
|
新窗口打开 |
fastgame.locals.NEW_TAB
|
新标签页打开 |
fastgame.widget.link.LinkButton.set_url
设置按下按钮所对应的URL。
用法:
LinkButton.set_url(url: str
)
参数url
: 按下按钮所对应的URL。
fastgame.widget.link.LinkButton.set_style
设置浏览器打开方式。
用法:
LinkButton.set_style(style=OPEN
)
参数style
: 浏览器打开方式。
fastgame.widget.video.video
Fastgame视频组件模块。
测试功能,可能在之后的版本中删除。
fastgame.widget.video.video.Video
Fastgame视频组件类。
内部使用opencv+numpy+pillow。
加载大视频速度较慢。
视频无声音。但可以使用fastgame.utils.music
播放视频声音。
fastgame.widget.video.video.Video()
用法:
Video(video_file: str, position: Tuple[int, int] = (0, 0), size: Tuple[int, int] = None,start: int = 0, set_fps: bool = True, length: int = 16, progress_bar: bool = False
)
参数详解:
video_file
: 视频文件路径。position
: 视频左上角相对窗口的位置。size
: 视频缩放后大小。start
: 开始播放时,使用的图片索引。set_fps
: 是否将窗口的FPS设为视频的FPS。length
: 临时图片集名称字符长度。progress_bar
: 是否显示进度条。进度条封装tqdm
。
工作原理:
- 将视频分解为图片集
- 排序并读入各图片
- 按FPS更换图片
fastgame.widget.video.video.Video.update
在窗口上更新此视频组件的这一帧图片。
必须在被Fastgame.update装饰过的函数中调用。
fastgame.widget.video.video.Video.next
将图片调整为下一帧。
若为最后一帧,则重头开始。
返回值:是否为最后一帧图片。
播放实例:
from fastgame import Video, FastGame
game = FastGame()
video = Video('test.mp4', progress_bar=True)
@game.update
def update():video.update()video.next()
game.mainloop()
三、Fastgame例子
做一个贪吃蛇
import randomimport fastgame
from fastgame.utils.color import * # 导入常用颜色SNAKE_WIDTH = 20 # 定义贪吃蛇的宽
WIDTH = 850
HEIGHT = 700game = fastgame.FastGame('Snake', size=(WIDTH, HEIGHT), fps=10) # 创建游戏
canvas = fastgame.Canvas(size=(WIDTH, HEIGHT), bgcolor=WHITE) # 创建贪吃蛇画布
pen = canvas.init_pen() # 创建画笔
score_text = fastgame.Label('Score: 0', size=36, color=BLUE)snake = [[WIDTH // 2, HEIGHT // 2 - SNAKE_WIDTH],[WIDTH // 2, HEIGHT // 2],[WIDTH // 2, HEIGHT // 2 + SNAKE_WIDTH],[WIDTH // 2, HEIGHT // 2 + SNAKE_WIDTH * 2]
] # 定义蛇的身体
head = snake[0].copy() # 蛇头
angel = 'left' # 移动方向
score = 0 # 分数def get_food(): # 定义获取食物的方法x = random.randint(SNAKE_WIDTH, WIDTH - SNAKE_WIDTH)y = random.randint(SNAKE_WIDTH, HEIGHT - SNAKE_WIDTH)x -= x % SNAKE_WIDTH # 防止蛇吃不到食物y -= y % SNAKE_WIDTHreturn [x, y]def eaten_food(): # 判断是否吃到食物x0, y0 = foodx1, y1 = headreturn abs(x0 - x1) <= SNAKE_WIDTH and abs(y0 - y1) <= SNAKE_WIDTHdef move(move_angel: str = 'left'): # 定义移动方法global angel, food, scoreangel = move_angelif eaten_food(): # 吃到食物score += 1food = get_food()else:snake.pop() # 删除蛇的尾巴if move_angel == 'left':head[0] -= SNAKE_WIDTHelif move_angel == 'right':head[0] += SNAKE_WIDTHelif move_angel == 'up':head[1] -= SNAKE_WIDTHelif move_angel == 'down':head[1] += SNAKE_WIDTHsnake.insert(0, head.copy()) # 插入蛇头def dead(): # 判断是否死亡body = snake.copy()del body[0]return ((head in body) # 撞到自己or head[0] <= 0 # 撞墙or head[0] >= WIDTHor head[1] <= 0or head[1] >= HEIGHT)food = get_food()@game.update
def update(over=False): # 定义刷新函数pen.fill_screen(PINK)score_text.set_text(f'Score: {score}')score_text.update()pen.set_color(WHITE) # 蛇身颜色for body in snake: # 遍历绘制蛇身pen.rectangle(*body, (SNAKE_WIDTH, SNAKE_WIDTH))pen.set_color(BLACK) # 蛇头颜色pen.rectangle(*head, (SNAKE_WIDTH, SNAKE_WIDTH))pen.set_color(GREEN) # 食物颜色pen.rectangle(*food, (SNAKE_WIDTH, SNAKE_WIDTH))move(angel)if dead(): # Game Overif not over:update(True) # 将Game Over那一帧渲染出来game_over()def game_over():over_sprite = fastgame.screenshot()game_over_text = fastgame.Label('Game Over', size=96, color=WHITE)game_over_text.position = (0, HEIGHT // 2)@game.update # 重定义渲染回调def reset_update():over_sprite.update()game_over_text.update()@game.on_key_down
def on_key_down():global angelkey = game.event.get('key')if key == fastgame.K_LEFT and angel != 'right':angel = 'left'elif key == fastgame.K_RIGHT and angel != 'left':angel = 'right'elif key == fastgame.K_UP and angel != 'down':angel = 'up'elif key == fastgame.K_DOWN and angel != 'up':angel = 'down'if __name__ == '__main__':game.mainloop()
做一个跳一跳
素材准备
素材来源:mblock
背景:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UXi5Iggq-1643606273100)(https://res-cn.makeblock.com/mblock/static/assets/scratch/65f2cfe058cbfd2a3b56263759c5c61f.svg)]
角色:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jAEyawVd-1643606273102)(https://res-cn.makeblock.com/mblock/static/assets/scratch/442f1d98da81401ad43560e920765d3f.svg)]
跳板:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLnDgGSq-1643606273102)(https://res-cn.makeblock.com/mblock/static/assets/scratch/5cceb73efc71c01bfa4a0592ecd6ffcb.svg)]
实现
import fastgame
import random# 定义长宽
WIDTH = 1000
HEIGHT = 725
SIDE = 150 # 边缘大小game = fastgame.FastGame('Jump and Jump', (WIDTH, HEIGHT), fps=30)# 导入素材
background = fastgame.Background('background.svg')
dog = fastgame.Sprite('dog.svg')
drum1 = fastgame.Sprite('drum.svg')
drum2 = drum1.clone()
score_label = fastgame.Label('Score: 0', size=72) # 显示分数的文字组件timer = fastgame.Timer() # 创建计时器
score = 0def get_drum_pos(): # 定义获取两个跳板位置的方法y = HEIGHT // 2x0 = random.randint(SIDE, WIDTH // 2 - SIDE)x1 = random.randint(WIDTH // 2 + SIDE, WIDTH - SIDE)return (x0, y), (x1, y)def set_pos(): # 重设角色位置drum1.position, drum2.position = get_drum_pos()x, y = drum1.positiondog.position = (x, y - 70)def jump(time): # 跳跃global scoreadd = time * 300 # 根据蓄力时间计算跳跃长度dog.add_x(add)if not dog.collide_other(drum2): # 没有跳到跳板上game.destroy()else:score += 1set_pos() # 重设位置set_pos()@game.update
def update(): # 定义刷新函数background.update()drum1.update()drum2.update()score_label.set_text(f'Score: {score}')score_label.update()dog.update()@game.on_key_down
def on_key_down():if game.event['key'] == fastgame.K_SPACE: # 按下空格键timer.reset() # 计时器归零@game.on_key_up
def on_key_up():if game.event['key'] == fastgame.K_SPACE: # 松开空格键time = timer.get()jump(time)if __name__ == '__main__':game.mainloop()
fastgame文档相关推荐
- 导出swagger2生成的文档
百度了好多篇用法,没法用.特此记录一下 一.下载项目 下载https://github.com/Swagger2Markup/spring-swagger2markup-demo下的项目,保存,注意文 ...
- README 规范和项目文档规范
1. README 规范 我们直接通过一个 README 模板,来看一下 README 规范中的内容: # 项目名称<!-- 写一段简短的话描述项目 -->## 功能特性<!-- 描 ...
- FastAPI 自动生成的docs文档没法使用
FastAPI 自动生成的docs文档没法使用,当展开路径时候一直在转圈,具体就是这样 这个是由于swagger-ui 3.30.1 中的bug导致,具体bug可以看这里 我们可以通过在FastAPI ...
- 【软件工程】VB版机房文档总结
前言: 软工视频+软工文档+UML视频+UML图的学习过程图! 这部分的知识很厚,只是知道了个大概!最开始 慢悠悠的像个老爷爷走进度,后来遇到点什么事,妈呀,管不了那么多了,赶紧弄完在说,拖了多久了都 ...
- 智能文档理解:通用文档预训练模型
预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...
- 基于javaGUI的文档识别工具制作
基于javaGUI的文档识别工具制作 对于某些文本,其中富含了一些标志,需要去排除,以及去获得段落字数,以下是我个人写的一个比较简单的文档识别工具,含导入文件.导出文件以及一个简单的识别功能. 1.功 ...
- 从单一图像中提取文档图像:ICCV2019论文解读
从单一图像中提取文档图像:ICCV2019论文解读 DewarpNet: Single-Image Document Unwarping With Stacked 3D and 2D Regressi ...
- 函数小知识点(文档字符串,闭包等)
1 文档字符串(Documentation Strings) 一般被称为docstring,一款你应当使用的重要工具,它能够帮助你更好地记录程序并让其更加易于理解.令人惊叹的是,当程序实际运行时,我们 ...
- Spring Boot 集成Swagger2生成RESTful API文档
Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...
- c语言 如何读多种数据类型 非类,c语言程序设计教学大纲(非电气类)文档.doc
c语言程序设计教学大纲(非电气类)文档 <C语言程序设计>课程教学大纲 主任 教研室主任 大纲执笔人 姜长洪 王海荣 C语言备课组 一.课程基本信息 课程编号:×××× 课程名称:C语言程 ...
最新文章
- 《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式
- 有趣的开源 AI 换脸工具:faceswap
- java统计 pv uv_统计PV、UV的新武器——Aviator
- 获取相册所有uri_URI转码
- 四位先行进位电路逻辑表达式_数字电子技术考试卷以及答案(4套)
- php 判断接受邮件地址,PHP:电子邮件验证并接受来自特定域的电子邮件地址
- 根据checkbox组的选中状态给list数组赋值
- 漫画:什么是分布式事务
- (翻译).NET应用架构
- 表单提交防止恶意修改
- 孪生网络图像相似度_孪生网络(Siamese Network)
- python3GUI--浏览器By:PyQt5(附源码)
- Hive函数collect_set、concat_ws、concat、if
- 一起读slam论文之PTAM-Parallel Tracking and Mapping for Small AR Workspace
- “个人数据库操作可视化系统”设计思维导图
- jQuery cdn加速
- 扔掉“铁饭碗”、靠脑白金翻盘,如今 60 岁的史玉柱“重返一线”改游戏
- Docker架构简介 命令详解
- 可视化工具VisIt源码编译教程(Windows,图文讲解)
- PyQt5高级界面控件之QDockWidget
热门文章
- 计算机设备统计报告,中国互联网络发展状况统计报告-中国科学院计算机网络信息中心.DOC...
- HTML期末大作业~海贼王大学生HTML网页制作10个页面作品(HTML+CSS+JavaScript)
- mysql数据库修复工具 innodb表数据恢复 ibd文件恢复工具
- Error MSB3774 找不到SDK WindowsMobile, Version=10.0.17763.0
- nginx 日志格式打印
- 读书笔记-《程序员成长课》
- java在文本框动态显示时间,在文本框中动态地显示当前时间,有木有人做过,指导下初学者...
- IE首页被劫持,桌面图标异常的个人综合清理方法
- Appium自动化测试基础--补充:C/S架构和B/S架构说明
- PathMeasure打造万能路径动效