首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何基于ID实现从瓷砖中选择瓷砖?

如何基于ID实现从瓷砖中选择瓷砖?
EN

Game Development用户
提问于 2012-11-24 10:02:05
回答 1查看 383关注 0票数 0

假设我有一张每张包含8个精灵的瓷砖。每一颗雪碧都是一块30×30的瓷砖。

我编写了自己的自定义地图解析器/地图加载器,但是我在从文件中提取某个瓷砖sprite时遇到了问题。我会更好地描述我的问题,以便每个人都能理解。

我写了一堆材料,每一种材料都根据其相对于瓷砖的位置有一个值。例如,空值为1,草为2,岩石为3,等等。因此,在我的瓦片中,它们是这样表示的:

代码语言:javascript
运行
AI代码解释
复制
+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+

相当于:

代码语言:javascript
运行
AI代码解释
复制
+------+-------+-------+
| void | grass | stone |
+------+-------+-------+

基本上,在渲染时,我创建了一个平铺类,每个平铺都有两个坐标:X和Y(它们是自动计算的),材料可以用数字表示,也可以用值(ID)表示。在渲染时,我有一个精灵向量,它们都是从一个名为tilesheet.png的文件中提取的,但是每个文件只能绘制瓷砖的某一部分,例如,我有这样的东西:

代码语言:javascript
运行
AI代码解释
复制
tile coordinateBounds(topLeftX, topLeftY, tileWidth, tileHeight); 

在地图的初始化过程中,我计算了一个瓷砖数组,并根据地图文件中的值和其他一些变量(如冲突)给出了每个瓷砖的位置、它们的材料。我需要根据他们的物质价值对每一个人应用coordinateBounds。例如,如果材料是草,那么它应该只从栏中提取草精灵。我还必须指出,我使用的是SFML,并且在这些块之间没有边框或间隔。

EN

回答 1

Game Development用户

回答已采纳

发布于 2012-12-14 20:02:09

您想要绘制瓷砖中表示所需材料的部分。在SFML 1.6中,这可以通过创建一个带有sf::IntRect的裁剪区域来完成。

代码语言:javascript
运行
AI代码解释
复制
sf::Sprite tileSheet;
sf::IntRect clipping;
int frame = 0;              //id of the material you want to draw
int columns = 5;            //number of columns in the tile sheet
int frameWidth = 30;
int frameHeight = 30;

//set the clipping rectangle
clipping.Left = (frame % columns) * frameWidth;
clipping.Top = (frame / columns) * frameHeight;
clipping.Right = clipping.Left + frameWidth;
clipping.Bottom = clipping.Top + frameHeight;

//apply the clipping rectangle to the tile sheet so it knows what portion to draw
tileSheet.SetSubRect(clipping);
票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/44365

复制
相关文章
画布就是一切(一)— 画布编程的基本模式
我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。对应我所开发过的东西,比起一行一行冰冷的代码,我更加迷恋哪些能够直观的,可视化的东西。还记得以前在开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib库的官方示例应用Cobalt):
w4ngzhen
2023/10/16
3040
画布就是一切(一)— 画布编程的基本模式
画布就是一切(一)— 画布编程的基本模式
我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。对应我所开发过的东西,比起一行一行冰冷的代码,我更加迷恋哪些能够直观的,可视化的东西。还记得以前在开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib库的官方示例应用Cobalt):
w4ngzhen
2023/10/16
2360
画布就是一切(一)— 画布编程的基本模式
画布就是一切(一)— 画布编程的基本模式
我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。对应我所开发过的东西,比起一行一行冰冷的代码,我更加迷恋哪些能够直观的,可视化的东西。还记得以前在开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib库的官方示例应用Cobalt):
w4ngzhen
2023/10/16
2990
画布就是一切(一)— 画布编程的基本模式
PCA不适用于时间序列分析的案例研究
在大部份情况下我们都可以使用 PCA 进行线性降维。从图像处理到非结构化数据,无时无刻不在。我们甚至可以将它用于时间序列分析,虽然有更好的技术。在这篇文章中,我想向您介绍动态模式分解 (DMD),这是一种源自我的研究领域:流体动力学的用于高维时间序列的线性降维技术。DMD 结合了两个世界中的优点:PCA 和傅立叶变换。在数学上,它与动力系统理论中的一个基本算子有关,称为 Koopman 算子。但在深入研究 DMD 的数学之前,让我们用一个相当简单的例子来说明为什么 PCA 不是高维时间序列分析的最佳选择。
deephub
2021/07/23
1.6K0
PCA不适用于时间序列分析的案例研究
R:purrr包用于循环迭代
purrr中有多个迭代函数,可以用于快速解决循环迭代的问题,purrr中常用的迭代函数有map、map2、walk、reduce等等。
生信菜鸟团
2020/07/16
1.6K0
Canvas画布
Canvas(画布)组件为Tkinter的图形绘制提供了基础 Canvas是一个通用的组件,通常用于显示和编辑图形。可以用它来绘制线段、圆形、多边形,甚至是绘制其他组件,创建图形编辑器,并实现各种自定义的小组件。
大白熊
2021/12/23
1.3K0
观察者模式observer不适用于_观察者模式代码
在软件构建过程中,我们需要为某些对象建立 一种“通知依赖关系” —-一个对象发(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将很好的得到通知。如果这样的依赖关系过于紧密。将使软件不能很好的抵御变化
全栈程序员站长
2022/09/22
6660
Java之for循环语句基本使用
文章目录 for 循环控制 1. 基本语法 2. for 循环执行流程分析 3. 注意事项和细节说明 4. for 循环练习题 for 循环控制 基本介绍:听其名而知其意,就是让你的代码可以循环的执
兮动人
2021/06/11
8210
Java之for循环语句基本使用
Java之while循环基本使用
while 循环控制 1. 基本语法 2. while 循环执行流程分析 While01.java 画出流程图 使用 while 循环完成前面的题 //输出10句 你好,兮动人 int i = 1; //循环变量初始化 while( i <= 10 ) {//循环条件 System.out.println("你好,兮动人" + i);//执行语句 i++;//循环变量迭代 } System.out.println("退出while ,继续.." + i); // 11
玖柒的小窝
2021/09/17
7230
Java之while循环基本使用
Python基本循环实例Day 1
  输入正确的用户名和密码,显示登陆界面,超过三次输入错误则锁定,定义字符串记得加上单引号,数字可以int定义,while循环和if循环语句后加上:,break不加:
py3study
2020/01/16
2550
Java之while循环基本使用
文章目录 while 循环控制 1. 基本语法 2. while 循环执行流程分析 3. 注意事项和细节说明 4. 课堂练习题 while 循环控制 1. 基本语法 2. while 循环执行流程分析
兮动人
2021/06/11
6380
Java之while循环基本使用
python canvas画布
canvas = Canvas(width=525, height=300, bg='white') # 0,0 is top left corner canvas.pack(expand=YES, fill=BOTH) # increases down, right
用户5760343
2022/05/13
1.5K0
python canvas画布
canvas简易画布
今天学习了canvas,利用它做了一个简易版的画板,校验自己所学的知识,分享出来以供大家学习指教。先上效果图。
马克社区
2022/04/28
1.1K0
用于视频回归任务的长期循环卷积网络
通过深度学习进行视频处理是一个非常复杂的领域,因为它需要处理空间和时间两个方面。为了总结现代比较流行的方法是什么,在这篇文章中我们将对视频回归任务的深度学习方法进行一些研究。
deephub
2020/12/11
1.1K0
用于视频回归任务的长期循环卷积网络
Canvas基本动画-循环全景照片 原
这是MDN上面的一个的例子,展现一个自左向右滑动的全景图,例子中采用的图片是一个尺寸大于canvas的图片
tianyawhl
2019/04/04
8100
Canvas基本动画-循环全景照片
                                                                            原
Java之多重循环控制基本使用
(1) 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
兮动人
2021/06/11
4790
Java之多重循环控制基本使用
队列基本概念、循环队列【重点】
一种可以实现“先进先出”的存储结构,即“一端入,一端出”, 队首(front)出队,队尾(rear)入队(注:若front指向队首,则rear指向队尾最后一个有效元素的下一个元素;若rear指向队尾,则front指向队首第一个有效元素的下一个元素)
孙晨c
2019/09/10
6050
canvas清除画布-ZBrush中如何清除画布中多余图像
  ZBrush是一款数字雕刻与绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维行业。它的简洁化、智能化和人性化的设计无不让众多用户所折服。刚接触它的用户可能会因为找不到相关命令或不熟悉而觉得它有些复杂canvas清除画布,那么,在ZBrush®软件中如何对多余模型进行清除的操作有些刚接触的用户会找不清,本文就删除画布中的多余模型做详细讲解。
宜轩
2022/12/29
2.5K0
循环队列 基本概念「建议收藏」
循环队列是 队列的一种特殊形式。首先介绍队列,然后引申出循环队列。 队列又称为“先进先出”(FIFO)线性表 限定插入操作只能在队尾进行,而删除操作只能在队首进行 队列也可以采用顺序存储结构或链表结构来实现,分别称为顺序队列和链队列
全栈程序员站长
2022/08/23
8740
循环队列 基本概念「建议收藏」
JointJS 拖动画布
效果 画布外套一层画板和一层画框,拖动画布时让画板在画框中滚动 源码 <div id="wrap" style="overflow: auto;height:300px;width:300px;background-color: darkgrey"> <div id="board" style="padding:20px"> <div id="paper"></div> </div> </div> <script> const paper = new joint.dia
路过君
2021/12/07
2K0
JointJS 拖动画布

相似问题

画布不适用于基本图像绘制

30

Python弹性冲突不适用于for循环

14

ExcelCompare不适用于冲突

10

drawImage()不适用于画布

11

用于循环画布动画

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档