① cocos2dx場景黑邊我使用的Sprite作為Layer的背景,我設置sprite的位置為Layer的中心點,
Size VisibleSize = Director::getInstance()->getVisibleSize();
Vec2 VisibleOrigin = Director::getInstance()->getVisibleOrigin();
//BackGround 1
_BackGround_1 = Sprite::create("background.jpg");
float ScaleTimes = VisibleSize.height / _BackGround_1->getContentSize().height;//計算縮放倍數
_BackGround_1->setScale(ScaleTimes);
② 如何使用cocos2d
cocos2d是一個非常強大的開源庫,它可以為你開發iphone上面的游戲節省大量的時間。目前支持精靈(sprite)、動畫、物理引擎、聲音引擎以及許許多多非常酷的圖像效果等等。
我也是剛開始學習cocos2d,目前已經有許多非常好的教程來教你如何使用cocos2d了。但是,那些都不是我想要的。我真正想要的是一個非常簡單,但是可以跑起來的游戲。這個游戲包括怎麼使用動畫、碰撞檢測和播放聲音,這就夠了,並不需要使用太多高級的特性。最終,我自己做了一個這樣的游戲,因此,基於我的一些經驗寫了這篇教程,希望會對初學者有所幫助。
這篇教程將會從頭至尾、一步一步地教你如何使用cocos2d來製作一個簡單的iphone游戲。你可以按照教程一步步來,或者乾脆直接跳到文章的最後,下載樣常式序。沒錯!游戲裡面有忍者。
下載並安裝cocos2d
你可以從下面的鏈接來下載cocos2d的最新版本(以前是google,現在採用git了) the Cocos2D Google Code page.
在你下載完代碼以後,你可能想安裝非常有用的項目模板。打開終端窗口,然後cd到你的cocos2d解壓縮目錄下面,輸入./install_template.sh
請注意,你可以傳遞一些參數給這個安裝腳本,比如你把xcode安裝在了一個非標準的目錄下面。(或者你有多個版本的sdk安裝在你的機器上面)
Hello, Cocos2D!
讓我們從最簡單的HelloWorld項目開始吧!啟動xcode,點file->new project,然後選擇cocos2dApplicationtemplate來創建一個新的cocos2d項目並把它命名為「Cocos2dSimpleGame」
繼續,點編譯並運行這個工程模板,如何一切都ok的話,那麼你會看到下面的內容:
cocos2d是按照「場景」(scene)的概念組織的,對一個游戲來說,就好像某個關卡或者屏幕之類的。比如,你可能需要一個場景來為你的游戲建立初使化菜單界面,另外一個場景當作玩游戲的主要界面,還有一個游戲結束的時候的界面。在一個場景裡面,你可以有許多「層」(layer)(這個和photoshop有點類似)。每一個層又可以包含一些結點,比如精靈、標簽、菜單等。而且一個結點也可以包含其它的結點。(比如,一個精靈可以包含一個子精靈)
如果你看一下樣例工程,你會看到只有一個場景HelloWorldScene--我們接下來將會在這個場景裡面實現我們的游戲邏輯。繼續打開它,你會在init方法裡面看到,它把一個帶有「HelloWorld」字樣的標簽加到了當前場景中。我們將把這些代碼去掉,並且放一個精靈在上面。
增加一個精靈
在我們增加一個精靈之前,我們需要一些圖片。你可以自己去創建一些,或者使用我可愛的妻子為這個項目所創建的圖片: a Player image, a Projectile image, and a Target image.
一旦你獲得了這些圖片,你就可以把它們用滑鼠拖到xcode的resource文件夾中去,並且保證「 Copy items into destination group』s folder (if needed)」勾上了。現在,我們擁有自己的圖片了,我們先得計算一下,應該把player放在哪裡。請注意,cocos2d坐標系的原點在屏幕的左下角,即(0,0)位置在左下角,這與一般的窗口坐標系統在左上角有所區別。x方嚮往右是正,y方嚮往上是正。由於項目是landscape(橫版)模式,這就意味著右上角的坐標是(480,320)。
還有需要注意的是,當我們設置一個對象的位置的時候,這個位置是相對於所加精靈的中心點來加的。因此,如果我們想讓我們的player精靈與屏幕的左邊界水平對齊,並且垂直居中的話。
那麼對於x軸:我們需要設置為[player sprite's width]/2。y坐標設置為[window height]/2。
下面有一張圖,可以更加清楚一些:
好,讓他開始射擊吧!打開Class文件夾並點擊HelloWorldScene.m,然後把init方法用下面的代碼替換掉:
復制代碼
-(id) init
{
if( (self=[super init] )) {
CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite *player = [CCSp www.hbbz08.com rite spriteWithFile:@"Player.png"
rect:CGRectMake(0, 0, 27, 40)];
player.position = ccp(player.contentSize.width/2, winSize.height/2);
[self addChild:player];
}
return self;
}
復制代碼
編譯並運行,你的精靈這時候應該出現在正確的位置上了。但是,這個前景默認是黑的。對於這張忍者圖片來說,白色的背景可能看起來更好一些。在cocos2d裡面,有一種非常簡單的方式來改變層的背景顏色,那就是使用CCColoredLayer類。好,跟我來吧!點擊HelloWorldScene.h,然後把HelloWorld介面聲明改成下面這樣:
@interface HelloWorld : CCColorLayer
然後點擊HelloWorldScene.m文件,在init方法裡面做一些小小的修改,以便使我們能把層的背景顏色改成白的:
③ cocos2d-x怎麼實現更換背景圖
首先背景圖片要是上下能連接在一起,不能有太明顯的差異感。 兩個Sprite全放背景圖片,一個描點0,0 一個描點0,1 position 都設置0,0 然後做個update 裡面對兩張圖片進行setPositionY(getPositionY + 1) 想速度快 增加的數就大點
④ cocos2d-x 3.0 怎麼設置android的自適應屏幕
雖然 cocos2d-x自帶了三種模式來適應屏幕,但還是存在一些問題,會產生黑邊,所以還是需要多套資源來適應屏幕。
這里我選擇了四種解析度9:16 3:5 2:3 3:4,在resource資源目錄下新建了四個文件夾放置多套背景圖片,在AppDelegate中添加如下函數調用即可。
⑤ 怎樣設置cocos2dx背景透明
方法/步驟
1
廢話不多說,先放圖。
2
就如果你想讓你的activity透明,很簡單,只需要4步。1. 打開AndroidManifest.xml文件,添加Translucent到
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
3
2.打開Cocos2dxActivity.java文件,添加
getWindow().setFormat(PixelFormat.TRANSLUCENT);
4
3.打開cocos2d/cocos/2d/CCDirector.cpp文件,找到setGLDefaultValues()函數,修改最後一個alpha值,范圍從0.0f到1.0f。
5
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
6
4.打開cocos2d/cocos/2d/platform/android/nativeactivity.cpp,找到engine_init_display(struct engine* engine)函數,修改如下數組
7
從
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 5,
EGL_GREEN_SIZE, 6,
EGL_RED_SIZE, 5,
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};
到
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
//EGL_BLUE_SIZE, 5, -->delete
//EGL_GREEN_SIZE, 6, -->delete
//EGL_RED_SIZE, 5, -->delete
EGL_BUFFER_SIZE, 32, //-->new field
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};
⑥ cocos2d-x中怎樣設置循環滾動背景為上下循環
首先背景圖片要是上下能連接在一起,不能有太明顯的差異感。
兩個Sprite全放背景圖片,一個描點0,0 一個描點0,1 position 都設置0,0
然後做個update 裡面對兩張圖片進行setPositionY(getPositionY + 1) 想速度快 增加的數就大點
⑦ cocos2d載入程序時的那個背景圖片如何添加,那個背景圖片在給定的plist文件里
cocos2d載入程序時的那個文件是一個命名為Default.png的圖片,你可以命名一個同名圖片去覆蓋它。
通常游戲的開始畫面可能不僅僅是一張圖片,載入了。
我不記得是cocos2d哪個版本了,在AppDelegate文件里有一個removeStartupFlicker方法,裡面注釋著以下內容
- (void) removeStartupFlicker
{
//
// THIS CODE REMOVES THE STARTUP FLICKER
//
// Uncomment the following code if you Application only supports landscape mode
//
#if GAME_AUTOROTATION ==
//CC_ENABLE_DEFAULT_GL_STATES();
//CCDirector *director = [CCDirector sharedDirector];
//CGSize size = [director winSize];
//CCSprite *sprite = [CCSprite spriteWithFile:@"Default.png"];
//sprite.position = ccp(size.width/2, size.height/2);
//sprite.rotation = -90;
//[sprite visit];
//[[director openGLView] swapBuffers];
//CC_ENABLE_DEFAULT_GL_STATES();
#endif // GAME_AUTOROTATION ==
}
把CCSprite *sprite = [CCSprite spriteWithFile:@"Default.png"];
在這里你可以取你plist里的那個圖片路徑來顯示它
當然,通常的做法是自己創建一個初始畫面的類,不去顯示Default.png,自己在類裡面做這個初始畫面,是淡入淡出也好,甚至播動畫也好,都可以自己把控。要記得把初始場景設為它。
⑧ cocos2d怎麼使用texture素材
我使用張圖片給我歷圖片添加邊框種帶波紋效邊框四邊形張圖片透明部遮罩效部白色區域則歷圖片顯示區域
實現效我使用OpenGL混合模式
看《何使用CCRenderTexture態創建紋理》篇教程我討論OpenGL混合模式我提非便線工具用見化調節混合模式效
完我想要效我需要採取面策略:
我首先渲染mask精靈src color(mask精靈)設置GL_ONE並且destination
color(空buffer)設置GL_ZERO所效簡單mask圖片顯示
接我渲染歷圖片精靈src
color(歷)設置GL_DST_ALPHA意思看看mask圖片前alpha值少0(完全透明)顯示mask1(完全透明)顯示歷圖片(譯者註:家明白參考鏈接)dst
color(the mask)設計GL_ZERO前渲染mask消失
酷吧能覺我需要先mask精靈渲染再渲染歷精靈並且指定兩精靈blendFunc行實際行通
面所提混合算精靈面些精靈渲染候問題---比背景圖片面精靈作假設面做完1步驟imgae
buffer面存唯張圖片mask(假設確啦要切換歷圖片)
我需要種式建立干凈黑板執行12步製作遮罩紋理幸運用RenderTexture非便
Masking
and CCRenderTexture]
RenderTexture類讓屏幕外buffer面渲染
用起非便主要原---使用給游戲截屏高效緩存用戶渲染內容運行態創建sprite
sheet或者像本教程製作mask sprite
使用RenderTexture需要採取4步:
創建RenderTexture類像素單位指定想要繪制紋理寬度高度
調用RenderTexturebegin初始化渲染操作
調用OpenGL函數繪制實際內容--些OpenGL調用終都繪制屏幕外影響游戲現渲染圖像
調用RenderTextureend結束繪制操作旦完RenderTexturesprite屬性用Sprite用
要覺第3步奇怪---使用Cocos2d90%情況需要手直接調用OpenGL函數想渲染節點直接調用某節點visitsprite->visit函數自發射些OpenGL函數指針給圖形硬體顯示
點需要注意坐標問題(00)點渲染紋理左角位置所使用RenderTexture候定要坐標設置
能聽些煩程序員喜歡看代碼讓我始coding吧
給精靈添加遮罩: 終實現
打HelloWorldScene.minit面添加面注意靜態文件聲明需要注意:
//a static method
Sprite* HelloWorld::maskedSpriteWithSprite(Sprite* textureSprite, Sprite* maskSprite)
{
// 1
RenderTexture * rt = RenderTexture::create( maskSprite->getContentSize().width,
maskSprite->getContentSize().height );
// 2
maskSprite->setPosition(maskSprite->getContentSize().width/2,
maskSprite->getContentSize().height/2);
textureSprite->setPosition(textureSprite->getContentSize().width/2,
textureSprite->getContentSize().height/2);
// 3
maskSprite->setBlendFunc( BlendFunc{GL_ONE, GL_ZERO} );
textureSprite->setBlendFunc( BlendFunc{GL_DST_ALPHA, GL_ZERO} );
// 4
rt->begin();
maskSprite->visit();
textureSprite->visit();
rt->end();
// 5
Sprite *retval = Sprite::createWithTexture(rt->getSprite()->getTexture());
retval->setFlippedY(true);
return retval;
}
讓我步步解面操作:
使用mask精靈創建CCRenderTexture
重新設置mask精靈texture精靈位置使左角(00)
按照我前討論設置每精靈blendFunc
調用CCRenderTexturebegin始渲染操作依渲染masktexture精靈調用end
基於CCRenderTexturesprite屬性texture創建新精靈同翻轉y紋理創建倒
接我使用面函數製作遮罩效:
//cal->setPosition(visibleSize.width/2, visibleSize.height/2);
Sprite * mask = Sprite::create("CalendarMask.png");
Sprite * maskedCal = maskedSpriteWithSprite(cal, mask);
maskedCal->setPosition(visibleSize.width/2, visibleSize.height/2);
//pRet->addChild(cal);
pRet->addChild(maskedCal);
編譯並運行
⑨ 開發iphone的游戲時,怎麼把游戲背景設置自己想要的圖片求代碼參考
lz用什麼引擎的?cocos2d?如果是的話就是載入一幅與游戲區域等大小的圖片即可 。
那更簡單了,別用導航欄,同時隱藏狀態欄,弄一個imageView弄的和游戲場景一樣大,載入一個圖片放到最底層就好了
回復 zhuxurong123:這個就要用到touchesmoved(好像叫這個,你看看api)。通過這個方法的參數可以獲得手指在屏幕上的位置,每次手指移動都會調用這個方法。在這個方法里記錄下每次手指的位置然後對你想要移動的uiview或其子類創建一個移動動畫(在動畫開始前記得停止本view的所有動畫,否則移動路徑就亂了),這樣做可以做出view跟隨手指移動的效果,或者更簡單一點,通過手指位置坐標點直接設置view坐標,也可以達到view隨手指移動的效果
#pragma mark - Finger Move View
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSArray *pointArray = [touches allObjects];
UITouch *touch = [pointArray objectAtIndex:0];
CGPoint pointInView = [touch locationInView:self.view];
self.curView.center = pointInView;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSArray *pointArray = [touches allObjects];
UITouch *touch = [pointArray objectAtIndex:0];
CGPoint pointInView = [touch locationInView:self.view];
self.curView.center = pointInView;
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, 60.f, 60.f)];
newView.backgroundColor = [UIColor orangeColor];
self.curView = newView;
[self.view addSubview:newView];
newView = nil;
}
⑩ 如何使用 Cocos Studio 場景編輯器製作《魔卡幻想》主界面
內容列表
1 cocostudio 場景編輯器
2 使用 cocostudio 完成《魔卡幻想》場景編輯
2.1 UI 編輯器製作游戲主界面
2.2 建立關鍵幀動畫
2.3 場景編輯器的 資源「整合」
3 在 cocos2d-x 中載入場景資源 並運行之
3.1 載入場景內容
3.2 在場景中播放動畫
3.3 對場景的一些編碼說明
1.cocostudio 場景編輯器
前面的文章 《使用 cocostudio 創建 cocos2d-x 序列幀和骨骼動畫》《如何使用 cocostudio UI 編輯器實現《亂斗堂》設置界面》,其中介紹了如何使用動畫編輯器創建動畫與使用 UI 編輯器創建游戲配置界面,而本文將集兩者之大成,使用 cocostudio 場景編輯器來創建游戲場景,其中包含游戲 UI 與動畫,來定製一個游戲主界面。
2.使用 cocostudio 完成《魔卡幻想》場景編輯
對於環境的搭建使用,請參考之前的文章,或者實時關注 官方 最新版本的安裝使用方法。
2.1 UI 編輯器製作游戲主界面
a.創建項目(項目名稱:MysticalCard),並導入項目 UI 資源,添加 一圖片框設定背景圖片。注意在工具攔設置 「畫布」 的大小(如果需要),這將決定著你的設計解析度,在運行時還需要注意屏幕的適配問題,如放大縮小,位置偏移等,視具體情況而定。
b.為界面添加 UI 元素,圖片框等,請根據自己的需要定製.
c.實踐過程中的注意事項
添加控制項時注意必要的屬性設置
控制項的命名規范,這有助於我們今後在後台編寫代碼獲取界面元素
可交互的控制項的 「可交互屬性」 開啟
2.2 建立關鍵幀動畫
除了主界面一些必要的 UI 控制項,我們還需要一個 「對話框指示」 的動畫效果。這是一個幀動畫。
a.准備工作。
打開 CocoStudio ,啟動 動畫編輯器
創建一個新的項目,後導入資源(在 「資源窗口」 中,點擊 「文件」 或者 「文件夾」 標示,添加需要的素材資源)
在 「資源窗口中」 點擊關鍵幀動畫的守幀圖片,拖動至 「渲染窗口」
如下圖所示:
b.將第一關鍵幀拖動至 「渲染窗口」 中心。 可以使用工具欄,快速定位至窗口中心,使圖片顯示在正中間,可以讓動畫更好的定位。
c.添加其它幀圖片,注意,我們需要選中剩餘圖片,然後 「拖動」 到 「對象結構」 視圖中的 「第一關鍵幀」 所在的對象,如下圖所示。
關鍵幀 與 骨骼動畫操作區別:在使用骨骼動畫的時候,我們將骨骼中的各部分元素,直接拖動添加到 「渲染窗口」,以擺放各骨骼的位置關系,而在 「對象結構」 視圖中則表現為,一個列表,標示著每一e.塊骨骼對象,不同幀所改變的是各個骨骼對象的位置,以達到骨骼動畫效果。
而在關鍵幀動畫中,它的對象結構只有一個,而在每一幀修改的不是其位置,而是其顯示內容。這是兩者之間的區別,那操作方式也有所不同。而對於它們所導出的 資源 則是相同,用法也是同樣。
d.剩餘幀添加之後,我們看見在 「關鍵幀」 視圖中,已經有了多幀動畫,可以播放動畫,查看效果,並可以通過修改 「速率」 來控制動畫的播放速度。
導出動畫資源,導出的資源文件可以被我們在 Cocos2d-x 中以代碼的方式直接載入,然後播放其動畫,也可以作為 場景編輯器中的一個元素,被添加在場景編輯器里,後面的內容就是使用 場景編輯器來載入一個動畫的方式。
2.3 場景編輯器的 資源「整合」
使用 CocoStudio 可以很好的幫助游戲開發過程中 分工合作。動畫編輯器 和 UI 編輯器可以由多個人進行編輯,最後再由一個人統合資源,這也就是場景編輯器的優點了,它除了能支持 CocoStudio 本身所自帶的動畫編輯器,UI 編輯器,它還能支持,Tmx 地圖資源,粒子編輯器的粒子效果資源,聲音資源等~並且不斷擴展中。
以下將給出如何在 場景編輯器整合我們之前所創建的動畫與 UI 界面的資源,來實現我們一個場景的運行效果。它的步驟如下:
a.啟動場景編輯器,新建一個場景項目。並設置 「畫布」 大小。畫布大小要適量。
b.我們拖動一個 UI 控制項到畫布之上,它作為我們之前導出的 UI 資源的承載。
c.我們將之前的 UI 編輯器所導出的資源,導入到當前場景項目中來,導入方式與 UI 編輯器導入資源方式同樣,如下圖:.
d.為 UI 控制項的 「文件」 屬性賦值:我們在資源視圖中找到 UI 編輯器所導出的 UI 資源,其目錄下包含 json 文件資源(如這里的 「MysticalCard_1.json」),將其拖動到 UI 控制項的文件 屬性中去,如下圖所示:
e.前面的步驟已經將 UI 資源導入場景之內,現在需要添加之前所創建的動畫資源。
我們以相同的方式導入動畫編輯器所導出的動畫資源文件。
拖動一個骨骼控制項至場景界面,如下圖所示。
為骨骼控制項的 「文件」 屬性賦值,其值為 動畫資源中的 ExportJson(或者 json 文件,這取決於動畫資源的導出方式) 文件。
f.運行效果:當我們建立好場景之後,可以通過工具欄運行按鈕,點擊查看效果,這意味著你不用將所有的資源文件,手動以代碼的方式添加到 Cocos2d-x 中,便能看到效果。
在運行效果中,所有的控制項都是可操作的,如下圖,但這里只有點擊效果,如果需要實現其邏輯,那麼現在需要將其載入到 Cocos2d-x 項目中,編寫後台代碼實現。
3.在 Cocos2d-x 中載入場景資源 並運行之
3.1 載入場景內容
前面那麼多步驟,使用 CocoStudio 來創建了 UI,動畫,還有一個場景,而要將其運行在實際的項目中,就非常的簡單與方便了,只需幾行代碼,就能夠將其載入到項目中去,當然在這之前我們需要將場景編輯器的資源(場景項目目錄中 「Resources」 目錄,其中將包含一個 json 文件)復制到項目資源目錄中去:
// 載入場景資源
CCNode *pNode = CCJsonReader::sharedJsonReader()->createNodeWithJsonFile(「McScene.json」);
this->addChild(pNode);
通過 CCJsonReader 來讀取解析 json,從而獲得場景中的節點內容,直接添加到當前的場景就能運行。
3.2 在場景中播放動畫
默認載入的場景資源 動畫 組件是沒有播放的,需要手動獲取動畫組件對象,然後調用其播放方法,當然這個步驟也是非常簡單的:
// pNode 為 之前所獲取的場景資源根節點,通過此節點獲取到動畫對象,獲取方式根據在場景編輯其中設置的層次關系而定
CCComRender *pLoadRender = (CCComRender*)(pNode->getChildByTag(1)->getChildByTag(1)->getComponent(「CCArmature」));
CCArmature* armLoad = (CCArmature*)(pLoadRender->getRender());
armLoad->getAnimation()->playByIndex(0);
3.3 對場景的一些編碼說明
使用 CocoStudio 就是為了幫助我們快速的建立 UI 原型,然後通過編碼可以獲取到裡面的任意一個元素對象,並修改其屬性值,調用其方法,正如上面所示播放一個動畫的方法同樣。其步驟如下:
通過 CCJsonReader 類讀取 json 文件,將會自動解析構建對象,返回一個節點 CCNode
任何元素都能通過這個 CCNode 節點,獲取到,它其實就是一個樹,所不同的是層級關系(樹節點的位置)
找到需要對象所在的 「樹枝」,後通過 getComponent 方法獲取 所在的 CCComRender 對象
通過 CCComRender 的 getRender 方法獲取最終對象
得到我們所需要的具體對象之後,我們就能夠對齊進行草,設置屬性,調用方法等,諸如此類
轉載,僅供參考,祝你愉快,滿意請採納。