zoukankan      html  css  js  c++  java
  • 【COCOS2DX-游戏开发之三三】TMX边界控制与小窗体内预览TMX


    做一款像素游戏,须要确定地图的边界。保证人物的位置位于屏幕中央。到达地图左边界。地图位置不变。人向左走,到达右边界,地步位置不变,人向右走

    如:地图左边。右边,上边空出的边界。还有下方留出操作button


    这样的游戏普通情况下地图会大于窗体大小。人物要保持在屏幕(或窗体)中央。设置地图的位置。地图的位置应该是[win_size.width– Map_SpaceX –map_size.widthleft_space]。上下和左右原理同样


    Map_SpaceX 地图左右留出空间普通情况下相等

    Map_SpaceTop 地图上方空间

    Map_SpaceBottom 地图下方空间(留出button大小)

    Size map_size 地图大小

    Size win_size 窗体大小(能够是一个view大小,也能够是窗体)


    左边界:



    右边界:



    /**
     * @brief adjustMapPos 调整地图的位置,保证人物在屏幕中央(左右边界特殊处理),人物在地图坐标系内
     * @param map 地图节点
     * @param map_origin_size  地图原始大小(没有缩放)
     */
    void adjustMapPos(cocos2d::Node *map, const cocos2d::Size &map_origin_size)
    {
        // 外界我们能够将地图放大mViewScale倍, 效果等效于将视图窗体缩小mViewScale倍
        cocos2d::Size win_size = mViewSize / mViewScale;
        cocos2d::Size map_size = map_origin_size;
        cocos2d::Point ptRole = mTargetPos;
    
        int MAP_SPACE_X = Configure::Map_SpaceX;
        int MAP_SPACE_BOTTOM = Configure::Map_SpaceBottom;
        int MAP_SPACE_TOP = Configure::Map_SpaceTop;
    
        float x = 0.f;
        float y = 0.f;
        if (map_size.width >= win_size.width - MAP_SPACE_X * 2) {
            if (MAP_SPACE_X + ptRole.x  <= win_size.width/2) {
                x = MAP_SPACE_X;
            } else if (map_size.width - ptRole.x + MAP_SPACE_X <= win_size.width/2 ) {
                x = (win_size.width - MAP_SPACE_X) - map_size.width;
            } else {
                x = win_size.width/2 - ptRole.x ;
            }
        } else {
            x = (win_size.width - map_size.width)/2;
        }
    
        if (map_size.height >= win_size.height - MAP_SPACE_TOP - MAP_SPACE_BOTTOM) {
            if (ptRole.y + MAP_SPACE_BOTTOM <= win_size.height/2) {
                 y = MAP_SPACE_BOTTOM;
            } else if (map_size.height - ptRole.y + MAP_SPACE_TOP <= win_size.height/2) {
                y = win_size.height - MAP_SPACE_TOP - map_size.height;
            } else {
                y = win_size.height/2 - (ptRole.y);
            }
        } else {
            y = MAP_SPACE_BOTTOM;
        }
    
        map->setPosition(x, y );
    }

    这样的依据地图放大比例来缩小视图比例的做法能够保证在一个控件窗体内预览一个场景












  • 相关阅读:
    【水滴石穿】RNNewsGo
    【水滴石穿】FirstReactNativeProject
    EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
    SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的区别
    七秘诀工作效率与薪水翻番-转
    NopCommerce架构分析(转载)
    转:一个基于互联网医疗的创业公司,三年是一个收获
    如何学习开源系统有感(一)
    C#的CLR组成和运转介绍
    jquery 选择器,模糊匹配
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5173442.html
Copyright © 2011-2022 走看看