小学生python游戏编程arcade----游戏界面按钮实现事件实现的三种方法

news2025/7/13 8:14:50

小学生python游戏编程arcade----游戏界面按钮实现事件实现的三种方法

    • 前言
    • 游戏界面按钮实现事件实现的三种方法
      • 1、按钮定义及事件3种方法
        • 1.1 按钮定义
        • 1.2三种事件引用方法
          • 1.2.1 类法
          • 1.2.2 事件方法2,自定义方法函数
          • 1.2.3 事件方法3,使用装饰器处理onclick事件
        • 1.3 效果图
        • 1.4 代码实现
      • 2、定义为类,以便游戏集成
        • 2.1 定义GuiGL类
        • 2.2 加个背景
        • 2.3 效果图![在这里插入图片描述](https://img-blog.csdnimg.cn/49269a8310d54d9783899d455936895f.png)
        • 2.4 代码实现
    • 源码获取

前言

接上篇文章小学生python游戏编程arcade----基本知识1、2,连接如下:小学生python游戏编程arcade----基本知识,小学生python游戏编程arcade----基本知识2,小学生python游戏编程arcade----基本知识3,
小学生python游戏编程arcade----基本知识5 自动行走的敌人,小学生python游戏编程arcade----6射击及子弹

游戏界面按钮实现事件实现的三种方法

1、按钮定义及事件3种方法

1.1 按钮定义

start_button = arcade.gui.UIFlatButton(text=“开始”, width=200)

1.2三种事件引用方法

1.2.1 类法

class QuitButton(arcade.gui.UIFlatButton):
def on_click(self, event: arcade.gui.UIOnClickEvent):
arcade.exit()

1.2.2 事件方法2,自定义方法函数
start_button.on_click = self.on_click_start
def on_click_start(self, event):
    print("自定义方法调用--开始:", event)
1.2.3 事件方法3,使用装饰器处理onclick事件

使用装饰器处理onclick事件
@settings_button.event(“on_click”)
def on_click_settings(event):
print(“装饰器处理onclick事件Settings:”, event)

1.3 效果图

在这里插入图片描述

1.4 代码实现

"""
按钮创建及处理按钮事件的三种方法
"""
import arcade
import arcade.gui


# 事件方法1--定义类
class QuitButton(arcade.gui.UIFlatButton):
    def on_click(self, event: arcade.gui.UIOnClickEvent):
        arcade.exit()


class MyWindow(arcade.Window):
    def __init__(self):
        super().__init__(800, 600, "按钮事件三种方法", resizable=True)

        # 用于处理UI的UIManager.
        self.manager = arcade.gui.UIManager()
        self.manager.enable()

        # 设置背景色
        arcade.set_background_color(arcade.color.DARK_BLUE_GRAY)

        # 创建垂直BoxGroup以对齐按钮
        self.v_box = arcade.gui.UIBoxLayout()

        # Create the buttons
        start_button = arcade.gui.UIFlatButton(text="开始", width=200)
        self.v_box.add(start_button.with_space_around(bottom=20))

        settings_button = arcade.gui.UIFlatButton(text="设置", width=200)
        self.v_box.add(settings_button.with_space_around(bottom=20))

        # Again, method 1. Use a child class to handle events.
        quit_button = QuitButton(text="退出", width=200)
        self.v_box.add(quit_button)

        #  事件方法2,自定义方法函数
        start_button.on_click = self.on_click_start

        #  事件方法3,
        #使用装饰器处理onclick事件
        @settings_button.event("on_click")
        def on_click_settings(event):
            print("装饰器处理onclick事件Settings:", event)

        # 创建一个小部件来容纳v_box小部件,它将使按钮居中
        self.manager.add(
            arcade.gui.UIAnchorWidget(
                anchor_x="center_x",
                anchor_y="center_y",
                child=self.v_box)
        )

    def on_click_start(self, event):
        print("自定义方法调用--开始:", event)

    def on_draw(self):
        self.clear()
        self.manager.draw()


window = MyWindow()
arcade.run()

2、定义为类,以便游戏集成

2.1 定义GuiGL类

class GuiGL(object):
def init(self):
# 用于处理UI的UIManager.
self.manager =UIManager()
self.manager.enable()

    # 创建垂直BoxGroup以对齐按钮
    self.v_box = UIBoxLayout()
    # 创建一个小部件来容纳v_box小部件,它将使按钮居中
    self.manager.add(
       UIAnchorWidget(
            anchor_x="center_x",
            anchor_y="center_y",
            child=self.v_box)
    )

2.2 加个背景

    self.g = GuiGL()
    # 初始化场景
    self.scene = arcade.Scene()
    background = arcade.Sprite("images/坦克装甲车.jpg", 1)
    background.center_x = SCREEN_WIDTH / 2
    background.center_y = SCREEN_HEIGHT / 2
    self.scene.add_sprite("bg", background)
    使用时,可以把相关gui的都放在GuiGL这个类中,方便使用

2.3 效果图在这里插入图片描述

2.4 代码实现

"""
按钮创建及处理按钮事件的三种方法
"""
import arcade
from arcade.gui import UIFlatButton,UIOnClickEvent,UIManager,UIBoxLayout,UIAnchorWidget


# 事件方法1--定义类
class QuitButton(UIFlatButton):
    def on_click(self, event: UIOnClickEvent):
        arcade.exit()

class GuiGL(object):
    def __init__(self):
        # 用于处理UI的UIManager.
        self.manager =UIManager()
        self.manager.enable()

        # 创建垂直BoxGroup以对齐按钮
        self.v_box = UIBoxLayout()
        # 创建一个小部件来容纳v_box小部件,它将使按钮居中
        self.manager.add(
           UIAnchorWidget(
                anchor_x="center_x",
                anchor_y="center_y",
                child=self.v_box)
        )


SCREEN_WIDTH=1200
SCREEN_HEIGHT=800


class Game(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "按钮事件三种方法", resizable=True)
        self.g = GuiGL()
        # 初始化场景
        self.scene = arcade.Scene()
        background = arcade.Sprite("images/坦克装甲车.jpg", 1)
        background.center_x = SCREEN_WIDTH / 2
        background.center_y = SCREEN_HEIGHT / 2
        self.scene.add_sprite("bg", background)
        # 设置背景色
        arcade.set_background_color(arcade.color.DARK_BLUE_GRAY)
        red_style = {
            "font_name": ("calibri", "arial"),
            "font_size": 15,
            "font_color": arcade.color.WHITE,
            "border_width": 2,
            "border_color": None,
            "bg_color": arcade.color.REDWOOD,

            # used if button is pressed
            "bg_color_pressed": arcade.color.WHITE,
            "border_color_pressed": arcade.color.RED,  # also used when hovered
            "font_color_pressed": arcade.color.RED,
        }

        #创建按钮
        start_button = UIFlatButton(text="开始", width=200, style=red_style)
        self.g.v_box.add(start_button.with_space_around(bottom=20)) # 按钮底部20

        settings_button = UIFlatButton(text="设置", width=200, style=red_style)
        self.g.v_box.add(settings_button.with_space_around(bottom=20))

        # Again, method 1. Use a child class to handle events.
        quit_button = QuitButton(text="退出", width=200)
        self.g.v_box.add(quit_button)

        #  事件方法2,自定义方法函数
        start_button.on_click = self.on_click_start

        #  事件方法3,
        #使用装饰器处理onclick事件
        @settings_button.event("on_click")
        def on_click_settings(event):
            print("装饰器处理onclick事件Settings:", event)



    def on_click_start(self, event):
        print("自定义方法调用--开始:", event)

    def on_draw(self):
        self.clear()
        self.scene.draw()
        self.g.manager.draw()



window = Game()
arcade.run()

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 18/50次。
可以关注我,点赞我、评论我、收藏我啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十四届蓝桥杯校模拟赛详解+代码(一)

“须知少时凌云志,自许人间第一流” 鄙人11月八号有幸参加学校蓝桥杯校选拔赛,题型为5道填空题,5道编程题,总时间为4小时。奈何能力有限,只完成了5道填空和3道编程大题,现进行自省自纠,分享学习…

艾美捷细胞计数试剂盒-8(CCK-8),一步到位

艾美捷细胞计数试剂盒-8(CCK-8):用于简单准确的细胞增殖和细胞毒性测定的比色试剂盒。 艾美捷细胞计数试剂盒-8(CCK-8)特点: 1、一步到位,不含放射性同位素的即用溶液 2、与[3H]-胸苷掺入试验…

分销商城平台哪个好_分享分销商城开发步骤

微信分销商城平台分为两种: 第一种是入驻到别人的微信分销商城平台里面,帮助分销别人发布的商品从而获得佣金。 第二种情况是自己公司开发的微信分销商城平台,然后招募分销者进行分销公司的产品。 对于大家来讲肯定是自己公司开发的微信分销商…

数据结构与算法_大数据处理_求topK的两种求解方法

这篇笔记记录求大数据topk的两种方法,分别是大小二叉堆法和快速分割法,下面依次详解这两种方法的过程。 1 大/小根堆法 利用大根堆过滤前top k小的数据**;小根堆过滤前top k大的数据**; 下面用大根堆求前k个小元素为例。 思想&…

Python 算法:学习二分法

二分法,一个看似简单,逻辑易懂的算法,但是初次接触可能会有很多坑!主要是边界处理的问题。 下面以一个耳熟能详的案例来展开: 案例描述: 小B从1~100之间(含边界值)任意想一个数字&a…

Spring Security 在登录时如何添加图形验证码

前言 在前面的几篇文章中,登录时都是使用用户名 密码进行登录的,但是在实际项目当中,登录时,还需要输入图形验证码。那如何在 Spring Security 现有的认证体系中,加入自己的认证逻辑呢?这就是本文的内容&…

matplotlib简介

matplotlib是一款用于画图的软件,以下步骤建议在.ipynb中完成。 导包 你需要导入以下包: import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np一个简单案例 matplotlib 在 Figure上绘制图形,每一个Figure会包含…

【附源码】Python计算机毕业设计手游账号交易系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Java注解式开发

目录 1. ssm框架的搭建 1.1 maven项目的创建 1.2 导入所需的包到pom.xml文件中 1.3 导入数据库连接文件、日志文件、redis连接文件 1.3.1 数据库连接文件 1.3.2 日志文件 1.3.3 redis连接文件 1.4 导入spring-mybatis、spring-mvc、spring-base、spring-redis四种集成文…

改变自己 只需要两年

改变自己 只需要两年 https://v.douyin.com/rLDmdQK/ 可以快速浏览上面视频 今天分享的这篇文章是TED上的一篇演讲 希望对下定决心想改变的你一些帮助。 用两年时间证明你可以 两年时间不算多长,但与此同时,很多事情都能在两年内完成,你…

WinHex(三)

目录 一、新建简单卷 二、MBR作用与结构 一、新建简单卷 1.右键点击刚刚新建的虚拟磁盘,选择新建简单卷。我新建了两个一个是NTFS,一个是FAT32 2.我们在刚刚新建的虚拟磁盘中放入一张图片,打开WinHex,点击“打开磁盘”选项,打…

[野火]STM32 F103 HAL库开发实战指南笔记之简单外设总结

1、GPIO编程总结 使能 GPIO 端口时钟;初始化 GPIO 目标引脚为推挽输出模式;编写简单测试程序,控制 GPIO 引脚输出高、低电平。 这部分宏控制 LED 亮灭的操作是直接向 BSRR 寄存器写入控制指令来实现的,对 BSRR 低 16 位 写 1 输出…

大学生静态HTML网页源码 我的校园网页设计成品 学校班级网页制作模板 web课程设计 dreamweaver网页作业

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

从0实现线性回归

编码题: 按要求完成下面的内容 1请用python完成从0实现线性回归,尝试使用不同的训练参数(学习率,迭代次数), 以及不同的评价方法(MSE,MAE,RMSE,R2)等。 2比较说明sklearn的线性模…

断言(assert)的用法

参考:https://www.runoob.com/w3cnote/c-assert.html 目录作用总结与注意事项Demo作用 assert 是个宏,并且作用并非"报错"。 assert() 的用法像是一种"契约式编程",程序满足我的假设条件,才能正常良好的运作…

做视频素材资源(free视频,音频,图片)

素材资源 一、视频 Videezy :https://www.videezy.com/ Videovo:https://www.videvo.net/ mixkit:https://mixkit.co/,可以 distill:https://wedistill.io/ splitshire:https://www.splitshire.com/ pixa…

Mysql常见指令以及用法(保姆级)

文章目录基础篇通用语法及分类DDL(数据定义语言)数据库操作注意事项表操作DML(数据操作语言)添加数据注意事项更新和删除数据DQL(数据查询语言)基础查询条件查询聚合查询(聚合函数)分…

前端性能-首次加载优化70%

前言 本篇文章,我们来总结归纳下万恶的this以及衍生出来的call/apply/bind对this进行绑定,想了很久,决定用实例演示的方式来讲解this,这样才能够理解this,因为this确实变化莫测,只靠概念,是不能…

【JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】下篇

⌚️⌚️⌚️个人格言:时间是亳不留情的,它真使人在自己制造的镜子里照见自己的真相! 📖Git专栏:📑Git篇🔥🔥🔥 📖JavaScript专栏:📑js实用技巧篇…

【数据结构】带头双向循环链表基本操作的实现(C语言)

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🐌 个人主页:蜗牛牛啊 🔥 系列专栏:🛹初出茅庐C语言、🛴数据结构 📕 学习格言:博…