1. 程式人生 > >Cocos2d-X3.0實現地圖的無限滾動

Cocos2d-X3.0實現地圖的無限滾動

我最近在做一個跑酷類遊戲,在跑酷類遊戲中就會用到地圖的無限滾動,在網上查了許多資料後,我也明白了地圖無限滾動的實現方法。

為了更加形象的介紹地圖的無限滾動,我特意畫了幾張示意圖

首先需要準備兩張地圖,並且在初始化的時候將第一張地圖放在視窗上,第二張地圖放在第一張地圖的後面

滾動地圖,當第一張地圖的最右端和視窗的最左端重合

將第一張地圖放在第二張地圖的後面

當第二張地圖的最右端在視窗的最左端時

將第二張地圖放在第一張地圖的後面(第一張地圖的最右端和第二張地圖的最左端重合)

上面的就是地圖無限迴圈滾動的實現邏輯,下面通過程式碼實現地圖的無限滾動

首先建立一個SceneMap類,在SceneMap.h中新增下面的程式碼

#ifndef _SceneMap_H__
#define _SceneMap_H__

#include "cocos2d.h"
USING_NS_CC;

class SceneMap : public Layer
{
public:

	//幀迴圈排程函式
	void update(float time);

    virtual bool init();  
    static Scene* scene();
    CREATE_FUNC(SceneMap);

	TMXTiledMap* map1;
	TMXTiledMap* map2;
};

#endif

在SceneMap.cpp中新增下面的程式碼

#include "SceneMap.h"


Scene* SceneMap::scene()
{
    Scene *scene = Scene::create();

	SceneMap *layer = SceneMap::create();
    
	scene->addChild(layer);
    
	return scene;
}


bool SceneMap::init()
{
    if(!Layer::init())
    {
        return false;
    }

	Size winSize = Director::getInstance()->getWinSize();

	//載入地圖
	map1 = TMXTiledMap::create("map1.tmx");
	map2 = TMXTiledMap::create("map2.tmx");

	addChild(map1);
	addChild(map2);

	//將第二張地圖的位置設定到第二張地圖的後面
	map2->setPositionX(map1->getPositionX() + map1->getContentSize().width);

	//啟動幀迴圈排程
	scheduleUpdate();
    
	return true;
}


void SceneMap::update(float time)
{
	//每一幀地圖向左移動5個畫素
	map1->setPositionX(map1->getPositionX() - 5);
	map2->setPositionX(map2->getPositionX() - 5);

	//當第一張地圖的最右端和視窗的最左端重合時
	if(map1->getPositionX() + map1->getContentSize().width <= 0)
	{
		//將第一張地圖新增到第二張地圖後面
		//第一張地圖的橫座標 = 第二張地圖的橫座標 + 第二張地圖的寬度
		map1->setPositionX(map2->getPositionX() + map2->getContentSize().width);
	}


	//當第二張地圖的最右端和視窗的最左端重合時
	//將第二張地圖新增到第一張地圖後面
	if(map2->getPositionX() + map2->getContentSize().width <= 0)
	{
		//將第二張地圖新增到第一張地圖後面
		//第二張地圖的橫座標 = 第一張地圖的橫座標 + 第一張地圖的寬度
		map2->setPositionX(map1->getPositionX() + map1->getContentSize().width);
	}
}

相關推薦

Cocos2d-X3.0實現地圖無限滾動

我最近在做一個跑酷類遊戲,在跑酷類遊戲中就會用到地圖的無限滾動,在網上查了許多資料後,我也明白了地圖無限滾動的實現方法。 為了更加形象的介紹地圖的無限滾動,我特意畫了幾張示意圖 首先需要準備兩張地圖,

Cocos2d-x《雷電大戰》(1)-雙層地圖無限滾動

     本文要實現飛機射擊遊戲中的地圖無限滾動的功能,這裡分為兩個層,一個層無限向下滾動,一個層無限向上滾動,這樣子結合起來效果就非常有層次感,也非常逼真,這裡我把地圖層都寫成一個類,自己把地圖改下,

Ubuntu14.04+eclipse下cocos2d-x3.0正式版環境的搭建

div 新版 文件中 function ngs method ont alt src 環境: ubuntu14.04 adt-bundle-linux-x86_64 android-ndk-r9d-linux-x86_64 cocos2d-x-3.0正式版 apach

Cocos2d-x3.0 從代碼中獲取cocostudio編輯的UI控件

ucid 編輯 top ica sans sce nero val -i 依據名字查找控件 須要包括的頭文件及名字空間: #include "cocostudio/CocoStudio.h"#include "ui/CocosGUI.h"using namespac

Cocos2d-x3.0 載入Cocostudio的UI後,button無法點擊的解決方法

archive nor tar console 大小 接下來 variant set http 近期發現不少朋友都遇到這個問題,用Cocostudio的UI編輯器創建好UI後。在代碼中載入UI,然後給button(Button)加入點擊監聽事件。發現不管怎樣都點擊不了bu

純css實現水平無限滾動--適應PC和移動端

一、HTML <style type="text/css"> * { margin: 0; padding: 0; list-style: none;

cocos2d-x學習筆記——cocos2d-x3.0回撥函式的變化

在cocos2d-x 2.x版本中的回撥函式的用法想必大家都很是熟悉,例如在menu item,call back action中都需要大量的使用到回撥函式,但是在使用過程中總是感覺到比較冗餘麻煩的,在3.0版本,使用到了C++11 的新特性,改進增加了回

楓葉天空Cocos2d-x3.0系列教程二 序列幀動畫

更新日誌: 2014-01-31  增加了cocoStudio動畫編輯器的說明 內容概述: 從今天開始,我們就正式進入cocos2d-x3.0的開發教程了,本篇的核心內容是序列幀動畫。 準備工作 1、首先我們建立一個新的場景類,作為我們本系列教程的一

Cocos2d-x3.0遊戲例項之《別救我》第二篇——建立物理世界

這篇我要給大家介紹兩個知識點:1. 建立遊戲物理世界2. 沒了(小若:我噗)害怕了?不用擔心,這太簡單了~!3.0新亮點,史上最簡單的物理引擎在Cocos2d-x3.0裡使用物理引擎,會很有快感,因為很多繁瑣的東西它都幫我們封裝好了。那麼,我要開始建立遊戲的關卡場景了,大家跟

Quick-Cocos2d-x3.3實現橡皮擦效果(刮刮樂)

參考了zrong和_Proxy的部落格,他們的程式碼我沒成功,各種改之後實現了,可是橡皮擦是矩形的,我想要圓形的,再看看。。。 已解決(其實就是一個多邊形,但是有個新問題,橡皮擦變成黑色了。。。),程

cocos2d-x3.0基本動作之FadeIn動作,FadeOut動作

bool FadeAction::init() { // 呼叫父類的init函式 if ( !Layer::init() ) { return false;

cocos2d-x3.0/2.0 win7第一次建立專案需要呼叫到的指令碼(不斷更新維護)//cocos2d-x 教程一

第一步: github上最新的引擎,值得注意的是官網上釋出的引擎是穩定版。選擇哪種就看個人喜好了。但是最新功能你都體驗不到。建議下載git工具然後clone到本地來更新 第二步: 下載後 用cmd終端裡面進入cocos2d-x\tools\project-creator

Cocos2d-x3.0遊戲例項之《別救我》第五篇——使用Cocostudio UI編輯器建立操作介面

這一篇內容其實很簡單,已經對Cocostudio比較熟悉的朋友就可以隨便掃一下了~(小若:熟悉Cocostudio的人誰還有空看你的基礎教程呢)下載Cocostudio我這篇教程使用的版本是V1.3.0.1,它同一個版本還有3個分支,大家隨便選擇一個分支吧:Cocos2d-x

jquery實現頁面無限滾動外掛

一、外掛概述 實現網頁底部自動載入內容的外掛很多,如, 1、jQuery ScrollPagination jQuery ScrollPagination plugin 是一個jQuery 實現的支援無限滾動載入資料的外掛。 地址:http://ande

Cocos2d-x3.0模版容器詳解:cocos2d::Vector

1.概述 版本:v3.0 beta 語言:C++ 定義在 “COCOS2DX_ROOT/cocos/base” 路徑下的 "CCVector.h" 的標頭檔案中。 [cpp] view plain copy  print? template<c

cocos2dx中用動作實現背景無限滾動

cocos2dx-3.1.5中用動作實現背景滾動,cocos2dx都可以使用的 用到的動作其實很簡單 MoveBy 因為有反動作 TargetedAction 給指定目標1個動作 Spawn 同時執行 Sequence 動作按照順序執行 RepeatFo

jq如何實現內容的無限滾動

script ava 如何實現 log highlight set absolut hidden rip html: <div> <ul> <li>1</li> <li

基於 Vue.js 的移動端組件庫mint-ui實現無限滾動加載更多

== spi dex try for ike country ble 頁面 通過多次爬坑,發現了這些監聽滾動來加載更多的組件的共同點, 因為這些加載更多的方法是綁定在需要加載更多的內容的元素上的, 所以是進入頁面則直接觸發一次,當監聽到滾動事件之後,繼續加載更多, 所以對於

cocos2d-x3.2原始碼分析之 ---- 類FileUtils實現把資源放在Resources檔案目錄下達到多平臺的引用

  我以TMXTiledMap::Create函式為講解物件。   首先轉到TMXTiledMap::Create的定義中,其定義是在CCFastTMXTiledMap.cpp檔案中,程式碼1如下。其目錄是E:\mycoscos2d\test2\cocos2d\cocos\2d中,這就說明這是與具體平臺無關

NGUI實現圖片左右無限滾動

開發專案的時候,通常要左右移動圖片選擇對應的場景或者關卡等等的,下面程式碼使用到了NGUI裡面的Tweenpositi,做了註釋,應該很容易看懂的 using UnityEngine; using S