cocos2dx 適合初學者的學習筆記【一】


內容介紹:

導演     -》     場景     -》      層    -》    精靈
Director         Scene            Layer         Sprite

創建場景、層、精靈都是用::create(),靜態方法創建。
創建導演用: Director::getInstance();

Sprite 精靈是一個2D圖像,可以移動、旋轉、放大縮小、活動,還能進行其他變化。精靈(通過Sprite”類實現)還可以有其他精靈當作子類。當父類被轉變時,該父類下的所有子類也將被轉變。

獲得遊戲界面可見區域大小:
Size visibleSize = Director::getInstance()->getVisibleSize();
寬:visibleSize.width
高: visibleSize.height

【座標】
cocos2d遊戲中: 起點座標(x=0, y=0)位於左下角,這意味着屏幕位於 X軸從屏幕最左邊開始,由左向右漸增 Y軸座標從屏幕最下方開始,由下向上漸增。

錨點:ccp(0.5,0.5),0.5代表x,Y方向的一半,值位於0和1之間

由於每個類都繼承自CCNode(Cocos2d-x的最頂層類),所以每個類都會默認有anchorPoint屬性。 當我們在一個位置畫一個的對象的時候,Cocos2d-x會合並屬性位置和anchorPoint。當然,當旋轉一個對象時,Cocos2d-x會圍繞繞anchorPoint旋轉的

每個note節點的錨點默認都是0.5,0.5
setIsRelativeAnthorPoint(true);//設置座標以錨點算
Director::convertToGl(CCPoint);//轉成openGl座標
Director::convertToUl(CCPoint);//轉成屏幕的座標

【UI系統】
1.字體,標籤
LabelTTF *l = LabelTTF:create("Hello","宋體",30);
l->setPosition(ccp(100,100));//設置字體位置
l->setString("Hello Cocos2dx");//設置字體內容
l->setColor(ccc3(255,0,0));//設置顏色
l->setScale(3.0f);//放大3倍
l->setRotation(45.f);//設置旋轉角度
LabelBMFont *f = LabelBMFont::create("test","fonts/bitmapFontTest.fnt")
LabelAtlas
 
2.菜單(MenuItemFont、MenuItemLabel、MenuItemImage、MenuItemSprite、MenuItemToggle)
	  auto pBtn = MenuItemFont::create("go back", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));//函數聲明:void HelloWorld::menuCloseCallback(Ref* pSender)
	  //或者寫成 auto pBtn = MenuItemFont::create("go back", [](Ref *ref ){MessageBox("","");});
	  Menu* pMenu = Menu::create(pBtn, NULL);
	  pMenu->setPosition(CCPointZero);
	  addChild(pMenu);

	LabelTTF * ttf = LabelTTF::create("Hello","宋體",40);
	//MenuItemLabel * ml = MenuItemLabel::create(ttf,[](Ref *ref){MessageBox("","");});
	
	MenuItemLabel * ml = MenuItemLabel::create(ttf,CC_CALLBACK_1(HelloWorld::noButton,this));
	
	Menu *m = Menu::create(ml,NULL);
	
	addChild(m);

	// auto item2 = MenuItemImage::create("CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::noButton, this) );
	
	auto item2 = MenuItemImage::create("CloseNormal.png", "CloseSelected.png", [](Ref *ref){MessageBox("","");});
	 
	Menu *m = Menu::create(item2,NULL);
	 
	addChild(m);

	auto spriteNormal = Sprite::create(s_MenuItem, Rect(0,23*2,115,23));
    
	auto spriteSelected = Sprite::create(s_MenuItem, Rect(0,23*1,115,23));
    
	auto spriteDisabled = Sprite::create(s_MenuItem, Rect(0,23*0,115,23));

    
	auto item1 = MenuItemSprite::create(spriteNormal, spriteSelected, spriteDisabled, CC_CALLBACK_1(HelloWorld::noButton, this) );
    

	 auto item1 = MenuItemToggle::createWithCallback( CC_CALLBACK_1(HelloWorld::noButton, this),
                                                               
							 MenuItemFont::create( "On" ),
                                                                
							 MenuItemFont::create( "Off"),
                                                                
							 NULL );
	 
	Menu *m = Menu::create(item1,NULL);
	 
	addChild(m);
3.進度條
4.計時器

【事件處理】
1、輸入框
TextFieldTTF *tf = TextFieldTTF::textFieldWithPlaceHolder("input","宋體",20);
	tf->setPosition(visibleSize.width/2,visibleSize.height/2);
	auto listener = EventListenerTouchOneByOne::create();
	listener->onTouchBegan = [tf](Touch *t,Event *e){ 
		if(tf->getBoundingBox().containsPoint(t->getLocation())){
		//監聽函數
			tf->attachWithIME();
		}else{
			tf->detachWithIME();
		}
		return false;
	}; 
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener,tf);
	
addChild(tf);
2、場景切換
LabelTTF *label = LabelTTF::create("Show next scene","Courlier",36);
addChlid(label);
label->setPosition(viibleSize.width/2,visibleSize.height/2);
auto listener = EventListenerTouchOneByOne::create();
	listener->onTouchBegan = [label](Touch *t,Event *e){ 
		if(label->getBoundingBox().containsPoint(t->getLocation())){
		   Director::getInstance()->replaceScene(ImageScene::createScene());
		}
		return false;
	}; 
	Director::getInstance()->getEventDispatcher()->addEventListenerWi
thSceneGraphPriority(listener,label);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章