Post

android 가로모드에서 세로로 변경

android 프로젝트를 키고 app폴더에서 AndroidManifest.xml 파일 열기

android:screenOrientation
찾은 다음 landscape portrait 로 변경

 

android 앱 아이콘 변경

하려고했는데...아어...나 바보같이 GRADLE 업그레이드했다ㅠㅠㅠ

업그레이드하면 안되는데...아놔...미친..바보...탱이

아무튼 

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
그레이들 버전이 지원안된다는 그런 에러가 발생했고...
근데 gradle 버전 업그레이드야 그냥 프로퍼티에 버전 변경정도라서 gradle-wrapper.properties의 distributionUrl

build.gradle에서 dependencies { classpath 를 변경해주니까 해결!!
gradle 다운 그레이드 쉽다!

아무튼 이제 진짜 아이콘 변경!!!

왼쪽창 Android 모드에서 app>>res>>폴더에 가면 mipmap-hdpi, mipmap-mdpi 등....

각각 화소에 맞는 아이콘이 있다. png 이미지를 원하는대로 바꿔주면 된다.

프로젝트 이름 변경

 

한글 글자 깨짐

cocos2dx는 한글 출력하는 것도 어렵다.

윈도우 빌드는 잘되었는데 앱 빌드 후 apk 실행 시 한글이 와장창 깨진다 ㅠㅠ

검색해보니 나처럼 한글 출력이 잘 안되는 경우가 많았다.

일단 좀 특이한 한글 폰트를 사용하고 있어서 네이버 나눔 고딕으로 변경해봤는데 안됨!!!

그 후 검색으로....

https://cafe.naver.com/cocos2dxusers/26663

char testString[30];
WideCharToMultiByte(CP_UTF8, 0, L"테스트 테스트", -1, testString , 30, NULL, NULL);
auto label = Label::createWithTTF(MyString, "fonts/fontname.ttf". 24);

를 하면된다고 했는데 android 앱 빌드시 에러.

illegal character encoding in string literal

아마 WideCharToMultiByte 이라는게 윈도우 함수여서 앱 빌드에서는 그게 안되는거 같다. 찾아보니까 android에서는 utf 관련 변환이 자동적으로 안된다고 하는것 같기도 하고...?

그렇게 더 찾아보다가

페이지 인코딩을 바꿔주라고 적혀 있었다.

https://grr1.tistory.com/17

 

VS2017 파일생성 인코딩 UTF-8 기본값으로 설정하기

이글을 작성하게된 계기는 VS2017에서 clang 컴파일러 사용시 error : illegal character encoding in string literal 오류를 경험하시는분들에게 해결책이 되지않을까 싶어서 올려봅니다 저같이 15시간정도 고통

grr1.tistory.com

https://m.blog.naver.com/raveneer/221755491661

그러고보니 예전에 한글 출력안되어서 페이지 인코딩 바꾸었는뎅...

새 프로젝트 만들어서 그런지 페이지 인코딩이 한국어다.

notepad로 cpp 한글 나오는 파일만 utf-8 bom으로 바꾸었다.(노가다ㅠ)

아무튼 그렇게 하고 빌드하니까 잘된다!!

 

android 앱 이름 변경

projectname\proj.android\app\res\values

폴더에서 strings.xml 을 연 다음에 프로젝트 이름을 변경해주면 된다.

 
간단한 앱 만드는것도 왜 이렇게 힘드냐ㅠㅠ 
애증의 cocos2dx 부글부글...

Post

Cococs2dx build Failed (CMakeLists.txt 수정)

오랜만에 빌드했는데 에러가 났다

Build MyGame armeabi-v7a
externalNativeBuildDebug: Executable : C:\Users\user\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe
arguments :
--build
H:\CocosProject\project\proj.android\app\.externalNativeBuild\cmake\debug\armeabi-v7a
--target
MyGame
jvmArgs :
Executable : C:\Users\user\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe
arguments :
--build
H:\CocosProject\project\proj.android\app\.externalNativeBuild\cmake\debug\armeabi-v7a
--target
MyGame
jvmArgs :
:project:externalNativeBuildDebug (Thread[Task worker for ':',5,main]) completed. Took 3.45 secs.
FAILURE: Build failed with an exception.  

clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.

BUILD FAILED in 4s
41 actionable tasks: 1 executed, 40 up-to-date
VCS Checkout Cache (proj.android\.gradle\vcsWorkingDirs) has not been cleaned up in 0 days
Error running command, return code: 1.

일단 블로그에서 안드로이드 세팅했던기억이 있어서 이거보구있음

https://m.blog.naver.com/karlose7/221484046370

 

[Cocos2d-x] 안드로이드 스튜디오 포팅에 관하여

안녕하세요, 마그입니다. "Cocos2d-x"엔진 게시글을 첫 글로 저를 굉장히 괴롭혔던 "안드...

blog.naver.com

그러다가 가장중요한거!!

프로젝트 폴더 바로 안에 CMakeLists.txt 파일

# add cross-platforms source files and header files 
list(APPEND GAME_SOURCE

소스코드에 내가 만든 소스코드 전부 넣어줘야하는거 깜빡함!!
헤더 cpp 각자 소스 코드 이름 넣어줘야함

이 방법이 번거롭다면 재귀로 불러오는 방법이 있다고한다

https://blog.naver.com/njh0602/221507313152)

 

[Cocos2d-x 3.x] 안드로이드 빌드 설정 시 CMakeLists.txt에 빌드할 소스 한 번에 추가하기

현재 cocos2d-x 측에서 안드로이드 스튜디오를 통한 C++ 소스 빌드를 하기 위한 방법으로 ndk +...

blog.naver.com

다음과 같은 형태로 사용하라고 하심
file (GLOB_RECURSE MY_SOURCES Classes/*.cpp)
file (GLOB_RECURSE MY_SOURCES Classes/*.h)

list(APPEND GAME_SOURCE ${MY_SOURCES})
list(APPEND GAME_HEADER $MY_HEADERS})

파일 많아지면 시도해보는걸로!!

 

H:\CocosProject\project\bin\debug\android 폴더 안에 apk 빌드 확인!

(그런데 안드로이드 서명은 어떻게 하는거지???? 나 android studio는 전혀 사용안하는데...옛날에 서명했던거 같은데 다 까먹었다 ㅠㅠ)

Post

onTouchBegan replaceScene 에러

아직도 정확한 에러 원인은 모르겠지만 기록.A, B 씬 이동을 왔다갔다 하는데 이 때 배경을 터치하면 다른 화면으로 이동한다.유독 B씬에서 A로 넘어갈때 크래시가 났다. 디버그가 안된다고 스택도 안뜨고..그러다가 간간히 아래와 처럼 떴다.

baseproject.exe![thunk]:GameScene::`vcall'{688,{flat}}' }'() C++
  libcocos2d.dll!std::_Func_class<int,enum cocos2d::ui::Widget::FocusDirection,class cocos2d::ui::Widget *>::operator()(enum cocos2d::ui::Widget::FocusDirection,class cocos2d::ui::Widget *) C++
  libcocos2d.dll!cocos2d::EventDispatcher::EventListenerVector::~EventListenerVector(void) C++
  libcocos2d.dll!std::_Hash<class std::_Umap_traits<float,class std::vector<class cocos2d::Node *,class std::allocator<class cocos2d::Node *> >,class std::_Uhash_compare<float,struct std::hash<float>,struct std::equal_to<float> >,class std::allocator<struct std::pair<float const ,class std::vector<class cocos2d::Node *,class std::allocator<class cocos2d::Node *> > > >,0> >::_Range_eraser::_Bump_erased(void) C++
  libcocos2d.dll!std::_Func_class<float,float>::operator()(float) C++
> libcocos2d.dll!cocos2d::EventDispatcher::dispatchTouchEventToListeners(class cocos2d::EventDispatcher::EventListenerVector *,class std::function<bool (class cocos2d::EventListener *)> const &) C++
  libcocos2d.dll!cocos2d::EventDispatcher::dispatchTouchEvent(class cocos2d::EventTouch *) C++
  libcocos2d.dll!cocos2d::EventDispatcher::dispatchEvent(class cocos2d::Event *) C++
  libcocos2d.dll!cocos2d::GLView::handleTouchesBegin(int,int * const,float * const,float * const) C++
  libcocos2d.dll!cocos2d::GLViewImpl::onGLFWMouseCallBack(struct GLFWwindow *,int,int,int) C++
  libcocos2d.dll!cocos2d::GLFWEventHandler::onGLFWMouseCallBack(struct GLFWwindow *,int,int,int) C++
  libcocos2d.dll!__glfwInputMouseClick() C
  libcocos2d.dll!_glfwGetWin32Window() C
  user32.dll!764215fb() 알 수 없음
  [아래 프레임이 누락 및/또는 올바르지 않음, user32.dll에 대해 로드된 기호가 없음]
  [외부 코드]

dispatchTouchEvent 라고 적혀 있으니까 터치 이벤트에 관한 건가 싶어서

씬 생성 부분을 빨리 만들어주기도 하고... 여러모로 해봤으나 실패.그냥 버튼으로 하자고 해서 했더니 에러가 없었다.아무곳에나 터치X 그냥 버튼으로 하는게 답인가 싶다.

▲ top