|
- local VisibleRect = class("VisibleRect")
-
- function VisibleRect:ctor()
- self.s_visibleRect = cc.rect(0,0,0,0)
- end
-
- -- 初始化可见区域
- function VisibleRect:lazyInit()
- if (self.s_visibleRect.width == 0.0 and self.s_visibleRect.height == 0.0) then
- self.s_visibleRect.x = 0
- self.s_visibleRect.y = 0
- local size = cc.Director:getInstance():getWinSize()
- self.s_visibleRect.width = size.width
- self.s_visibleRect.height = size.height
- end
- end
-
- function VisibleRect:updateVisibleRect()
- -- 这里只更新大小
- local size = cc.Director:getInstance():getWinSize()
- self.s_visibleRect.width = size.width
- self.s_visibleRect.height = size.height
- end
-
-
- function VisibleRect:getVisibleRect()
- self:lazyInit()
- return cc.rect(self.s_visibleRect.x, self.s_visibleRect.y, self.s_visibleRect.width, self.s_visibleRect.height)
- end
-
- -- 将屏幕坐标转换成GLView坐标
- function VisibleRect:convertScreenToGLView(x, y)
- self:lazyInit()
- return cc.p(x , self:getVisibleRect().height - y)
- end
-
- -- 将屏幕坐标转换成坐标系的坐标
- function VisibleRect:convertScreenToCoordinate(x, y)
- self:lazyInit()
- local floorPlane = cc.Plane:new(cc.vec3(0,1,0) , 0);
-
- -- 计算出mainlayer的世界位置
- local ray = app.mainCamera:pickRay(x / self.s_visibleRect.width , y / self.s_visibleRect.height);
- local distance = ray:intersectsPlane(floorPlane);
- if distance >= 0 then
- return ray:getPoint(distance);
- else
- return ray:getPoint(0);
- end
-
- end
-
- -- 将屏幕坐标转换成坐标系的坐标
- function VisibleRect:convertScreenToCoordinate2D(x, y)
- self:lazyInit()
- local floorPlane = cc.Plane:new(cc.vec3(0,0,1) , 0);
-
- -- 计算出mainlayer的世界位置
- local ray = app.mainCamera:pickRay(x / self.s_visibleRect.width , y / self.s_visibleRect.height);
- local distance = ray:intersectsPlane(floorPlane);
- if distance >= 0 then
- return ray:getPoint(distance);
- else
- return ray:getPoint(0);
- end
-
- end
-
- -- 鼠标位置转换成世界坐标
- function VisibleRect:convertScreenToWorldPos(x , y)
- local pos = self:convertScreenToCoordinate(x , y);
- return app.mainLayer:convertToWorldSpace(pos);
- end
-
- -- 鼠标位置转换成世界坐标
- function VisibleRect:convertScreenToWorldPos2D(x , y)
- local pos = self:convertScreenToCoordinate2D(x , y);
- return app.mainLayer:convertToWorldSpace(pos);
- end
-
- function VisibleRect:left()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x, self.s_visibleRect.y+self.s_visibleRect.height/2)
- end
-
- function VisibleRect:right()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x+self.s_visibleRect.width, self.s_visibleRect.y+self.s_visibleRect.height/2)
- end
-
- function VisibleRect:top()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x+self.s_visibleRect.width/2, self.s_visibleRect.y+self.s_visibleRect.height)
- end
-
- function VisibleRect:bottom()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x+self.s_visibleRect.width/2, self.s_visibleRect.y)
- end
-
- function VisibleRect:center()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x+self.s_visibleRect.width/2, self.s_visibleRect.y+self.s_visibleRect.height/2)
- end
-
- function VisibleRect:leftTop()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x, self.s_visibleRect.y+self.s_visibleRect.height)
- end
-
- function VisibleRect:rightTop()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x+self.s_visibleRect.width, self.s_visibleRect.y+self.s_visibleRect.height)
- end
-
- function VisibleRect:leftBottom()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x,self.s_visibleRect.y)
- end
-
- function VisibleRect:rightBottom()
- self:lazyInit()
- return cc.p(self.s_visibleRect.x+self.s_visibleRect.width, self.s_visibleRect.y)
- end
-
- return VisibleRect;
|