2016年11月14日 星期一
20161114 cocos2d onTouchCancelled()方法是在什麼時候調用的呢?
onTouchCancelled()方法是在什麼時候調用的呢?其實這個方法基本沒什麼用,它唯一會被用到的情況就是當我們在觸摸的時候不小心按到了手機的home鍵,遊戲退出後台有可能會調用該方法。
2016年10月18日 星期二
1018 std::thread 使用(建立class 避免無法釋放資源)
修改成功的範例:
功能
1.建立為class 可以自己釋放資源
2.釋放的thread 記得用join
3.利用 getInstance() ,使程式不用特定init
(不過在此還是有特定建立無用的initCMDData() 來提早初始化
4.確認再PC上可以正常結束 不會有異常
.H
.CPP //非完整程式碼 部分函數沒有貼上
原始參考範例
https://stackoverflow.com/questions/38538438/how-to-terminate-a-stdthread
class PomeloThreadClass
{
public:
//CREATE_FUNC(PomeloThreadClass);
PomeloThreadClass();
~PomeloThreadClass();
static PomeloThreadClass* getInstance();
//指令相關函數.
void saveCMD(int cmdID, const char* pData); //紀錄指令資料.
void nextCMDID(); //指向下一個空間.
bool bNewCmdID(); //判斷是否有新指令.
void initCMDData(); //初始化指令空間
//執行緒主函數
void initThread();
void notify();
void mainFunction();
private:
std::thread pomelo_thread;
std::mutex pomelo_mtx;
std::condition_variable pomelo_threadcv;
bool ThreadEndFlag ;
pomeloCmd_t pomeloCMD[MAX_POMELO_CMDID];
int pomelpCmdIdx_Save ;
int pomelpCmdIdx_Now ;
};
static PomeloThreadClass* m_Thread = nullptr;
PomeloThreadClass::PomeloThreadClass():
ThreadEndFlag(false),
pomelpCmdIdx_Save(0),
pomelpCmdIdx_Now(0)
{
initCMDData();
}
void PomeloThreadClass::initCMDData()
{
for (int i = 0; i < MAX_POMELO_CMDID; i++)
{
memset(pomeloCMD, 0, sizeof(pomeloCmd_t));
pomeloCMD[i].cmdID = POCMDID_NULL_CMDID;
}
pomelpCmdIdx_Save = 0;
pomelpCmdIdx_Now = 0;
}
PomeloThreadClass::~PomeloThreadClass()
{
if (pomelo_thread.joinable())
pomelo_thread.join();
if (!m_Thread)
{
free(m_Thread);
m_Thread = nullptr;
}
}
PomeloThreadClass* PomeloThreadClass::getInstance()
{
if (!m_Thread)
{
m_Thread = new PomeloThreadClass;
m_Thread->initThread();
}
return m_Thread;
}
//建立接收的網路的thread
void PomeloThreadClass::initThread()
{
pomelo_thread = std::thread(&PomeloThreadClass::mainFunction, this);
pomelo_thread.detach(); //產生新的Thread 不用等待結束
}
//通知thread
void PomeloThreadClass::notify()
{
pomelo_threadcv.notify_one(); //取得回傳數值
}
void PomeloThreadClass::mainFunction()
{
std::unique_lock<std::mutex> threadMtx(pomelo_mtx);
int restule = 0;
try
{
while (!ThreadEndFlag)
{
pomelo_threadcv.wait(threadMtx); //等待訊號
while (bNewCmdID())
{
switch (pomeloCMD[pomelpCmdIdx_Now].cmdID)
{
case POCMDID_Login:
log("LogOK");
ChangLayer_MainSlot();
break;
default:
break;
}
nextCMDID();
}
}
}
catch (std::exception const & ex)
{
log("it's trouble when thread close");
// perhaps log the message, ex.what()
}
}
https://stackoverflow.com/questions/38538438/how-to-terminate-a-stdthread
class YourClass {
public:
~YourClass() {
if (_thread != nullptr) {
_thread->join();
delete _thread;
}
}
void mainProcees() {
_thread = new thread(&YourClass::downloadImg,this);
}
private:
thread *_thread = nullptr;
};
UPDATE
Just as @milleniumbug pointed out, you don't need dynamic allocation for the
thread object, since it is movable. So the other solution is as follows.class YourClass {
public:
~YourClass() {
if (_thread.joinable())
_thread.join();
}
void mainProcess() {
_thread = std::thread(&YourClass::downloadImg, this);
}
private:
std::thread _thread;
};
2016年9月29日 星期四
0929 安裝pomelo
1. 安裝 Node
下載網頁 https://nodejs.org/en/download/
下載檔案 node-v6.7.0-x64.msi
執行安裝
安裝完畢 可以控制台cmd 下執行 node -v
如有版本就是安裝完畢了
2.安装component
在CMD 輸入
npm install -g component
別忘了參數-g,表示全局安裝,這樣你在cmd任何路徑下都可以使用componen
驗證
component -V
3.安装pomelo
npm install -g pomelo
驗證
pomelo --version
4.创建pomelo_demo
mkdir HelloWorld
下載網頁 https://nodejs.org/en/download/
下載檔案 node-v6.7.0-x64.msi
執行安裝
安裝完畢 可以控制台cmd 下執行 node -v
如有版本就是安裝完畢了
2.安装component
在CMD 輸入
npm install -g component
別忘了參數-g,表示全局安裝,這樣你在cmd任何路徑下都可以使用componen
驗證
component -V
3.安装pomelo
npm install -g pomelo
驗證
pomelo --version
4.创建pomelo_demo
mkdir HelloWorld
cd HelloWorld
pomelo init
然後驗證 gameserver 是否正常
執行
npm-install.bat
進行安裝完畢後,cmd會自動切換到game-server 目錄下,我們接著執行:
pomelo start
如果不出錯的話,我們就可以看到game-server運行起來了,接著我們可以用ctrl+c來殺死服務器進程
接著將cmd目錄切換至web-server下,執行:
bin\component.bat
如果出現錯誤訊息 請手動執行 指令
component install
component build
等待執行完畢後,我們的Demo基本就弄好了
5.開始伺服器
game-server目錄運行 pomelo start
web-server目錄下運行 node app
一切順利的話我們就可以打開瀏覽器訪問:http://127.0.0.1:3001/index.html
點擊Test Game Server按鈕就會彈出一個對話框顯示 gameserver is ok
2016年9月26日 星期一
0926 libpomelo2加入cocos2d-x项目(Windows、Android、IOS平台)
http://www.bozhiyue.com/anroid/wenzhang/2016/0506/65160.html
安裝完畢
2. 進入libpomole2目錄 執行下面指令(依據gyp安裝目錄不同 下面指令需要做一些變更)
3.
修改deps/uv/vcbuild.bat
line 93 附近 將ˇgyp 的GIT 來源改為 https://chromium.googlesource.com/external/gyp
執行 vcbuild.bat
產生 libuv.vcxproj 表示完成
因為libpomelo2 已經將jansson 移除 所以看不到此目錄
4.新增現有專案至自己專案中
再自己專案點選滑鼠右鍵
選擇加入 加入現有專案 libuv,libpomelo2,openssl 三個
並且在自己專案 增加專案相依性
4.5 增加lib 路徑
VC++=>程式庫目錄
增加lib 指定目錄 $(SolutionDir)Default\lib
5.增加相關include
$(EngineRoot)external\libpomelo\include
$(EngineRoot)external\libpomelo\deps\uv\include
6.添加系统lib引用Psapi.lib;Iphlpapi.lib; libuv.lib;libpomelo2.lib;openssl.lib;
================================================================
操作系统:Windows7(64-bit)
1.从github下载libpomelo代码
5.修改工程版本
2.生成静态库
3.用lipo把两个打包在一起
4.修改xcode工程
在xcode中打开cocos2d-x 项目,在项目target “Build Phases"将生成的3个 .a 静态库文件加入到 "Link Binary With Libraries" 里;
手把手教你把libpomelo 2 加入cocos2d-x项目(Windows、Android、IOS平台).修訂版本
Windows平台
===================================================
1.下載libpomole2 (暫定安裝於cocos2d\external)
git clone https://github.com/NetEase/libpomelo2.git
1.5 Install gyp(如果已經安裝 就忽略此步驟)
git clone https://chromium.googlesource.com/external/gyp
cd gyp
python setup.py install安裝完畢
2. 進入libpomole2目錄 執行下面指令(依據gyp安裝目錄不同 下面指令需要做一些變更)
D:\Task\gyp\gyp.bat --dept h=. pomelo.gyp -Dlibrary=static_library -Duse_sys_openssl=false -DTo=pc
目錄下產生 libpomelo2.vcxproj 就是安裝完成
安裝選項範例
gyp
1
| $ gyp --depth=. pomelo.gyp [options] |
选项
- -Dno_tls_support=[true | false],
falseby default - -Duse_sys_openssl=[true | false],
trueby default - -Dno_uv_support=[true | false],
falseby default - -Duse_sys_uv=[true | false],
falseby default - -Duse_sys_jansson=[true | false],
falseby default - -Dpomelo_library=[static_library | shared_library],
static_libraryby default - -Dbuild_pypomelo=[true | false],
falseby default. - -Dpython_header=,
/usr/include/python2.7by default. - -Dbuild_jpomelo=[true|false],
falseby default. - -Dbuild_cspomelo=[true|false],
falseby default. - }
修改deps/uv/vcbuild.bat
line 93 附近 將ˇgyp 的GIT 來源改為 https://chromium.googlesource.com/external/gyp
執行 vcbuild.bat
產生 libuv.vcxproj 表示完成
因為libpomelo2 已經將jansson 移除 所以看不到此目錄
4.新增現有專案至自己專案中
再自己專案點選滑鼠右鍵
選擇加入 加入現有專案 libuv,libpomelo2,openssl 三個
並且在自己專案 增加專案相依性
4.5 增加lib 路徑
VC++=>程式庫目錄
增加lib 指定目錄 $(SolutionDir)Default\lib
5.增加相關include
$(EngineRoot)external\libpomelo\include
$(EngineRoot)external\libpomelo\deps\uv\include
6.添加系统lib引用Psapi.lib;Iphlpapi.lib; libuv.lib;libpomelo2.lib;openssl.lib;
================================================================
操作系统:Windows7(64-bit)
VS版本:2013
Cocos2d-x版本:3.0
工程路径:E:\cocos2d-prj\
1.从github下载libpomelo代码
E:\cocos2d-prj\cocos2d\external> git clone https://github.com/NetEase/libpomelo.git
2.创建libpomelo的VS工程
E:\cocos2d-prj\cocos2d\external>cd libpomelo E:\cocos2d-prj\cocos2d\external\libpomelo>mkdir build
//路徑改為這一個 20160926 修正
git clone https://chromium.googlesource.com/external/gyp build/gyp
E:\cocos2d-prj\cocos2d\external\libpomelo>git clone https://github.com/martine/gyp.git build/gypE:\cocos2d-prj\cocos2d\external\libpomelo>build\gyp\gyp.bat --depth=. pomelo.gyp -Dlibrary=static_library -DTO=pc
如果遇到报错(一个VS版本问题)
修改E:\snake\code\client\libpomelo\build\gyp\pylib\gyp\MSVSVersion.py文件第188行
return versions[str(name)]
改为
return versions[“2010”]
修改后继续执行脚本E:\cocos2d-prj\cocos2d\external\libpomelo>build\gyp\gyp.bat --depth=. pomelo.gyp -Dlibrary=static_library -DTO=pc
3.创建libuv的VS工程(执行E:\cocos2d-prj\libpomelo\deps\uv\vcbuild.bat脚本即可)
E:\cocos2d-prj\cocos2d\external>cd libpomelo\deps\uv E:\cocos2d-prj\cocos2d\external\libpomelo\deps\uv>vcbuild.bat
4.打开cocos2d工程,将下列vs项目加入工程(add existing project)
E:\cocos2d-prj\cocos2d\external\libpomelo\libpomelo.vcxproj E:\cocos2d-prj\cocos2d\external\libpomelo\deps\jansson\jansson.vcxproj E:\cocos2d-prj\cocos2d\external\libpomelo\deps\uv\libuv.vcxproj
vs中右键上述工程,选择菜单 Upgrade VC++ Compiler and Libraries
6.添加工程依赖
在cocos2d-prj工程上邮件,选择 属性 菜单项,将上述三个工程添加为依赖,如下图
7.添加Include
8.添加系统lib引用Psapi.lib;Iphlpapi.lib;,如下图
Android平台
操作系统:Windows7(64-bit)
NDK版本:r9d (64-bit)
Cocos2d-x版本:3.0
工程路径:E:\cocos2d-prj\
Android平台相对简单,只要修改E:\cocos2d-prj\proj.android\jni\Android.mk文件就可以了,总共三处如下图
修正:若是添加libpomelo2 需修改如下部分
檔案一 cocos2d\external\libpomelo2\Android.mk
1.LOCAL_MODULE_FILENAME := libpomelo2
2.LOCAL_SRC_FILES
增加 src/tr/uv/pb_i.c \
src/tr/uv/pr_msg_json.c \
移除 src/tr/uv/pr_unit.c
檔案二 proj.android-studio\app\jni\Android.mk
1. $(call import-module,libpomelo2) 非 libpomelo
2. LOCAL_STATIC_LIBRARIES += pomelo_static
3. LOCAL_EXPORT_C_INCLUDES :=$(LOCAL_PATH)/../../../cocosd/external/libpomelo2/include
IOS平台
操作系统:MAC MINI
XCODE版本:3.1.1
iphonesimulator : 6.1
Cocos2d-x版本:3.0
Python : 2.7
gyp工具
1.创建xcode工程,执行以下命令cd pomelo gyp --depth=. pomelo.gyp -Dlibrary=static_library -DTO=ios cd deps/uv gyp --depth=. uv.gyp -Dlibrary=static_library -DTO=ios cd ../jansson gyp --depth=. jansson.gyp -Dlibrary=static_library -DTO=ios
2.生成静态库
cd pomelo xcodebuild -project deps/jansson/jansson.xcodeproj xcodebuild -project deps/uv/uv.xcodeproj xcodebuild -project pomelo.xcodeproj xcodebuild -project deps/jansson/jansson.xcodeproj -sdk iphonesimulator6.1 -arch i386 xcodebuild -project deps/uv/uv.xcodeproj -sdk iphonesimulator6.1 -arch i386 xcodebuild -project pomelo.xcodeproj -sdk iphonesimulator6.1 -arch i386
3.用lipo把两个打包在一起
cd pomelo lipo -create ./build/Default-iphoneos/libpomelo.a ./build/Default-iphonesimulator/libpomelo.a -output libpomelo.a lipo -create ./deps/jansson/build/Default-iphoneos/libjansson.a ./deps/jansson/build/Default-iphonesimulator/libjansson.a -output libjansson.a lipo -create ./deps/uv/build/Default-iphoneos/libuv.a ./deps/uv/build/Default-iphonesimulator/libuv.a -output libuv.a
4.修改xcode工程
在xcode中打开cocos2d-x 项目,在项目target “Build Phases"将生成的3个 .a 静态库文件加入到 "Link Binary With Libraries" 里;
在"Build Settings" 的 “Header Search Paths” 里加入三个目录:
libpomelo/include
libpomelo/deps/jansson/src
libpomelo/deps/uv/include
注意目录的绝对和相对位置
这样就可以同时在真机和模拟器里调用libpomelo静态库了。
2016年9月21日 星期三
0921 Cocos2d-x移植到Android平台之Android-stuido
1.特別提醒: cocos2d-x v3.12 需搭配NDK 版本為 11版以前
用12版會無法完成編譯
2. setup.py 雖然可以設定路徑,但是NDK_ROOT 還是要自己手動到windows 的環境設定設定
3.注意指定的lib 大小寫
App\jni\Android.mk 裡面指定的
LOCAL_MODULE_FILENAME := libSlotGame
一定要小寫開頭
4. App\AndroidManifest.xml 不能加上lib
<meta-data android:name="android.app.lib_name"
android:value="SlotGame" />
5. 可以用Android studio 中的build->Analiz APP 分析APP確認是否有產生Instant run.ZIP 在APP中 也可以從參考下方關閉Disable Instant Run
To disable Instant Run:
- Open the Settings or Preferences dialog.
- Navigate to Build, Execution, Deployment > Instant Run.
- Uncheck the box next to Enable Instant Run.
如何将cocos2d-x的项目移植到Android平台之Android
studio。--------------------------------------------
首先我们需要搭建环境,以及配置环境变量:因为本文章针对的是将项目移植到Android
studio,所以我相信看这篇文章的人应该都已经将java环境,cocos2d-x,Android studio,Android sdk,Android ndk ,ANT都下载安装并配置好了。 如果你没有配置好java环境的话,可以自行百度一下下,如果你没有下载好的话,请到cocos商店里面下载在cocos商店的工具中,就能找到你需要的东西
这些东西都准备好了之后就开始配置移植Android的环境变量环境变量。
右键计算机,打开属性,点击高级系统设置,然后点击环境变量。
如果你之前配置过环境的话,希望你仔细和我配置的对照一下,哪里有错误;如果没有的话,就在用户变量那里点击新建
变量名:ANDROID_SDK_ROOT
变量值:C:\android-sdk-windows(这里写你sdk的根目录,不要在后面加上什么platform之类的,就是根目录!)
变量名:NDK_ROOT
变量值:C:\\android-ndk-r10d(这里写你ndk的根目录,注意我上面的两个\\
目前我还不清楚为什么,但是在Android studio中如果不加上这个的话,就会报错) 然后在Path中添加sdk和ndk的变量值就好了,记得末尾加上分号;同时注意不要是拼音的分号。
接下来就是关键中的关键了,网上有很多很多将cocos项目移植到Android平台的文章,但是都是针对eclipse的,而现在由于Android平台越来越多的人开始使用Android
studio,所以我们肯定要学会如何将cocos项目发布到Android studio。话不多说,开始移植!
1.首先新建一个cocos2d-x的项目,打开命令提示符,输入cocos
new HelloWorld -l cpp 然后回车
将新建的项目用vs打开看是否能够跑起来,如果能够跑起来的话,就可以进入下一步了。
2.打开新建的项目进入proj.android-studio
打开进入app\jni目录下面有一个Android.mk的文件,打开这个文件
因为现在并没有写自己的cpp文件,所以这里不需要添加,如果你是在vs上写完了代码再过来发布的话,就需要你在这里添加你写的cpp文件的路径,按照这个文件的格式添加进去就好了。这里我们不做任何操作。
3.如果你看过移植到eclipse的教程,你会知道我们需要将C:\cocos2d-x-3.8\cocos\platform\android\java\src\org\cocos2dx\lib中的文件复制到C:\cocos2d-x-3.8\code\HelloWorld\proj.android\src\org\cocos2dx。但是在如果是移植到Android-stuido中的话就不需要这一步!!!!!不需要!!!!!不需要!!!!!
4.接下来你需要做的事情是什么:在你的项目的proj.android-studio下打开命令行,然后输入
cocos compile -p android --android-studio![接下来就可以等待编译了,需要等待一段时间]
5.最终如果编译没有错误的话,会出现如下图片
但是基本上很多人第一次都会出现各种各样的问题,我觉得绝大多数的原因都是因为环境没有配置好,或者你的sdk版本未下载或者是build-tools版本没有对应又或者是gradle没有下载(**当然此时编译器会自动去帮你下载,但是如果你没有翻墙的话,是下载不了的,不会翻墙的朋友请自行百度,这里就不多说了**)
6.最后一步,在Android-studio中导入项目,然后在手机上运行,下面是运行效果
最后总结一下吧,cocos也在不断的完善当中,之前版本中新建项目里面是没有proj.android-studio这一项的,但是现在有了,既然有了,肯定就能用。
2016年9月19日 星期一
如何用android stduio 編譯cocos2d-x 專案
1.进入创建的项目的 proj.android-studio目录
cd proj.android-studio
2.执行
cocos2d-x-3.7/tools/cocos2d-console/bin/cocos compile -p android --android-studio
3.等待编译成功
将proj.android-studio 导入到android studio 就可以了.
===========================================
若出現環境變數沒有定義錯誤
執行cocos2d-x 目錄下的setup.py
設定各個變數位置
下圖是網路上範例
其中ANDROID_SDK _ROOT 可以從Android stduio 的設定中取得
File->Project Structure
NDK_ROOT
需要自己手動從windows 的管理員 的環境設定 中 去做設定
android-ndk-r12b-windows-x86_64.zip 解壓縮後放置的目錄
ANT_ROOT
是apache-ant-1.9.7-bin.zip 解壓縮後的 目錄中的bin
cd proj.android-studio
2.执行
cocos2d-x-3.7/tools/cocos2d-console/bin/cocos compile -p android --android-studio
3.等待编译成功
将proj.android-studio 导入到android studio 就可以了.
===========================================
若出現環境變數沒有定義錯誤
執行cocos2d-x 目錄下的setup.py
設定各個變數位置
下圖是網路上範例
其中ANDROID_SDK _ROOT 可以從Android stduio 的設定中取得
File->Project Structure
NDK_ROOT
需要自己手動從windows 的管理員 的環境設定 中 去做設定
android-ndk-r12b-windows-x86_64.zip 解壓縮後放置的目錄
ANT_ROOT
是apache-ant-1.9.7-bin.zip 解壓縮後的 目錄中的bin
訂閱:
文章 (Atom)
cocos2dx-lua 建立滑鼠監聽
重要關鍵字 EVENT_MOUSE_SCROLL addEventListenerWithSceneGraphPriority if IsPc() then --建立滑鼠監聽 local listener = cc.EventListenerMouse...
-
https://changeyu.wordpress.com/2015/03/25/%E4%BD%A0%E7%9A%84macbook-air%E7%B8%BD%E6%98%AF%E7%A9%BA%E9%96%93%E4%B8%8D%E5%A4%A0%E5%97%8E%EF%BC...
-
http://kirkhsutw.blogspot.tw/2015/05/ios-ad-hoc.html [iOS] 第一次 Ad Hoc 就上手 之前都沒想過要用這個 Ad Hoc,這一次是因為用到了Dropbox API,在Submit被re...
-
答案:直接回傳 std :: vector < MyObj > myFunction (); C++: What is the best method to return a vector of objects from a function...
