cocos2d游戲源碼
A. 自學cocos2d 游戲開發應該按什麼步驟進行
建議的步驟如下:
1:學習計算機軟體開發相關的基礎課程,C/C++語言,軟體工程,數據結構,操作系統等
2:看cocos2d的源代碼,了解它的框架以及核心模塊(比如:內存管理,渲染流程,事件,UI)
3:看cocos2d自帶的sample
4:下載一個小游戲,研究源碼
5:寫一個簡單的游戲,用c/c++或者lua, js
B. 如何使用Cocos Code IDE和Cocos2d-x開發《一個都不能落下》游戲
1.創建新工程
打開Cocos Code IDE,切換到Lua工作環境
選擇菜單,新建一個Cocos Lua項目,輸入項目名:NoOneLeftBehind。
點擊下一步設置屏幕方向和解析度,確認完成
這個時候你就可以點擊運行按鈕,沒有問題的話示例demo就會彈出。
因為解析度被我們更改過的關系,游戲畫面有點變形。
2.游戲邏輯
現在我們就可以往游戲項目中添加自己的代碼了。由於游戲的代碼細節並不是本文的重點,所以這里只簡單地介紹《一個都不能落下》的實現原理。整個游戲項目源碼可以在我的Github上下載。
A.main.lua是游戲的入口,在main()函數中我們可以找到場景跳轉的代碼,這在介面上和Cocos2d-x是保持一致的,因此我們可以很容易上手。在這里我們更改第一個場景為主菜單場景。
--create scene
local scene = require("MenuScene")
local menuScene = scene.createScene()
if cc.Director:getInstance():getRunningScene() then
cc.Director:getInstance():replaceScene(menuScene)
else
cc.Director:getInstance():runWithScene(menuScene)
end
B.MenuScene.lua是游戲的主菜單,四種難度的游戲模式可以在這里進行選擇。你可以用下面這種方式創建一個menu。
--create menu
local function menuCallbackOpenNormal()
cc.Director:getInstance():replaceScene(require("GameScene").createScene(2))
end
local normal = cc.MenuItemImage:create("normal.png", "normal.png")
normal:setPosition(0, 150)
normal:registerScriptTapHandler(menuCallbackOpenNormal)
...
local menu = cc.Menu:create(normal, nightmare, hell, inferno)
self:addChild(menu)
C.GameScene.lua是游戲的主場景,通過傳進來的heroCount設置同時顯示幾個hero。
--add hero
function GameLayer:addControllers()
local visibleSize = cc.Director:getInstance():getVisibleSize()
local startY = 30
local gap = (visibleSize.height - startY) / self._heroCount
for i=1, self._heroCount do
local controller = require("HeroController").createController(self, startY + gap * (i - 1))
table.insert(self._controllers, i, controller)
end
end
D.在這里我們對英雄和他作用的環境進行了封裝。然後在GameScene的每一幀調用HeroController的onUpdate函數,在這個函數中檢測一個隨機定時器來判斷是否應該生成一個新的障礙物。
-- create block
function HeroController:onUpdate()
self.frameIndex = self.frameIndex +1
if self.frameIndex >= self.nextKeyFrameIndex then
local block = require("Block").new()
block:init()
self._layer:addChild(block)
block:setPositionY(self._positionY + block:getContentSize().height / 2)
self:resetTimer()
end
end
E.物理引擎。Hero和,Ground,Block的碰撞這里採用了Cocos2d-x集成的物理引擎。以下代碼反映了Hero和Block的碰撞檢測。
-- collision detection
self.touchListener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
cc.Director:getInstance():getEventDispatcher():(self.touchListener, self)
local function onContactBegin(contact)
self:unscheleUpdate()
cc.Director:getInstance():getEventDispatcher():removeEventListener(self.touchListener)
cc.Director:getInstance():getEventDispatcher():removeEventListener(self.contactListener)
cc.Director:getInstance():replaceScene(require("GameOver").create(self._heroCount, score))
end
self.contactListener = cc.EventListenerPhysicsContact:create();
self.contactListener:registerScriptHandler(onContactBegin, cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN);
local eventDispatcher = self:getEventDispatcher()
eventDispatcher:(self.contactListener, self);
F.Block類,封裝了障礙物,每一幀向左移動。如果超出了屏幕則刪除。
--move the block
function update(dt)
self:setPositionX(self:getPositionX() - 3.5)
if (self:getPositionX() < 0) then
self:unscheleUpdate()
self:removeFromParentAndCleanup()
end
end
self:scheleUpdateWithPriorityLua(update, 0)
3.各平台打包
點擊打包按鈕,
如果沒有添加本地代碼,會提示添加本地代碼。
A.Android打包
選擇打包為APK,選擇debug簽名或者自定義簽名,選擇SDK版本,確認生成。
B.iOS平台打包
選擇打包為IPA,選擇證書和平台,確認生成。.....
C. 手機游戲用Cocos2d游戲引擎的開發代碼如何保障不會被逆向破解
目前針對Cocos2d游戲引擎的開發代碼防逆向主要是通過隱藏lua腳本文件,根據愛加密介紹,通過隱藏lua腳本文件,可以保護代碼不被黑客給逆向,從而保護游戲邏輯的安全性。希望可以採納,謝謝!
D. cocos2d-X中如何暫停、恢復游戲求源碼
導演類有自己的方法,pause()和resume()就是暫停和恢復游戲。
E. 自學cocos2d js游戲開發應該按什麼步驟進行
跟你簡要說一下我的自學路,以免你走彎路
背景:
有工作,而且很忙;在不影響工作基礎上用業余時間鼓搗(經常會因為工作耽擱學習進度);基本沒技術背景(初中qbasic、高中pascal半吊子),大學文科,工作也不是搞代碼。因此我感覺我的自學路跟你還是挺契合的。
1
兩年前的一天,決定要做獨立游戲製作人。選定引擎cocos2d,開始學習objective-c語言;(如果你打算只在iOS平台開發可以學obj-c配合cocos2d或者sprite kit;如果打算跨平台就要用cocos2d-x和c++了;當然unity什麼的也不錯但是我還沒嘗試過,一直很嚮往)
2
我跳過了iOS程序開發(似懂非懂看完了斯坦福那一系列的教學視頻),結合當時情況直接選擇了cocos2d引擎,這時開始接觸 @吳一刀 推薦的博客;我主要看的是子龍山人<子龍山人 - 博客園>、Ray Wenderlich<Ray Wenderlich>、Himi<黑米GameDev街區>這些博客里最基本的例子,知易那個以我當時的水平還看不懂。
3
嘗試開始設計自己的簡單游戲,我做打地鼠!當然比教學例子里的打地鼠復雜多了
4
這個過程中發現自己懂的實在是不夠,所以又開啃這本書:Learn cocos2d 2 by Steffen Itterheim & Andreas Low
5
慢慢的發現需要一些趁手的工具和編輯器,並發展出一套自己構建於cocos2d之上的游戲設計架構。我目前的情況是這樣:
關卡編輯我使用plist文件配合自己寫的類;
sprite sheet使用TexturePacker<TexturePacker>;
動畫/UI編輯最初自己手寫太累,後來選擇了cocosbuilder,請注意現在這個軟體已經停止維護,轉而引導用戶使用SpriteBuilder<SpriteBuilder>(域名都做了自動跳轉;SpriteBuilder我木有研究過,建議你研究一下)。
粒子編輯我自己還沒實際用到,如果真正需要我感覺cocosbuilder的夠我用的。//更新:後來用到了ParticleDesigner和cocosbuilder兩個軟體的粒子編輯混搭
我當時遇到的一個大麻煩是如何讓cocosbuilder、cocos2d版本互相兼容且cocosbuilder無問題。大概情況是這樣:cocosbuilder2.1和cocos2d-iphone2.0及2.1版本都不協調怎麼辦?;What version of Cocosbuilder and Cocos2d-iphone should I choose?
目前我使用的cocosbuilder 2.1版本(漸變層有bug、並且很可惜動畫播放完沒有觸發消息的機制,我只好把每個動畫時長都手動記錄一下自己處理)
======3月12日更新======
在 @GarfieldKwong 指點下發現這個版本動畫播放完是可以觸發消息機制的,更高級版本3.x支持的效果應該是在動畫中就加入callback的關鍵幀
新技能get√
具體代碼可見下面學習案例的第一個例子里Explosion部分
=====================
cocosbuider的學習可以看兩個例子Creating a Game with CocosBuilder;Introction to CocosBuilder;然後就是多用多嘗試。
6
整個學習過程要學會查資料、學會尋求幫助,我主要用的stackoverflow(話說剛剛發現stackoverflow的reputation喜過15,終於可以投票了:)
在學習過程中得到了子龍山人(我認為本尊是這位 @屈光輝 )、LearnCocos2d作者Steffen、 @kubisoft 以及眾多網上朋友的幫助,再次表示感謝。
7
硬體及開發者資格:看完c++開始看obj-c,這個過程一直是使用的vmware虛擬機安裝的mac系統寫程序;然後入手一個最便宜的mac pro、以及iPhone,嘗試玩各種游戲;從看c++開始大約過了1年半(已經有非常簡陋的游戲demo)才真正購入iOS開發者資格並開始真機測試。
8
嘗試過的一些其他工具、各種彎路和坑、以及發散內容:
可以拖拽方式寫代碼的stencyl <Stencyl: Make iPhone, iPad, Android & Flash Games without code>;
最初學的不是ojc-c而是譚浩強老師的c++程序設計(雖然有人不喜譚老師,但那書是中文的讓我對面對對象程序設計有一些初步的概念,再看英文的obj-c不至於太摸不著頭腦,反正手頭正好有這么一本買了6年沒看的c++。。。);
嘗試過<Tiled Map Editor>但自己目前的坑沒有用到;
嘗試過一點物理引擎和粒子,但自己目前的坑沒有用到;現在粒子用到了,做了火焰等效果,也挺美的;但是一定要注意CPU佔用優化,內存方面我最低支持4S沒遇到大問題
學習音樂製作,這個我小時候學琴一直也喜歡音樂所以有一點點底子,如果沒有基礎可能上手有門檻;開始用的軟體LMMS,但是音源插件在64位系統的問題我一直沒解決掉時間精力也不多,所以是暫時停滯了;最近發現Garage Band可能也可以寫歌;另外還試過一個很有歷史的微軟的音樂自動編輯器,很好玩,用來做背景音樂也不錯。
入手手繪板學畫畫(這中間糾結了好久才決定用點陣圖不用矢量圖),如果你能找到熱愛游戲的美術同學一起搞那最好不過。但是我一直對畫畫心癢難搔。。。所以入了這個深坑,曬一曬:
轉載
z
F. Android游戲開發之Cocos2d-x
游戲的製作如播放電影,擁有四大核心,包括: 導演、場景、圖層、演員 。通過它們之間的不同配合,實現豐富多彩的效果。
public class CocosActivity extends AppCompatActivity {
private CCDirector mCcDirector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CCGLSurfaceView ccglSurfaceView =new CCGLSurfaceView(this);
setContentView(ccglSurfaceView);
導演,全局只有一個,單例模式創建
mCcDirector = CCDirector.sharedDirector();
開啟繪制(開始拍電影)
mCcDirector.attachInView(ccglSurfaceView);
幀率,每秒刷新的次數,與手機性能有關
//ccDirector.setDisplayFPS(true);
設置幀率為60(記得把幀率文件放進項目中)
//ccDirector.setAnimationInterval(1/60f);
設置橫屏
//ccDirector.setDeviceOrientation(CCDirector.);
屏幕適配,會基於不同屏幕大小進行適配
mCcDirector.setScreenSize(1920,1080);
場景
CCScene ccScene = CCScene.node();
圖層
CCLayer ccLayer =CCLayer.node();
給場景添加圖層
ccScene.addChild(ccLayer);
導演運行場景
mCcDirector.runWithScene(ccScene);
}
@Override
protected void onResume() {
super.onResume();
mCcDirector.onResume();
}
@Override
protected void onPause() {
super.onPause();
mCcDirector.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mCcDirector.end();
}
1、平移
參數1是移動時間,參數2是目標位置坐標,ccp方法是把坐標轉換為cocos2d的坐標
CCMoveTo ccMoveTo = CCMoveTo.action(3,ccp(200,0));
與上不同的是,第2個參數代表水平移動200,豎直不移動,即偏移量
CCMoveBy ccMoveBy =CCMoveBy.action(3,ccp(200,0));
2、旋轉
參數1時間,參數2角度,旋轉中心是左下角的點,順時針轉
CCRotateBy ccRotateBy =CCRotateBy.action(3,360);
與上不同的是,逆時針轉(捷徑,順時針轉270==逆時針轉90)
CCRotateTo ccRotateTo =CCRotateTo.action(3,270);
3、縮放
參數1時間,參數2X方向縮放,參數3Y方向縮放
CCScaleBy ccScaleBy =CCScaleBy.action(3,2,2);
參數1時間,參數2縮放
CCScaleTo ccScaleTo =CCScaleTo.action(3,2);
4、跳躍(參數1時間,參數2目標點,參數3跳躍高度,參數4跳躍次數)
CCJumpBy ccJumpBy =CCJumpBy.action(3,ccp(0,0),100,3);
5、淡入淡出(參數是時間)
CCFadeIn ccFadeIn =CCFadeIn.action(2);
CCFadeOut ccFadeOut =CCFadeOut.action(2);
6、貝塞爾曲線
點的含義,從point1出發,經過point2,到達endPosition
CCBezierConfig ccBezierConfig =new CCBezierConfig();
ccBezierConfig. controlPoint_1 =ccp(100,50);
ccBezierConfig. controlPoint_2 =ccp(200,200);
ccBezierConfig. endPosition =ccp(300,100);
CCBezierBy ccBezierBy =CCBezierBy.action(2,ccBezierConfig);
7、加速度
CCMoveBy ccMoveBy =CCMoveBy.action(2,ccp(100,100));
漸快漸慢,參數2是加速度
CCEaseIn ccEaseIn =CCEaseIn.action( ccMoveBy ,5);
CCEaseOut ccEaseOut =CCEaseOut.action( ccMoveBy ,5);
8、閃爍(時間,閃爍次數)
CCBlink ccBlink =CCBlink.action(2,10);
9、文字(參1是顯示的文字,參2是字體格式(可不填,如""),參數3是字體大小)
CCLabel ccLabel = CCLabel.labelWithString("顯示文字","STCAIYUN.TTF",20);
設置文字顏色
ccColor3B ccColor3B =ccc3(100,50,0);
ccLabel.setColor(ccColor3B );
設置文字位置
ccLabel.setPosition(ccp(width,height));
重置文字
ccLabel.setString("顯示文字");
顏色漸變(從本來的文字顏色漸變到設置的字體顏色)
CCTintBy tintBy =CCTintBy.action(3,ccc3(50,-50,100));
10、循環(參數是動畫效果)
CCRepeatForever ccRepeatForever =CCRepeatForever.action(action);
11、延遲(參數是時間)
CCDelayTime ccDelayTime =CCDelayTime.action(1);
12、反轉(將一個動畫倒序執行)
ccJumpBy.reverse();
13、同時(參數是不定長度數組)
CCSpawn ccSpawn =CCSpawn.actions(action1,action2);
14、連續動畫(參數是不定長度數組)
CCSequence ccSequence =CCSequence.actions(action1,action2, ccCallFunc ");
15、反射(執行一個動畫方法)
CCCallFunc .action(this," anim ");
被反射的執行方法
public void anim (){}
16、逐幀動畫
public void walk(){
存放幀動畫的集合
ArrayList ccSpriteFrames =new ArrayList<>();
String format="z_1_%d.png"; // %d和%02d代表整數,用i來取代,%d只取代i,%02d會補0
for(int i=1;i<10;i++){
CCSprite ccSprite =CCSprite.sprite(String.format(format,i));
CCSpriteFrame ccSpriteFrame =ccSprite.displayedFrame();
ccSpriteFrames.add(ccSpriteFrame );
}
參數1是動畫名稱,參數2是每一幀停留的時間,參數3是幀動畫集合
CCAnimation ccAnimation =CCAnimation.animation("walk",.2f,ccSpriteFrames);
參數2是否持續執行動畫,如果想執行無限循環,可以使用CCRepeatForever
CCAnimate ccAnimate =CCAnimate.action(ccAnimation,false);
mCcSprite.runAction(ccAnimate);
}
17、隱藏
CCHide ccHide =CCHide.action();
18、顯示
CCShow ccShow =CCShow.action();
19、跟隨(參數是跟隨的對象)
CCFollow ccFollow =CCFollow.action(mCCSprite);
20、執行動畫(上述皆是)
mCcSprite.runAction(action);
21、工具類使用
CGPointUtil .distance(point1,point2); //計算兩點距離
獲取聲音引擎
SoundEngine engine =SoundEngine.sharedEngine();
參數1是activity,SurfaceView創建時存入,參2是播放資源id(res\raw),參數3是否循環播放
engine.playSound(CCDirector.theApp,1,true);
手動停止音樂播放
engine.realesAllSounds();
生命周期跟隨Activity
SoundEngine.sharedEngine().resumeSound();
SoundEngine.sharedEngine().pauseSound();
SoundEngine.sharedEngine().realesAllSounds();
預載入播放音樂,避免播放音樂時沒聲音
SoundEngine.sharedEngine().preloadEffect();
SoundEngine.sharedEngine().preloadSound();
1、創建
CCSprite mCcSprite =new CCSprite(" pic.jpeg ");
2、錨點(圖片上的一點,類似圖釘,對應圖片顯示的位置)
CGPoint cgPoint =ccp(0,0);
mCcSprite.setAnchorPoint(cgPoint);
3、位置
mCcSprite.setPosition(cgPoint);
4、屬性(縮放、翻轉、透明度)
ccSprite.setFlipX(true); 水平翻轉
ccSprite.setOpacity(255); 透明度
ccSprite.setScale(2); 縮放
5、移除(在Layer裡面操作)
mCcSprite.removeSelf(); //精靈從圖層中移除
( Layer )this.removeSelf(); // 移除整個圖層
6、尺寸
CGSize cgSize =CCDirector.sharedDirector().winSize();
1、游戲暫停(圖層靜止,將不再響應任何事件)
MapLayer.this.onExit();
注意:因為圖層不再響應任何事件,所以暫停按鈕應該加在暫停圖層的父圖層上
this.getParent().addChild(new PauseLayer());
2、游戲繼續(圖層恢復動態,接收點擊事件)
MapLayer.this.onEnter();
通用的游戲繼續方法
CCDirector.sharedDirector().getRunningScene().onEnter();
3、定時器
CCScheler ccScheler =CCScheler.sharedScheler();
通過反射執行方法
ccScheler.schele(" onScheler ",this,2,false);
方法聲明為公開類型
public void onScheler (float f){ //實現具體邏輯
};
4、進度條
CCProgressTimer ccProgressTimer =CCProgressTimer.progressWithFile(" image/pic.jpeg "); //多層目錄
ccProgressTimer.setPosition(width,height);
this.getParent().addChild(ccProgressTimer); //具體加到什麼圖層,看情況
ccProgressTimer.setScale(0.6f);
ccProgressTimer.setPercentage(2);
設置顯示樣式(垂直,水平)->(最後2個字母,left,right,代表進度條從左往右)
ccProgressTimer.setType(CCProgressTimer. LR );
進度條外框 等元素,都作為精靈與進度條同級加入圖層
this.getParent().addChild(sprite);
Android坐標系的(0,0)在左上角,而Cocos2d-x坐標系的(0,0)在左下角。所以在處理Android的點擊事件MotionEvent時,需要進行坐標體系的轉換。
CGPoint cgPoint = convertPrevTouchToNodeSpace (event);
監聽圖片的點擊范圍,自定義封裝點擊事件
CGRect .containsPoint( mCcSprite.getBoundingBox() , cgPoint );
CCMenu ccMenu =CCMenu.menu();
CCSprite normalSprite =CCSprite.sprite("pic_1.jpeg"); //正常情況下顯示的圖片
CCSprite selectSprite =CCSprite.sprite("pic_2.jpeg"); //按下時顯示的圖片
注意:反射的方法需要使用pulbic修飾,參數指target,直接傳this,它不是上下文Context
CCMenuItemSprite itemSprite =CCMenuItemSprite.item( normalSprite , selectSprite , this ," onCLick ");
ccMenu.addChild( itemSprite );
this.addChild(ccMenu); //菜單添加到圖層
public void onCLick (Object obj){} //點擊事件響應方法,必須用public修飾以及帶參數
setIsTouchEnabled(true); //打開圖層點擊事件,默認關閉
模仿任何天氣現象,只需要改這一句,剩下的不變
CCParticleSystem ccParticleSystem= CCParticleSnow.node();
設置雪花大小
ccParticleSystem.setScale(2);
設置飄落的速度
ccParticleSystem.setSpeed(10);
設置雪花的圖片
ccParticleSystem.setTexture(CCTextureCache.sharedTextureCache().addImage("snow.png"));
this.addChild(ccParticleSystem,1);
停止粒子系統(下雪)
ccParticleSystem.stopSystem();
1、載入地圖
ArrayList mCGPoints = new ArrayList<>();
CCTMXTiledMap mCctmxTiledMap = CCTMXTiledMap.tiledMap(" map.tmx ");
mCctmxTiledMap.setAnchorPoint(ccp(0.5f,0.f));
mCctmxTiledMap.setPosition(width,height);
CCTMXObjectGroup cctmxObjectGroup= mCctmxTiledMap.objectGroupNamed("road");
ArrayList<HashMap<String,String>> objects = cctmxObjectGroup.objects;
for(HashMap<String,String> hashMap:objects){ //載入地圖的坐標(需要經過的坐標點)
Integer x =Integer.parseInt(hashMap.get("x"));
Integer y =Integer.parseInt(hashMap.get("y"));
CGPoint cgPoint =ccp(x,y);
mCGPoints .add(cgPoint); }
this.addChild(mCctmxTiledMap);
在地圖上添加精靈
mCCSprite.setPosition(mCGPoints.get(0));
mCctmxTiledMap.addChild(mCCSprite);
地圖跟隨精靈的移動而移動
CCFollow ccFollow =CCFollow.action(mCCSprite);
mCctmxTiledMap .runAction(ccFollow);
2、地圖隨手指觸摸事件移動(重寫觸摸方法)
@Override
public boolean ccTouchesMoved(MotionEvent event) {
手指拖拽時,地圖隨手指移動
mCctmxTiledMap.touchMove(event,mCctmxTiledMap);
地圖移動,地圖上所有精靈都隨之移動(地圖是父親,精靈是孩子)
mCctmxTiledMap.addChild(mCCSprite);
return super.ccTouchesMoved(event);
}
創建場景
CCScene ccScene =CCScene.node();
場景添加圖層
ccScene.addChild(ccLayer);
場景切換特效
CCJumpZoomTransition ccJumpZoomTransition =CCJumpZoomTransition.transition(2,ccScene);
導演切換場景
CCDirector.sharedDirector(). replaceScene (ccJumpZoomTransition);
CopyOnWrite容器即寫時復制的容器。通俗的理解是當我們往一個容器添加元素的時候,不直接往當前容器添加,而是先將當前容器進行Copy,復制出一個新的容器,然後新的容器里添加元素,添加完元素之後,再將原容器的引用指向新的容器。這樣做的好處是我們可以對CopyOnWrite容器進行並發的讀,而不需要加鎖,因為當前容器不會添加任何元素。所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器。用法和ArrayList相近。
CopyOnWriteArrayList OnWriteArrayList = new CopyOnWriteArrayList();
setIsTouchEnabled(true); //打開點擊事件
@Override
public boolean ccTouchesBegan (MotionEvent event) {
return super.ccTouchesBegan(event);
}
@Override
public boolean ccTouchesCancelled (MotionEvent event) {
return super.ccTouchesCancelled(event);
}
@Override
public boolean ccTouchesMoved (MotionEvent event) {
return super.ccTouchesMoved(event);
}
@Override
public boolean ccTouchesEnded (MotionEvent event) {
return super.ccTouchesEnded(event);
}
描述:UI頻繁刷新,造成主線程的堵塞或掛起
private CCGLSurfaceView mCCGLSurfaceView;
mCCGLSurfaceView = (CCGLSurfaceView) CCDirector.sharedDirector().getOpenGLView();
mCCGLSurfaceView.queueEvent(new Runnable() {
@Override
public void run() { //切換到主線程
}
});
描述:CCSprite運行動畫時,沒有表現出任何視覺效果。
原因:一個動畫只能被一個CCSprite執行一次,執行完成後,原來的動畫會失效。
解決:每次執行的動畫,都需要重新生成,即使是相同的動畫效果。
緩存:CCDirector.sharedDirector().purgeCachedData();
G. cocos2d-x 新手 下載過的游戲源碼怎麼用,classes文件夾里邊還有文件還有文件夾,在proj.android/jni
按照路徑把所有的.cpp文件載入即可,沒載入的話cgwin會報錯的。
比Actor這個文件夾的就在
LOCAL_SRC_FILES := hellocpp/AppDelegate.cpp \
../../Classes/GameRoot.cpp \
../../Classes/Carrot.cpp\
../../Classes/Actor/....cpp
H. 哪裡有cocos2d小游戲源碼
推薦你看看Jason.Z老師的《基於Cocos2d-x游戲引擎實戰開發炸彈超人(TexturePacker打包、地圖、LevelHelper關卡)》這套視頻教程,整套教程一共31講,本課程由淺入深的介紹Cocos2d-x的開發流程。從軟體使用到API介面的使用,從成品到優化。介紹整個Cocos2d-x的基本開發過程及開發中碰到的基礎問題進行深入講解。對代碼重構及代碼優化做出示例,讓學員能逐步的了解Cocos2d-x開發的注意點。課程大綱 第一講:Cocos2d-x 簡介及基礎知識 第二講:Cocos2d-x 基本理論知識 第三講:Cocos2d-x 環境搭建 第四講:Cocos2d-x 之HelloWorld解析 第五講:Cocos2d-x 游戲框架設計 第六講:Cocos2d-x 坐標系及文字 第七講:Cocos2d-x 菜單及場景(一) 第八講:Cocos2d-x 菜單及場景(二) 第九講:Cocos2d-x 層、錨點 第十講:TiledMap 瓦片地圖製作與使用 第十一講:Cocos2d-x 隨機數與容器類 第十二講:TexturePacker與動畫 第十三講:Cocos2d-x 觸摸事件(一) 第十四講:Cocos2d-x 觸摸事件(二) 第十五講:虛擬搖桿和鍵盤(一) 第十六講:虛擬搖桿和鍵盤(二) 第十七講:TiledMap碰撞檢測和視角移動 第十八講:代碼重構 第十九講:單例模式 第二十講:動畫管理類 第二十一講:炸彈模塊 第二十二講:怪物模塊 第二十三講:道具模式 第二十四講:碰撞檢測(一) 第二十五講:碰撞檢測(二) 第二十六講:關卡設計 第二十七講:音效及用戶配置 第二十八講:游戲完善及win32打包 第二十九講:Android環境搭建及代碼移植 第三十講:IOS環境搭建及代碼調試 第三十一講:廣告嵌入及應用發布
I. 新手剛接觸cocos2d-x,在網上下載的游戲的源碼怎麼加入到VS2010中運行在VS中已經配置好了cocos2d-x。
在VS2010 下添加 源碼\proj.win32\ 項目名稱.win32.vcproj 就可以了
J. 自學cocos2d 游戲開發應該按什麼步驟進行
1:首先要有軟體開發的基礎(C/C++語言,數據結構,演算法,圖形學等)
2:看cocos2d的源碼,了解游戲引擎的框架及核心概念(內存管理,UI,scene, node, sprite的實現,腳本Lua與JS)
3:瀏覽引擎自帶Sample中的代碼,知道引擎能做什麼以及怎麼實現的
4:腳本語言
5:做項目