0%

绘图接口

客户端绘图接口lua层功能,主要在SDL全局表上。

辅助类,Color、Point、Rect、Points、Rects介绍

SDL.Color -> 代表了RGB颜色类

1. local c = SDL.Color()  -> 构造一个位初始化的Color对象
2. c.r=255; c.g=255; c.b=255; c.a=255;  -> 给颜色对象赋值,r 红,g绿,b蓝,a 透明度,255位不透明,0位完全透明。这里定义了一个不透明的白色。
3. local c = SDL.Color.new(r,g,b,a)  -> 直接用数值生成一个颜色对象,数值范围都是0到255

SDL.Point -> 点类

1. local p = SDL.Point()  -> 构造一个位初始化的点对象
2. p.x=100; c.y=200;  -> 给点对象赋值
3. local p = SDL.Point.new(x,y)  -> 直接用数值生成一个点对象

SDL.Rect -> 举行区域

1. local r = SDL.Rect()  -> 构造一个位初始化的举行对象
2. r.x=100; r.y=200; r.w=50; r.h=30;  -> 给举行对象赋值,x,y举行左上角坐标所在点,w 举行宽度,h 举行高度
3. local r = SDL.Rect.new(x,y,w,h)  -> 直接用数值生成一个举行对象

SDL.Points -> 点对象的数组集合

1. local ps = SDL.Points()  -> 构造一个一个空的点数组集合
2. ps:push(p)  -> 将点对象放进点数组集合,参数p是生成的点对象
3. ps:pop()  -> 从集合末尾弹出一元素
4. ps:clear()  -> 清空集合
5. ps:size()  -> 获得集合中的元素数量
6. ps:empty()  -> 判断集合是不是空的,空的返回true

SDL.Rects -> 举行对象的数组集合

1. local rs = SDL.Rects()  -> 构造一个一个空的举行数组集合
2. rs:push(r)  -> 将举行对象放进举行数组集合,参数r是生成的举行对象
3. rs:pop()  -> 从集合末尾弹出一元素
4. rs:clear()  -> 清空集合
5. rs:size()  -> 获得集合中的元素数量
6. rs:empty()  -> 判断集合是不是空的,空的返回true

创建各种图形对象,这些方法都在SDL.mgr.getInstance()返回的管理类上

1. SDL.mgr.getInstance():createPoint(x,y,c)  -> 在屏幕上画一个像素点,x,y坐标,c 颜色对象,return返回值 Node 创建的显示对象
2. SDL.mgr.getInstance():createLine(x1,y1,x2,y2,c)  -> 在屏幕上画一个像素线,x1,y1 直线的起点,x2,y2 直线的终点,c 颜色对象,return返回值 Node 创建的显示对象
    3. SDL.mgr.getInstance():createRect(x,y,w,h,fill,c)  -> 在屏幕上画一个举行,x,y 举行的左上角坐标,w,h 举行的宽度和高度,fill 为true则用c颜色填充整个举行,false,则用c颜色画举行的边框,c 颜色对象,return返回值 Node 创建的显示对象
4. SDL.mgr.getInstance():createPoints(points,c)  -> 在屏幕上画多个像素点,points 是点集合对象,包含多个点,c 颜色对象,return返回值 Node 创建的显示对象
5. SDL.mgr.getInstance():createLines(points,c)  -> 在屏幕上画多条直线,他们根据点的顺序,首尾相连,必须有两个点在点数组集合中,否则报错,points 点数组集合,必须大于等于2,c 颜色对象,return返回值 Node 创建的显示对象
  1. SDL.mgr.getInstance():createRects(rects,fill,c) -> 在屏幕上画多个举行,rects 举行数组集合,fill 为true则用c颜色填充整个举行,false,则用c颜色画举行的边框,c 颜色对象,return返回值 Node 创建的显示对象
  2. SDL.mgr.getInstance():createImage(path,x,y,w,h) -> 在屏幕上显示一张图片,path 图片所在资源路径,支持jpg\png等,x,y 显示的图片的左上角位置,w,h要显示的目标长宽,弱图片尺寸大小和显示的举行参数不符合,则会缩放图片,适应给出的坐标举行大小,return返回值 Node 创建的显示对象
    1. SDL.mgr.getInstance():createText(text,x,y,c) -> 在屏幕上显示一行文本,text 要显示的文本,支持中文,x,y 显示文本的左上角位置,c 颜色对象,return返回值 Node 创建的显示对象
    2. SDL.mgr.getInstance():createCircle(x,y,radius,fill,c) -> 创建一个圆x,y圆的中心点,radius圆的半径,fill是否填充圆,c 颜色对象,return返回值 Node 创建的显示对象
    3. SDL.mgr.getInstance():createLayer(x,y,w,h,c) -> 创建容器面板,该面板可以添加各种子对象,也可以嵌套面板,x,y,w,h和举行一样含义,他只能用颜色填充背景色,c 颜色对象,return返回值 Node 创建的显示对象

创建好的图形对象的通用方法(SDLNode)parent class

1. node:movePosition(x,y)  -> 将当前节点对象平移,x|y要平移的逻辑像素,当节点对象是SDLLayer的时候,子对象会一起移动。SDLRoot跟对象mgr无法移动。
2. node:changePosition(x,y)  -> 将当前节点对象设置到心坐标,x|y要设置的逻辑像素坐标,当节点对象是SDLLayer的时候,子对象会一起设置。SDLRoot跟对象mgr无法设置。
3. node:changeValue(text)  -> 当node是label text标签时,改变文本。
4. node:changeColor(r,g,b,a)  -> 改变图形的初始化颜色,r,g,b,a分别是rgb色的数值和a透明度。
5. node:getPoints()  -> 获得Points和Lines图形的内部集合,修改会时时反馈到屏幕。
6. node:getRects()  -> 获得Rects图形的内部集合,修改会时时反馈到屏幕。

将显示对象放入屏幕,SDL.mgr.getInstance()返回的对象其实是顶层节点对象,createLayer返回的对象是容器对象,他们拥有同样的管理层次的方法。

为了方便描述以下吧顶层对象叫做mgr,吧createLayer创建的面板对象叫做layer,吧其他创建的显示对象称作node节点对象。
1. mgr:add(o,z) 和 layer:add(o,z)  -> 将显示对象放入面板,o 显示对象,也可以是显示面板,当显示对象进入他的面板或者顶层面板时,他的坐标则相对他的面板所在相对坐标偏移;z 同一层的显示对象,绘制的时候的先后顺序,数字越小,则优先级靠后,后绘制的图像覆盖之前绘制的图像。return返回值该显示对象的唯一ID。例如:
    
1
2
3
4
5
local mgr = mgr.getInstance() -- 保存顶层管理对象
local layer = mgr:createLayer(10,10,100,30,SDL.Color.new(0,0,255,255)) -- 创建了一个蓝色背景的容器面板
local text = mgr:createText("",10,8,SDL.Color.new(0,0,0,255))
mgr:add(layer,0) -- 将面板放进顶层
layer:add(text,0) -- 将文本放进面板
这个时候的坐标面板layer则是相对顶层mgr00点,则文字text相对他的面板坐标layer 1010。 2. mgr:remove(id) 和 layer:remove(id) -> 删除该容器里的显示对象,id是add返回的唯一标识符,也可以通过创建的Node的对象的id属性获取。 3. mgr:get(id) 和 layer:get(id) -> 通过ID获取到该容器里的指定显示对象Node 4. mgr:clear() 和 layer:clear() --> 清空容器内的所有显示元素

其他有关信息

  1. 屏幕当前逻辑宽度和高度像素尺寸可以通过 SDL.dwidth 和 SDL.dheight 获得,此属性是只读属性,请不要赋值,目前为720*1280。
  2. 屏幕当前分辨率尺寸可以通过 SDL.width 和 SDL.height 获得,此属性是只读属性。绘图请关注上面的逻辑尺寸,也可以说是设计尺寸,若逻辑尺寸和分辨率尺寸不一样,啧引擎会自动缩放到复合当前分辨率的屏幕显示,规则是长边最大缩放。
  3. SDL.setLogicScreenSize(w,h) -> 修改渲染逻辑像素尺寸,修改完后dwidth,dheight会一起改变,但是屏幕像素尺寸不会变。
    1. 每次开始游戏或者结束游戏可以调用 mgr:clear() 清空所有显示
    2. 在add方法的第二个参数请不要选择小于0的数值,避免覆盖系统的菜单显示和对话框等内容。
    3. 字体现在默认用的是微软雅黑,弱需要调整字体,等下一个接口。