小学生python游戏编程arcade----灯光示例
小学生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----灯光示例相关推荐
- 小学生python游戏编程arcade----基本知识3
小学生python游戏编程arcade----基本知识3 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.多摄象头显得分 1.1得分 1.2 两个摄象机的绘制 1.3 效果图 1 ...
- 小学生python游戏编程arcade----可旋转的坦克的发射子弹
小学生python游戏编程arcade----可旋转的坦克的发射子弹 前言 小学生python游戏编程arcade----可旋转坦克的发射子弹 1.可旋转坦克的发射子弹 1.1 子弹的类 1.2 发射 ...
- 小学生python游戏编程arcade----动画图片实现爆炸效果
小学生python游戏编程arcade----动画图片实现爆炸效果 前言 动画图片实现爆炸效果 1.爆炸类的的实现 1.1爆炸图片 1.2 类的定义 1.3 爆炸类的引用 1.4 爆炸类的更新 1.5 ...
- 小学生python游戏编程arcade----excel调用
小学生python游戏编程arcade----excel调用 前言 小学生python游戏编程arcade----excel调用 1.excel文件 1.1 excel表头 1.2 excel文件 1 ...
- 小学生python游戏编程arcade----爆炸粒子类
小学生python游戏编程arcade----爆炸粒子类 前言 1.1 参数设置 粒子加速下降的速度.如果不需要,则为0 粒子退出的速度 粒子移动的速度.范围为2.5<-->5,设置为2. ...
- 小学生python游戏编程arcade----基本知识1
小学生python游戏编程arcade----基本知识 前言 基本知识 1.简单窗体 2.试着添加角色及背景 3.场景 4.角色控制及物理引擎 总结 源码获取 前言 前面章节分享试用了pyzero,p ...
- 小学生python游戏编程arcade----敌人自动面向角色并开火
小学生python游戏编程arcade----敌人自动面向角色并开火 前言 敌人自动攻击角色的实现 1. 1.1 计算角度,使用敌人面向角色 1.2 自动生成各色子弹,不是通过调用图片 1.3 控制敌 ...
- 小学生python游戏编程arcade----坦克大战2
小学生python游戏编程arcade----坦克大战2 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.提示框制作 1.1养眼绿色 1.2 画距形提示框 1.3 效果图 1.4 ...
- 小学生python游戏编程arcade----原码分析
小学生python游戏编程arcade----原码分析 物理引擎 self.physics_engine = arcade.PhysicsEnginePlatformer( 我们正在发送我们的 Spr ...
最新文章
- 你只知道JVM栈,知不知道栈帧、局部变量表、slot、操作数栈?
- 华为2013校园招聘上机笔试题
- asp.net连oracle数据库,ASP.NET连接Oracle数据库的步骤详解(转)
- 2011年上半年软考成绩查询网站,祝贺自己顺利通过2011年系统分析师考试!
- VS调用tensorflow模型记录
- 双活架构保服务24小时在线
- python subprocess pipe_python类库31[进程subprocess与管道pipe]
- memcache 源码分析之开场白
- 在AIX系统下查询硬件信息的方法
- 你妈咪喊你回家刷题~~
- 多功能智慧路灯杆商业模式解决方案
- 机器学习、数据挖掘、神经网络、人工智能和模式识别之间,主要是什么关系
- LVGL|lvgl中文教程手册(lvgl中文文档学习教程)
- Java基础之《JDK文档》
- numpy中的log和ln函数
- winhex快捷键使用
- vs2015卸载问题解决方案.vs2013编译缺少cscui.dll 及 Delphi 编译报ToolsVersion “14.0“错误
- python算法系列排序与查找_Python 排序与查找算法收集
- 常见存储介质介绍以及SD卡启动系统方法
- 大数据调度系统为什么选型Apache DolphinScheduler ?