当时找到一篇cocos2dx 地图缩放的  很遗憾我用不了  也要记录一下 免得以后用ugui可以用

转 http://blog.csdn.net/cocosnode/article/details/40829017

using projectQ;
using UnityEngine;

public class MapGestures : MonoBehaviour
{
public GameObject BoundrayLeft;
public GameObject BoundrayRight;
public GameObject BoundrayTop;
public GameObject BoundrayBottom;

float xScaleOrigin;
float yScaleOrigin;
float fScaleFactor = 0;
bool bBeginOpt = false;
bool bPinchState = false;

Camera cam;
Vector3 moveBeginPos;
Vector3 BoundrayVecLeft;
Vector3 BoundrayVecRight;
Vector3 BoundrayVecTop;
Vector3 BoundrayVecBottom;
Vector3 tmpart = Vector3.zero;
GameObject tobject;
void Start()
{
//transform.localScale = new Vector3(1.6f, 1.6f, 1);
//transform.localPosition = new Vector3(-130f, 130f, transform.localPosition.z);
BoundrayVecLeft = BoundrayLeft.GetComponent<Transform>().position;
BoundrayVecRight = BoundrayRight.GetComponent<Transform>().position;
BoundrayVecTop = BoundrayTop.GetComponent<Transform>().position;
BoundrayVecBottom = BoundrayBottom.GetComponent<Transform>().position;
cam = _R.ui.UICamera.GetComponent<Camera>();
xScaleOrigin = transform.localScale.x;
yScaleOrigin = transform.localScale.y;
}
//private void OnGUI()
//{

// if (GUI.Button(new Rect(10, 100, 120, 65), "放大"))
// {
// ScaleMapPanel(tmpos,true);
// }
//}
void OnDrag(DragGesture gesture)
{
// 当前识别器阶段 (Started/Updated/Ended)
ContinuousGesturePhase phase = gesture.Phase;
// 最后一帧的拖拽/移动数据
Vector2 deltaMove = gesture.DeltaMove;
//完整的拖拽数据
if (gesture.Phase == ContinuousGesturePhase.Started)
{
}
else if (gesture.Phase == ContinuousGesturePhase.Updated)
{
Vector3 vvRelate = new Vector3(transform.localPosition.x + deltaMove.x, transform.localPosition.y + deltaMove.y, transform.localPosition.z);
if (gesture.Fingers.Count == 1 && !bPinchState && CheckScreenBoundray(deltaMove))
{
transform.localPosition = new Vector3(vvRelate.x, vvRelate.y, transform.localPosition.z);
}
}
}

//双指缩放
void OnPinch(PinchGesture gesture)
{
ContinuousGesturePhase phase = gesture.Phase;
// 当前两个手指的距离
float gap = gesture.Gap;
// 当前与上一帧的变动值
float delta = gesture.Delta;
var bZoomIn = delta > 0 ? true : false;

if (gesture.Phase == ContinuousGesturePhase.Started)
{
moveBeginPos = gesture.Position;
bBeginOpt = false;
bPinchState = true;
}
if (gesture.Phase == ContinuousGesturePhase.Ended)
{
moveBeginPos = new Vector3();
bPinchState = false;
}
if (moveBeginPos.sqrMagnitude > 0)
{
ScaleMapPanel(moveBeginPos, bZoomIn);
}
}
void ScaleMapPanel(Vector3 tmpos, bool bZoomIn)
{
if (!bBeginOpt)
{
tmpos = cam.ScreenToWorldPoint(tmpos);
tmpos = transform.InverseTransformPoint(tmpos);
if (tobject == null)
{
tobject = new GameObject("maodian");
tobject.transform.SetParent(transform);
}
tobject.transform.localPosition = tmpos;
bBeginOpt = true;
tmpart = tobject.transform.position;
}
if (bZoomIn)
{
fScaleFactor += 0.1f;
}
else
{
fScaleFactor -= 0.1f;
}

fScaleFactor = Mathf.Clamp(fScaleFactor, 0, 3);

var tempScaleX = xScaleOrigin + fScaleFactor;
var tempScaleY = yScaleOrigin + fScaleFactor;

transform.localScale = new Vector3(tempScaleX, tempScaleY, 1);

Vector3 tposnow = tobject.transform.position;

Vector3 tdis = tposnow - tmpart;

//if(CheckWorldBoundray(tdis))
transform.position = transform.position - tdis;

UpdateBoundray();

}
bool CheckScreenBoundray(Vector3 vPos)
{
//DebugPro.LogError("rextest CheckBoundray x " + vPos.x + " rextest CheckBoundray y " + vPos.y + " rextest CheckBoundray z " + vPos.z);
if (vPos.x > 0)
{
var brL = cam.WorldToScreenPoint(BoundrayLeft.GetComponent<Transform>().position).x + vPos.x;
if (brL > 0)
return false;
}
else
{
var brR = cam.WorldToScreenPoint(BoundrayRight.GetComponent<Transform>().position).x + vPos.x;
if (brR < Screen.width)
return false;
}

//up
if (vPos.y > 0)
{
var brB = cam.WorldToScreenPoint(BoundrayBottom.GetComponent<Transform>().position).y + vPos.y;
if (brB > 0)
return false;
}
else
{
var brT = cam.WorldToScreenPoint(BoundrayTop.GetComponent<Transform>().position).y + vPos.y;
if (brT < Screen.height)
return false;
}

//DebugPro.LogError("rextest CheckBoundray W is : " + w + " H is : " + h);
//DebugPro.LogError("rextest CheckBoundray brL is : " + brL);
//DebugPro.LogError("rextest CheckBoundray brR is : " + brR);
//DebugPro.LogError("rextest CheckBoundray brT is : " + brT);
//DebugPro.LogError("rextest CheckBoundray brB is : " + brB);
return true;
}
void UpdateBoundray()
{

var brL = cam.WorldToScreenPoint(BoundrayLeft.GetComponent<Transform>().position).x;
if (brL > 0)
{
Vector3 offset = BoundrayVecLeft - BoundrayLeft.GetComponent<Transform>().position;
transform.position = transform.position + offset;
}

var brR = cam.WorldToScreenPoint(BoundrayRight.GetComponent<Transform>().position).x;
if (brR < Screen.width)
{
Vector3 offset = BoundrayVecRight - BoundrayRight.GetComponent<Transform>().position;
transform.position = transform.position + offset;
}

//up
var brB = cam.WorldToScreenPoint(BoundrayBottom.GetComponent<Transform>().position).y;
if (brB > 0)
{
Vector3 offset = BoundrayVecBottom - BoundrayBottom.GetComponent<Transform>().position;
transform.position = transform.position + offset;
}
var brT = cam.WorldToScreenPoint(BoundrayTop.GetComponent<Transform>().position).y;
if (brT < Screen.height)
{
Vector3 offset = BoundrayVecTop - BoundrayTop.GetComponent<Transform>().position;
transform.position = transform.position + offset;
}
}
}

折腾了好久的地图缩放 ngui 各种偷懒实现的更多相关文章

  1. 百度地图api根据地图缩放等级显示不同的marker点,功能二

    功能一里面有marker点后台的代码 根据地图的缩放等级显示不同marker点的坐标JSP代码 <%@ page language="java" contentType=&q ...

  2. [Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果

    原文:[Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果 [前言] 使用经纬度来定位地图的位置,以及使用 MapAnimationKind 属性来设定地图缩放时的 ...

  3. openLayers地图缩放的回调

    //设置地图最小缩放级别为17级 map.events.register("zoomend", this, function (e) { //每次地图缩放时就会进入到这 if (m ...

  4. android 中百度地图 关于地图缩放所调用的事件

    在做百度地图的时候 javascript 有个地图缩放的事件 但是在android 的API里面却没有,但是还好  官方给了一个MapStatusChangeListener,是这样介绍的 百度地图S ...

  5. 基于高德地图的描点操作,监听地图缩放,展示合理数量的marker

    原文:基于高德地图的描点操作,监听地图缩放,展示合理数量的marker 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lx583274568/art ...

  6. OpenLayers中地图缩放级别的设置方法

    来源于:http://www.cnblogs.com/sailheart/archive/2011/03/15/1984519.html 一.概述 在OpenLayers中,地图必须具有一个缩放级别的 ...

  7. android百度地图中的地图缩放级别

    前期搭建百度地图的环境就不说了,网上一搜一大把,这里只讲地图的缩放,大神可以直接绕道 首先在类的内部初始化一个百度地图的对象 private BaiduMap mBaiduMap; 然后在OnCrea ...

  8. Android Google Maps 监听地图缩放

    接上篇.http://www.cnblogs.com/maomishen/p/3556297.html 由于公司项目要求,需要对google map监听地图的缩放(zoom)来进行一些操作. 但是在网 ...

  9. Cocos2d-x教程(26)-Cocos2d-x + Lua脚本实现大地图缩放功能

    欢迎增加 Cocos2d-x 交流群: 193411763 视频教程地址:http://www.tudou.com/programs/view/qRiOfppMghM/ 转载请注明原文出处:http: ...

随机推荐

  1. ptrace线程

    在ptrace时使用waitpid(-1, &status, 0);无法正常trace 修改为waitpid(-1, &status, __WALL);即可 原因是:

  2. Django MTV simple_tag filter inclusion_tag

    Django框架 模型(Model).视图(View)和控制器(Controller),具有耦合性低.重用性高.生命周期成本低等优点. MVC 框架 --  Model -View -Controll ...

  3. js/jquery对特殊字符进行转义防止js注入使用示例

      /** JQuery Html Encoding.Decoding * 原理是利用JQuery自带的html()和text()函数可以转义Html字符 * 虚拟一个Div通过赋值和取值来得到想要的 ...

  4. vue中组件通信之父子通信:props(组件传参)

    实例一: <div id="app"> <alert msg="hhhhhhh"></alert> </div> ...

  5. JustOj 2043: N!

    题目描述 输出N的阶乘.(注意时间限制150ms&&注意不能打表后输出,赛后我们会检查代码,如有发现,该位同学总分记0分处理) 打表的定义:在本地主机预先计算出了每个值对应的答案,并把 ...

  6. Symfony2 学习笔记之控制器

    一个controller是你创建的一个PHP函数,它接收HTTP请求(request)并创建和返回一个HTTP回复(Response).回复对象(Response)可以是一个HTML页面,一个XML文 ...

  7. [转载]js 获取ASP RadioButtonList 选中的值

    var planList=document.all ('rblPlanType');    for(var i=1;i<planList.length;i++)    {     if(plan ...

  8. Step5:SQL Server 跨网段(跨机房)FTP复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 参考文献(References) ...

  9. 简单的图像显著性区域特征提取方法-----opencv实现LC,AC,FT

    https://blog.csdn.net/cai13160674275/article/details/72991049?locationNum=7&fps=1 四种简单的图像显著性区域特征 ...

  10. Linux三剑客grep、sed、awk

    grep grep file grep -i file grep -v file