[iOS - cos2d - X 게임 개발 의 5] 게임 에 저 장 된 Cocos2dX 자체 CCUserDefault 류 에 대한 상세 한 설명;
15707 단어 기억게임 개발CCUserDefault【Cocos2d-x】
에서 옮 겨 싣 기 [흑 미 GameDev 거리] 원본 링크: http://www.himigame.com/iphone-cocos2dx/653.html
이 편 은 Cocos2dX 에 저 장 된 저장 소 를 공유 하 는데 그 중에서 도 세부 적 으로 실수 하기 쉬 운 문 제 를 소개 합 니 다.
Cocos2dX 에서 자체 저장 소 클래스 를 제공 합 니 다: CCUserDefault ,물론 여기 서 하 이 미 는 데이터 양 이 많 으 면 SQL 저장 소 를 사용 하 는 것 이 좋 습 니 다. 또한 주의해 야 할 것 은 가능 한 한 Cocos2dX 에서 플랫폼 과 관련 된 api 를 사용 하여 개발 하지 않 는 것 입 니 다. 예 를 들 어 Xcode 는 Cocos2dX 를 사용 하여 게임 을 개발 할 때 iOS 의 컨트롤/구성 요 소 를 프로젝트 에 사용 하 는 것 입 니 다.그러면 안 드 로 이 드 등 플랫폼 에 이식 할 때 매우 힘 들 것 입 니 다. 정상 적 인 운행 도 불가능 할 것 입 니 다. 다른 플랫폼 에 iOS 의 이러한 컨트롤 이 있 을 수 없 기 때문에 있어 도 바 텀 이 다 를 것 입 니 다!다시 말 하면 신마 기능 은 모두 Cocos2dX api 를 사용 하여 이 루어 집 니 다. 가능 한 한 X 에 접근 하 세 요. 그래서 이곳 의 저장 소 는 저도 X 자체 의 CCUserDefault 를 사용 합 니 다.적어도 Cocos2dX 자체 가 가지 고 있 는 크로스 플랫폼 에 대한 지원 이 좋 을 것 입 니 다.
본론 으로 들 어가 면 먼저 이런 종류의 API 를 대체적으로 소개 합 니 다.
- Public Member Functions
-
- ~CCUserDefault ()
- bool getBoolForKey (const char *pKey, bool defaultValue=false)
- Get bool value by key, if the key doesn't exist, a default value will return.
- int getIntegerForKey (const char *pKey, int defaultValue=0)
- Get integer value by key, if the key doesn't exist, a default value will return.
- float getFloatForKey (const char *pKey, float defaultValue=0.0f)
- Get float value by key, if the key doesn't exist, a default value will return.
- double getDoubleForKey (const char *pKey, double defaultValue=0.0)
- Get double value by key, if the key doesn't exist, a default value will return.
- std::string getStringForKey (const char *pKey, const std::string &defaultValue="")
- Get string value by key, if the key doesn't exist, a default value will return.
- void setBoolForKey (const char *pKey, bool value)
- Set bool value by key.
- void setIntegerForKey (const char *pKey, int value)
- Set integer value by key.
- void setFloatForKey (const char *pKey, float value)
- Set float value by key.
- void setDoubleForKey (const char *pKey, double value)
- Set double value by key.
- void setStringForKey (const char *pKey, const std::string &value)
- Set string value by key.
- void flush ()
- Save content to xml file.
- Static Public Member Functions
-
- static CCUserDefault * sharedUserDefault ()
- static void purgeSharedUserDefault ()
- static const std::string & getXMLFilePath ()
이상 에서 CCUserDefault 의 사용 과 기능, 해시 표 구조, Key - Value, key 색인 Value 값 을 한눈 에 볼 수 있 습 니 다.
제 공 된 저장 소 는 모두 기본 형식 입 니 다. bool, int, string, double, float, 방법 은 쉽게 알 수 있 습 니 다. set 를 저장 하고 get 을 가 져 옵 니 다. !
- //
- CCUserDefault::sharedUserDefault()->setStringForKey("key", "himi");
- CCUserDefault::sharedUserDefault()->flush();// , xml , value 。
- // string
- string str= "wahaha";
- // himi, str ;
- str= CCUserDefault::sharedUserDefault()->getStringForKey("key");
- CCLog(" str=:%s",str.c_str());
여기 주의 하 세 요. CCUserDefault 에 하나 있어 요. flush () 의 함수 입 니 다. 이것 은 데 이 터 를 xml 파일 에 기록 하 는 데 사 용 됩 니 다. 즉, setXX 의 일부 함 수 를 사용 한 후에 제출 하 십시오 (flush 함 수 를 호출 하 십시오).
그러면 마지막 으로 static 방법 에서 CCUserDefault 류 가 shared UserDefault 를 인터페이스 로 개발 자 에 게 사용 하도록 남 겨 놓 은 것 을 볼 수 있 습 니 다. 그러면 대충 소개 한 다음 에 코드 검증 을 몇 단계 작성 하 겠 습 니 다.
OK, 다음은 콘 솔 입력 의 결과 입 니 다.
- Cocos2d: cocos2d: cocos2d-1.0.1-x-0.12.0
- Cocos2d: cocos2d: GL_VENDOR: Imagination Technologies
- Cocos2d: cocos2d: GL_RENDERER: PowerVR SGX 543
- Cocos2d: cocos2d: GL_VERSION: OpenGL ES-CM 1.1 IMGSGX543-63.14.2
- Cocos2d: cocos2d: GL_MAX_TEXTURE_SIZE: 4096
- Cocos2d: cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH: 16
- Cocos2d: cocos2d: GL supports PVRTC: YES
- Cocos2d: cocos2d: GL supports BGRA8888 textures: NO
- Cocos2d: cocos2d: GL supports NPOT textures: YES
- Cocos2d: cocos2d: GL supports discard_framebuffer: YES
- Cocos2d: cocos2d: compiled with NPOT support: NO
- Cocos2d: cocos2d: compiled with VBO support in TextureAtlas : NO
- Cocos2d: str=:himi
마지막 문장 은 우리 의 저장 에 문제 가 없다 는 것 을 검 증 했 습 니 다. 그러면 우 리 는 지금 xml 에 존재 하 는 지 검증 합 니 다. 먼저 현재 실행 중인 항목 을 중단 한 다음 에 방금 코드 를 삭제 하고 다음 코드 를 교체 합 니 다.
1
CCLog(
" str=:%s"
,CCUserDefault::sharedUserDefault()->getStringForKey(
"key"
).c_str());
그리고 이 항목 을 다시 실행 합 니 다. 관찰 콘 솔 인쇄 는 다음 과 같 습 니 다.
- Cocos2d: cocos2d: cocos2d-1.0.1-x-0.12.0
- Cocos2d: cocos2d: GL_VENDOR: Imagination Technologies
- Cocos2d: cocos2d: GL_RENDERER: PowerVR SGX 543
- Cocos2d: cocos2d: GL_VERSION: OpenGL ES-CM 1.1 IMGSGX543-63.14.2
- Cocos2d: cocos2d: GL_MAX_TEXTURE_SIZE: 4096
- Cocos2d: cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH: 16
- Cocos2d: cocos2d: GL supports PVRTC: YES
- Cocos2d: cocos2d: GL supports BGRA8888 textures: NO
- Cocos2d: cocos2d: GL supports NPOT textures: YES
- Cocos2d: cocos2d: GL supports discard_framebuffer: YES
- Cocos2d: cocos2d: compiled with NPOT support: NO
- Cocos2d: cocos2d: compiled with VBO support in TextureAtlas : NO
- Cocos2d: str=:himi
방금 키 -> 키 를 통 해 "himi"라 는 문자열 을 정상적으로 얻 었 습 니 다. OK, 모니터링 에 문제 가 없습니다.
그러면 일반적인 상황 에서 저 희 는 현재 프로젝트 에 데 이 터 를 저장 하 는 xml 파일 이 존재 하 는 지 여 부 를 판단 하 는 방법 이 필요 합 니 다. 그러면 Himi 는 Cocos2dX 기본 소스 코드 에 이런 방법 이 있 지만 개발 자 에 게 제공 되 지 않 았 습 니 다. 이 함 수 는 private 에 의 해 사유 화 되 었 기 때문에 이 함수 소스 코드 는 다음 그림 과 같 습 니 다.
- .h :
- bool isHaveSaveFile();
-
- .cpp :
- // xml
- bool HelloWorld::isHaveSaveFile(){
- if(!CCUserDefault::sharedUserDefault()->getBoolForKey("isHaveSaveFileXml"))
- {
- CCUserDefault::sharedUserDefault()->setBoolForKey("isHaveSaveFileXml", true);
- CCUserDefault::sharedUserDefault()->flush();//
- // CCLog(" , ");
- return false;
- }else{
- // CCLog(" ");
- return true;
- }
- }
비고: 데 이 터 를 저장 하 는 xml 이 존재 하지 않 을 때 데 이 터 를 처음 저장 할 때 기본적으로 생 성 됩 니 다. 경 로 는 app 아래 documens 입 니 다. 다음 그림 과 같 습 니 다.
그렇다면 하 이 미 는 데이터 xml 가 존재 하 는 지 확인 하 는 함 수 를 사용자 정의 하여 사용 할 수 있 습 니 다.(알림: 많은 어린이 신발 을 말 해 야 합 니 다. 왜 소스 코드 를 직접 수정 하지 않 고 Public 를 사용 하지 않 습 니까?! 사실 Himi 도 그렇게 생각 합 니 다. 하지만 후기 에 새로운 Cocos2dX 버 전 을 사 용 했 거나 동료 기계 의 Cocos2dX 가 소스 코드 를 이렇게 수정 하지 않 았 다 면 오류 가 발생 할 수 있 습 니 다. 반대로 판단 하 는 방법 을 쉽게 쓸 수 있 는데 굳이 움 직 일 필요 가 있 습 니까? 하하!)
그러면 여기 Himi 가 강조 하 는 점! 여러분 은 setXX 함수 의 매개 변 수 를 주의해 야 합 니 다. 예 를 들 어 다음 과 같은 함수:
setStringForKey (const char *pKey, const std::string &value)
첫 번 째 매개 변 수 는 const char * 유형 이지 string 이 아니다!!! (Himi 는 이 때문에 많은 시간 을 낭비 하고 비극 적 이다.)
Himi 는 다음 과 같은 코드 를 저장 하여 오 류 를 일 으 켰 습 니 다. 다음 과 같 습 니 다.
1
CCUserDefault::sharedUserDefault()->setStringForKey(
""
+823, sKey);
오류 캡 처 는 다음 과 같 습 니 다. (저 장 된 key 가 경로 가 되 었 습 니 다.....................................................
아, 답답 해 요. 여기 Himi 가 실 수 를 했 어 요. 어린이 신발 들 이 더 이상 실 수 를 범 하지 않 았 으 면 좋 겠 어 요. 그 전에 Himi 는 itoa 를 찾 아 함 수 를 찾 으 려 고 했 지만 도저히 찾 을 수가 없어 요! (c++ 있어 야 지.×××문자열 돌리 기), 그러나 Cocos2dX 에는 없 으 며, 마지막 으로 Himi 는 Cocos2dX 엔진 에서 실현 되 는 itoa 의 원본 코드 를 사 용 했 습 니 다. 다음 과 같 습 니 다.
Cocos2dX 가 자체 적 으로 가지 고 있 는 이 CCUserDefault 는 암호 화 된 것 이 아니 라 명문 이 며 xml 형식 이기 때문에 후속 Himi 는 base 64 를 사용 하여 암호 화 된 글 을 쓸 준 비 를 하고 있 습 니 다.
본편×××:
SaveDataForCocos2dx.zip (667 바이트, 1 회)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Windows에서 Java 응용 프로그램의 메모리 측정Windows 환경에서 Java 응용 프로그램이 실제로 사용하는 메모리 양을 확인하려면 작업 관리자의 프로세스 탭에서 확인할 수 없습니다.작업 관리자에는 JVM의 전체 보존 메모리 크기가 표시됩니다. 이번에는 두 가...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.