Python游戏编程之Arcade模块介绍之角色类鼠标控制

  • 1、arcade含义

  • 2、Arcade模块简介与安装

  • 3、Arcade简单样本程序介绍

  • 4、Arcade模块中的角色类

  • 5、Arcade鼠标控制角色移动

  • 一、arcade英文含义

  • 英文arcade是游乐中心、商场、拱廊的意思。arcade游戏就是街机游戏的意思。下面是在bing搜索arcade的结果。
  • bing的arcade搜索结果
  • 二、 Arcade模块简介与安装

  • 1、简介: Arcade模块是Paul Vincent Craven 开发的一个用于制作2D街机游戏的模块。开发者是美国爱荷华州一所学院的教授。他已经教了10多年的Pygame编程。他说Pygame很伟大,但在教的过程中总要去解释为什么y坐标是反的。还有诸如事件循环event loop这些其实是不需要的等等。

    (来源https://opensource.com/article/18/4/easy-2d-game-creation-python-and-arcade)

    所以他就开发了Arcade模块,这个模块能非常简单地用Python创建2D游戏。坐标系也和数学中的坐标系一样,并且内置物理引擎。把它应用在少儿编程教学领域尚没见过。

    2、安装方法: pip install arcade

    目前最新版本是2.07。安装完后,如果在IDLE中导入时出现提示缺少pyglet-ffmpeg模块,则需要再次用pip命令安装:pip install pyglet-ffmpeg –user。

  • 三、Arcade简单样本程序介绍1

  • 游戏基本逻辑介绍 Arcade的作者提供了很多实例以供方便学习。在这些实例中,大多数都有一个叫MyGame的类。这个类是继承自arcade.Window类。这个是游戏的最顶层类。

    在MyGame类中,除了__init__方法外还有setup方法。它的存在是对游戏进行设置的。之所以定义这个方法是由于游戏结束后如果要重新开始或者进入下一关的时候可以再次调用setup方法,以对游戏进行再次初始化。

    MyGame类中还有update和on_draw与按键检测等方法。 通常来讲,通过按键检测可以对游戏中角色的坐标与方向进行更新后。然后调用update方法来真实体现这个更新。最后需要重画角色。我们只要在相应的方法中写代码即可。

    游戏的交互体现在按键检测,从而改变坐标,最后重画角色的图片来显示游戏的最新画面。在pygame中通常有一个游戏循环 ,我们需要手工来渲染画面。而在arcade中也有游戏循环。不过它只有一条语句,那就是arcade.run()。这个run会不断地调用按键检测方法们和update方法与on_draw方法,从而实现游戏循环。这就是游戏基本的逻辑。

  • Arcade简单样本程序介绍2
  • 四、 Arcade模块中的角色类1

  • 1arcade.Sprite Arcade模块对角色类进行了封装。角色类是可以直接实例化使用。它不像pygame中的Sprite类一样,必需自己写子类才能实例化一个角色。

    最简单的实例化一个角色只要用以下代码即可:

    bird = arcade.Sprite(“bird.png”)

    当某个事件发生时,比如鼠标移动事件,它的方法名是on_mouse_motion。我们只要写自己的代码即可。如,下面的代码会更新bird的坐标,这样当我们移动鼠标时就能控制它的移动。

    def on_mouse_motion(self, x, y, delta_x, delta_y):

    “”” 当鼠标移动时会自动地调用此方法 “””

    self.bird.center_x = x

    self.bird.center_y = y

  • 角色的坐标被改变,我们需要在update方法调用一次角色的update方法中真实的更新。最后还需要在on_draw方法中把它重画出来。这些都是在相应的方法中写上以下代码即可:def on_draw(self):

    “”” 渲染屏幕  ,帧率为60左右,即每60份之一秒会自动调用此方法  “””

    arcade.start_render()    # 此命令会用背景色填充屏幕,

    self.bird.draw()         # 重画小鸟

    def update(self, delta_time):

    “”” 所有的角色移动等游戏逻辑都在这里编写代码   “””

    self.bird.update()

五、鼠标控制角色移动的arcade样本代码

import arcade

SCREEN_WIDTH = 600                                           # 常量定义,屏幕宽度
SCREEN_HEIGHT = 480                                          # 常量定义,屏幕高度
SCREEN_TITLE = " 控制愤怒的小鸟_Arcade模版程序"              # 常量定义,屏幕标题

class MyGame(arcade.Window):
    """    继承自窗口类的游戏类,在具体的游戏中,重写以下方法,删除不需要重写的方法。    """

    def __init__(self, width, height, title):
        super().__init__(width, height, title)                #  调用父类的初始化方法新建一个窗口
        arcade.set_background_color(arcade.color.AMAZON)      #  设置背景颜色为亚马逊绿
        
    def setup(self):
        """ 这个方法是在实例化Mygame后对游戏进行一些设置。 """
        self.bird = arcade.Sprite("bird.png")        

    def on_draw(self):
        """ 渲染屏幕  ,帧率为60左右,即每60份之一秒会自动调用此方法  """        
        arcade.start_render()    # 此命令会用背景色填充屏幕,
        self.bird.draw()         # 重画小鸟

    def update(self, delta_time):
        """ 所有的角色移动等游戏逻辑都在这里编写代码   """
        self.bird.update()
    
    def on_mouse_motion(self, x, y, delta_x, delta_y):
        """ 当鼠标移动时会自动地调用此方法 """
        self.bird.center_x = x   # 把鼠标指针的x坐标设为角色中心点x坐标
        self.bird.center_y = y   # 把鼠标指针的y坐标设为角色中心点y坐标
        self.bird.scale = (x+y)/1000.0  #  越往右上角,角色越大
         
        

def main():
    """主要的函数"""
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)  #  实例化一个游戏
    game.setup()                                              # 对游戏进行设置
    arcade.run()                                              # 进入循环

if __name__ == "__main__":  
      main()

本人编写的更多arcade游戏与动画:http://arcade.academy/sample_games.html#lixingqiu-games