小学生python游戏编程arcade----灯光示例

  • 前言
  • 灯光阴影效果
    • 1、灯光效果
      • 1.1 玩家灯光效果
      • 1.2 代码
    • 2、灯光效果
      • 2.1 软效果
      • 2.2码实现
    • 3、硬效果
      • 3.1 灯光硬效果
      • 3.2代码实现
    • 4、灯光开关
      • 4.1 灯光开关
      • 4.2 代码实现
  • 灯光示例代码
  • 源码获取

前言

接上篇文章继续解绍arcade游戏编程的基本知识。游戏的灯光阴影效果

灯光阴影效果

1、灯光效果

1.1 玩家灯光效果

蓝色效果

白色效果

1.2 代码

        #创建一个灯光来跟随玩家。稍后,当玩家移动时,我们将对其进行定位。#我们只会在玩家打开灯光时将其添加到灯光层打开。我们从熄灯开始。radius = 150mode = 'soft'color = arcade.csscolor.WHITEself.player_light = Light(0, 0, radius, color, mode)

2、灯光效果

2.1 软效果


2.2码实现

# 白色灯光x = 100y = 200radius = 100mode = 'soft'color = arcade.csscolor.WHITElight = Light(x, y, radius, color, mode)self.light_layer.add(light)

3、硬效果

3.1 灯光硬效果


3.2代码实现

        # 创建三个重叠的RGB灯光,但不会褪色的“硬”灯。x = 650y = 150radius = 100mode = 'hard'color = arcade.csscolor.REDlight = Light(x, y, radius, color, mode)self.light_layer.add(light)

4、灯光开关

4.1 灯光开关

4.2 代码实现

    def on_key_press(self, key, _):if key == arcade.key.UP:self.player_sprite.change_y = MOVEMENT_speedelif key == arcade.key.DOWN:self.player_sprite.change_y = -MOVEMENT_speedelif key == arcade.key.LEFT:self.player_sprite.change_x = -MOVEMENT_speedelif key == arcade.key.RIGHT:self.player_sprite.change_x = MOVEMENT_speedelif key == arcade.key.SPACE:# 灯光开关if self.player_light in self.light_layer:self.light_layer.remove(self.player_light)else:self.light_layer.add(self.player_light)

灯光示例代码

"""
应用灯光示例
"""
import arcade
from arcade.experimental.lights import Light, LightLayerSCREEN_width = 1024
SCREEN_height = 768
VIEWPORT_margin = 200
MOVEMENT_speed = 5# 这是用于“环境光”的颜色。如果你不想要环境光,设置为黑色。
COLOR_ambient = (10, 10, 10)class MyGame(arcade.Window):""" Main Game Window """def __init__(self, width, height, title='灯光示例'):super().__init__(width, height,title, resizable=True)# 精灵列表self.background_sprite_list = Noneself.player_list = Noneself.wall_list = Noneself.player_sprite = None#引擎self.physics_engine = None# 用于滚动self.view_left = 0self.view_bottom = 0# --- 灯光相关 ---# 灯光层self.light_layer = None# 与玩家一起移动并打开/关闭单个灯光self.player_light = Nonedef setup(self):""" Create everything """# 精灵列表self.background_sprite_list = arcade.SpriteList()self.player_list = arcade.SpriteList()self.wall_list = arcade.SpriteList()# 玩家self.player_sprite = arcade.Sprite(":resources:images/animated_characters/female_person/""femalePerson_idle.png",0.4)self.player_sprite.center_x = 64self.player_sprite.center_y = 270self.player_list.append(self.player_sprite)# --- 灯光 ---# 灯光一定照在什么东西上。如果没有背景子画面或颜色,# #你只会看到黑色。因此,我们使用一个循环来创建一堆砖砖背景。for x in range(-128, 2000, 128):for y in range(-128, 1000, 128):sprite = arcade.Sprite(":resources:images/tiles/brickTextureWhite.png")sprite.position = x, yself.background_sprite_list.append(sprite)#创建一个灯光层,用于渲染对象,然后后期处理和添加灯光。这必须与屏幕大小匹配。self.light_layer = LightLayer(SCREEN_width, SCREEN_height)# 背景色self.light_layer.set_background_color(arcade.color.BLACK)# 白色灯光x = 100y = 200radius = 100mode = 'soft'color = arcade.csscolor.WHITElight = Light(x, y, radius, color, mode)self.light_layer.add(light)# 创建重叠的大白光x = 300y = 150radius = 200color = arcade.csscolor.WHITEmode = 'soft'light = Light(x, y, radius, color, mode)self.light_layer.add(light)# 红光x = 50y = 450radius = 100mode = 'soft'color = arcade.csscolor.REDlight = Light(x, y, radius, color, mode)self.light_layer.add(light)x = 250y = 450radius = 100mode = 'soft'color = arcade.csscolor.GREENlight = Light(x, y, radius, color, mode)self.light_layer.add(light)x = 450y = 450radius = 100mode = 'soft'color = arcade.csscolor.BLUElight = Light(x, y, radius, color, mode)self.light_layer.add(light)# 创建三个重叠的RGB灯光x = 650y = 450radius = 100mode = 'soft'color = arcade.csscolor.REDlight = Light(x, y, radius, color, mode)self.light_layer.add(light)x = 750y = 450radius = 100mode = 'soft'color = arcade.csscolor.GREENlight = Light(x, y, radius, color, mode)self.light_layer.add(light)x = 850y = 450radius = 100mode = 'soft'color = arcade.csscolor.BLUElight = Light(x, y, radius, color, mode)self.light_layer.add(light)# 创建三个重叠的RGB灯光,但不会褪色的“硬”灯。x = 650y = 150radius = 100mode = 'hard'color = arcade.csscolor.REDlight = Light(x, y, radius, color, mode)self.light_layer.add(light)x = 750y = 150radius = 100mode = 'hard'color = arcade.csscolor.GREENlight = Light(x, y, radius, color, mode)self.light_layer.add(light)x = 850y = 150radius = 100mode = 'hard'color = arcade.csscolor.BLUElight = Light(x, y, radius, color, mode)self.light_layer.add(light)#创建一个灯光来跟随玩家。稍后,当玩家移动时,我们将对其进行定位。#我们只会在玩家打开灯光时将其添加到灯光层打开。我们从熄灯开始。radius = 150mode = 'soft'color = arcade.csscolor.WHITEself.player_light = Light(0, 0, radius, color, mode)self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)# 设置self.view_left = 0self.view_bottom = 0def on_draw(self):self.clear()# 应该受到灯光影响的所有内容都会在该窗口中渲染“with”语句。屏幕上还没有渲染任何内容,只有灯光层。with self.light_layer:self.background_sprite_list.draw()self.player_list.draw()# 将灯光层绘制到屏幕上。这将使整个屏幕充满点亮的内容,即我们在上面的光层中绘制的内容self.light_layer.draw(ambient_color=COLOR_ambient)arcade.draw_text("按space转换显示与否灯光",10 + self.view_left, 10 + self.view_bottom,arcade.color.WHITE, 20)def on_resize(self, width, height):"""缩放 """# 缩放光层self.light_layer.resize(width, height)# 滚动屏幕self.scroll_screen()def on_key_press(self, key, _):if key == arcade.key.UP:self.player_sprite.change_y = MOVEMENT_speedelif key == arcade.key.DOWN:self.player_sprite.change_y = -MOVEMENT_speedelif key == arcade.key.LEFT:self.player_sprite.change_x = -MOVEMENT_speedelif key == arcade.key.RIGHT:self.player_sprite.change_x = MOVEMENT_speedelif key == arcade.key.SPACE:# 灯光开关if self.player_light in self.light_layer:self.light_layer.remove(self.player_light)else:self.light_layer.add(self.player_light)def on_key_release(self, key, _):if key == arcade.key.UP or key == arcade.key.DOWN:self.player_sprite.change_y = 0elif key == arcade.key.LEFT or key == arcade.key.RIGHT:self.player_sprite.change_x = 0def scroll_screen(self):""" 管理滚动 """# 左left_boundary = self.view_left + VIEWPORT_marginif self.player_sprite.left < left_boundary:self.view_left -= left_boundary - self.player_sprite.left# 右right_boundary = self.view_left + self.width - VIEWPORT_marginif self.player_sprite.right > right_boundary:self.view_left += self.player_sprite.right - right_boundary# 上top_boundary = self.view_bottom + self.height - VIEWPORT_marginif self.player_sprite.top > top_boundary:self.view_bottom += self.player_sprite.top - top_boundary# 下bottom_boundary = self.view_bottom + VIEWPORT_marginif self.player_sprite.bottom < bottom_boundary:self.view_bottom -= bottom_boundary - self.player_sprite.bottom# 确保我们的边界是整数值。当视口执行此操作时支持浮点数,对于这个应用程序,我们需要每个像素# 以直接映射到屏幕上的像素。我们不想任何舍入误差。self.view_left = int(self.view_left)self.view_bottom = int(self.view_bottom)arcade.set_viewport(self.view_left,self.width + self.view_left,self.view_bottom,self.height + self.view_bottom)def on_update(self, delta_time):# 更新所有精灵self.physics_engine.update()# 我们可以通过设置位置轻松移动灯光self.player_light.position = self.player_sprite.position# 滚动屏幕self.scroll_screen()if __name__ == "__main__":window = MyGame(SCREEN_width, SCREEN_height)window.setup()arcade.run()

源码获取

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

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

小学生python游戏编程arcade----灯光示例相关推荐

  1. 小学生python游戏编程arcade----基本知识3

    小学生python游戏编程arcade----基本知识3 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.多摄象头显得分 1.1得分 1.2 两个摄象机的绘制 1.3 效果图 1 ...

  2. 小学生python游戏编程arcade----可旋转的坦克的发射子弹

    小学生python游戏编程arcade----可旋转的坦克的发射子弹 前言 小学生python游戏编程arcade----可旋转坦克的发射子弹 1.可旋转坦克的发射子弹 1.1 子弹的类 1.2 发射 ...

  3. 小学生python游戏编程arcade----动画图片实现爆炸效果

    小学生python游戏编程arcade----动画图片实现爆炸效果 前言 动画图片实现爆炸效果 1.爆炸类的的实现 1.1爆炸图片 1.2 类的定义 1.3 爆炸类的引用 1.4 爆炸类的更新 1.5 ...

  4. 小学生python游戏编程arcade----excel调用

    小学生python游戏编程arcade----excel调用 前言 小学生python游戏编程arcade----excel调用 1.excel文件 1.1 excel表头 1.2 excel文件 1 ...

  5. 小学生python游戏编程arcade----爆炸粒子类

    小学生python游戏编程arcade----爆炸粒子类 前言 1.1 参数设置 粒子加速下降的速度.如果不需要,则为0 粒子退出的速度 粒子移动的速度.范围为2.5<-->5,设置为2. ...

  6. 小学生python游戏编程arcade----基本知识1

    小学生python游戏编程arcade----基本知识 前言 基本知识 1.简单窗体 2.试着添加角色及背景 3.场景 4.角色控制及物理引擎 总结 源码获取 前言 前面章节分享试用了pyzero,p ...

  7. 小学生python游戏编程arcade----敌人自动面向角色并开火

    小学生python游戏编程arcade----敌人自动面向角色并开火 前言 敌人自动攻击角色的实现 1. 1.1 计算角度,使用敌人面向角色 1.2 自动生成各色子弹,不是通过调用图片 1.3 控制敌 ...

  8. 小学生python游戏编程arcade----坦克大战2

    小学生python游戏编程arcade----坦克大战2 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.提示框制作 1.1养眼绿色 1.2 画距形提示框 1.3 效果图 1.4 ...

  9. 小学生python游戏编程arcade----原码分析

    小学生python游戏编程arcade----原码分析 物理引擎 self.physics_engine = arcade.PhysicsEnginePlatformer( 我们正在发送我们的 Spr ...

最新文章

  1. 你只知道JVM栈,知不知道栈帧、局部变量表、slot、操作数栈?
  2. 华为2013校园招聘上机笔试题
  3. asp.net连oracle数据库,ASP.NET连接Oracle数据库的步骤详解(转)
  4. 2011年上半年软考成绩查询网站,祝贺自己顺利通过2011年系统分析师考试!
  5. VS调用tensorflow模型记录
  6. 双活架构保服务24小时在线
  7. python subprocess pipe_python类库31[进程subprocess与管道pipe]
  8. memcache 源码分析之开场白
  9. 在AIX系统下查询硬件信息的方法
  10. 你妈咪喊你回家刷题~~
  11. 多功能智慧路灯杆商业模式解决方案
  12. 机器学习、数据挖掘、神经网络、人工智能和模式识别之间,主要是什么关系
  13. LVGL|lvgl中文教程手册(lvgl中文文档学习教程)
  14. Java基础之《JDK文档》
  15. numpy中的log和ln函数
  16. winhex快捷键使用
  17. vs2015卸载问题解决方案.vs2013编译缺少cscui.dll 及 Delphi 编译报ToolsVersion “14.0“错误
  18. python算法系列排序与查找_Python 排序与查找算法收集
  19. 常见存储介质介绍以及SD卡启动系统方法
  20. 大数据调度系统为什么选型Apache DolphinScheduler ?

热门文章

  1. 高效液相色谱图中峰高、峰面积、峰面积比
  2. SpringBoot 查询根据时间数据-数据库时区错误
  3. Spring源码解析十
  4. 慕课网模抖音小程序 springboot笔记
  5. stata解决内生性问题--样本选择
  6. 小米只能进fastboot和rec救砖
  7. java使用scanner.nextline方式接收键盘输入
  8. 使用位运算实现乘法和乘方运算
  9. ubuntu显卡驱动安装及cuda、cudnn等的资料备查
  10. Arcgis加载WMTS离线地图服务