bool isFileExists(const char* s) {
 bool result = false;

 int ret = 0;
 struct stat st;

 ret = stat(s, &st);
 CCLog("ret: %d\n",ret);

 if (ret == -1) {
  result = false;
  CCLog("File Not Found: [%s]", s);
 } else {
  result = true;
 }

 return result;
}
GNU C 에서 파일 Open 시도 하지 않고 파일의 존재 여부를 확인 할 수 있는 유일한 방법
VC에서는 방법이 여러가지가 있으나  시그윈에서 컴파일 시 헤더가 지원되지 않는다...
방법은 이것 뿐이다


1. create-android-project.bat (편집) 하기
- 해당 cywin, ndk, sdk, 경로 지정

2. create-android-project.bat 실행
-필히 필드 후 실행 _ 비쥬얼 베이직에서의 프로젝트명과 동일하게 할것.
(원본 프로젝트는 이름 변경 한 후에 작업을 실시 :: 원본 소스 보존을 위함 )

3.생성된 폴더 Android를 제외한 폴더는 삭제
- 원본 프로젝트 모든 파일을 복사 (원본 -> 생성된 폴더로)

4....\android\jni\helloworld\Android.mk (편집)하기
../../../Classes/AppDelegate.cpp \
형식으로 해당 디렉토리 내 cpp 파일 리스트 추가 하여 저장 할것.

5.이클립스 프로젝트 생성
-New android project 생성 > existing 프로젝트 적용 (android 폴더까지 선택)

6.이클립스 과 JNI 연동(cygWin) 자동 갱신 설정 
-Properties for [project]
-Builders

Edit Configuration > New_Builder

[Main]
Location : C:\cygwin\bin\bash.exe

working Directory : D\work\.......\android\

Arguments : --login -c "ndk-build -C '${build_project}'"

(Apply) > (OK)
============================================================  음... 될려나 모르겠다.
현재 이클립스  빌드 중 ㅡㅡㅋ


-





Cocos2d-x 파일 저장 소스

SMART_Phone/cocos2d-x 2011. 8. 9. 11:54 Posted by Request

char *SaveBuffer;
char tempBuffer[1024];
int tempLen = 0;

tempLen = STRLEN(tempBuffer);
 SaveBuffer = (char*)MALLOC(tempLen+ 1 + sizeof(int));
MEMSET(SaveBuffer, NULL, tempLen + 1 + sizeof(int));
MEMCPY(SaveBuffer, &tempLen, sizeof(int));

 //NSData *myData = [NSData dataWithBytes:SaveBuffer length:dwSaveDataSize];
 //[[NSUserDefaults standardUserDefaults] setObject:myData forKey:[NSString stringWithUTF8String:STORY_DATAFILE]];

 if(m_pMain->m_iDifficultyLevel == EASY_MODE){
  std::string pathKey = CCFileUtils::fullPathFromRelativePath(EASY_STORY_DATAFILE);

  FILE *fp = fopen(pathKey.c_str(), "wb");
  if (! fp)
  {
   CCLOG("can not create file %s", path.c_str());
   return false;
  }

  fwrite(SaveBuffer , dwSaveDataSize , 1 , fp);
  fclose(fp);
  //[[NSUserDefaults standardUserDefaults] setObject:myData forKey:[NSString stringWithUTF8String:EASY_STORY_DATAFILE]];



<activity  android:name="view.PopupLayout"
           parent="android:style/Theme.Translucent"
           android:screenOrientation="landscape" 
android:theme="@style/full_screen"
           android:configChanges="keyboardHidden">
       </activity>


import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;


public class IntroViewAcitivity extends BaseActivity {
 
 protected static final String TAG = "IntroViewActivity";

 private ImageView logoView;
 private AnimationDrawable mAni;
 
 final Handler mHandler = new Handler();
 Runnable startAni;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  Log.i(TAG, "OnCreate() ::::::::::::::::::::");

  setContentView(R.layout.intro_view_ani);
  
  
  
  Animation animation = new AlphaAnimation(0.0f, 1.0f);
  animation.setAnimationListener(new AnimationListener() {
   
   @Override
   public void onAnimationStart(Animation animation) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onAnimationRepeat(Animation animation) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onAnimationEnd(Animation animation) {
    // TODO Auto-generated method stub
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
     
     @Override
     public void run() {
      // TODO Auto-generated method stub
      Intent intent = new Intent(IntroViewAcitivity.this, TitleViewActivity.class);
      startActivity(intent);
      IntroViewAcitivity.this.finish();
      
     }
    }, 3000);
   }
  });
  animation.setDuration(2000);
  logoView = (ImageView)findViewById(R.id.logoAni);
  logoView.startAnimation(animation);
 }
  
 
 @Override
 protected void onPause() {
  // TODO Auto-generated method stub
  
  super.onPause();
 }

 @Override
 protected void onResume() {
  // TODO Auto-generated method stub
  super.onResume();
  
 }


}

Android NDK 설정

SMART_Phone/cocos2d-x 2011. 6. 23. 16:37 Posted by Request

인스턴스 메소드는 인터페이스나 구현부에서 '-' 문자를 앞에 기재합니다.
클래스 메소드의 문자는 '+'로 표기 합니다.

주의점)
클래스 메소드 안에서 인스턴스 변수를 참조 하는 것은 불가능합니다.
인스턴스 메소드를 호출하는 것도 불가능합니다.
어떤 클래스 메소드 안에서 달느 클래스 메소드를 호출하기 위해서는 self 메시지를 보내면 됩니다.
슈퍼 클래스의 클래스 메소드를 호출할 때는 super를 사용합니다.
프로젝트명  remoteControl
생성파일목록
*remoteControl(폴더)
 -remoteControlAppDelegate.h
 -remoteControlAppDelegate.m
 -MainWindow.xib
 -remoteControlViewController.h
 -remoteControlViewController.m
 -remoteControlViewController.xib

*Supporting Files(폴더)
 -remoteControl-Info.plst
 -InfoPlist.strings
 -remoteControl-Prefix.pch
 -main.m  //클래스를 실행하기 위한 메인 함수
-Volume.h   //불륨조절 인터페이스 파일
-Volume.m  //불륨조절 구현 파일

*Frameworks(폴더)
 -UIKit.framework
 -Foundation.framework
 -CoreGraphics.framework
 
*Products(폴더)
 -remoteControl.app


Objective-C [2번째]

SMART_Phone/IPhone 2011. 6. 17. 17:26 Posted by Request

2.1) 인스턴스화

자바
Animal beaver = new Animal();

Objective-C
Animal beaver = [Animal alloc];


2.2) 메시지
alloc 호출 주변에 대괄호를 사용한 것은 Objective-C의 재미 있는 기능인 메시지 라는 것이다.

메시지는 오브젝트의 함수를 호출하는 기본적인 방법이다.

개념은 C++ 나 자바의 함수 호출과 같다.

(메세지 호출 방법)

자바
boolean listening = beaver.isListening();

Objective-C
BOOL listening = [beaver isListening];





Objective -C 에 대한 간단한 정리.

SMART_Phone/IPhone 2011. 6. 17. 11:53 Posted by Request
Objective-C = C + 스몰토크 언어
 
특징)
C 스타일 구조, 함수 호출, 메모리 할당, 포인터 모두 가능하다.
스레드 동기화, 트라이- 캐치 블록, 가비지 컬렉션 기능도 추가되어 있다.


 
1.1)클래스 구조
클래스 = 멤버 변수(데이터) + 메소드(함수를 포함한 오브젝트)

클래스는 @interface 키워드를 사용 하여 정의한다.
 .h파일 : 정의
.m파일 : 구현



1.1.1) Objective-C 클래스 구조 예)
 @interface Animal
{
// 멤버 변수는 여기에 둔다.
@private
int foo;
}
//클래스 메소드는 중괄호 바깥인 여기에 둔다.

-(int) bar : (double) input1;
@end

함수는 보통 - 로 시작한다.
클래스 메소드 사용 + 로 한다.



1.1.2)동일한 자바 구조
 class Animal
{
   private int foo;

   public int bar(double intput1) {...}
}



1.1.3 Objective-C 확장과 상속 구조
 @interface Animal : NSObject
{
}
//Objective-C 상속
@end



class Animal extends NSObject
{
         //Java 상속
}
-Objective-C도 자바 처럼 여러클래스를 상속 할수 없다는 점 주의 할 것.


1.1.4 Objective-C 구현

@protocol로 정의하며 절대적으로 virtual이어야 한다는 점만 제외하고 C++ 추상 베이스 클래스와 비슷하다.
어떠한 멤버 변수나 메소드 구현을 가져서는 안된다.

자바 인터페이스 클래스는 Objective-C에서 프로토콜 클래스라 부른다.
@protocol을 사용한다.

1.1.5) Objective-C 인터페이스 예
 @protocol GameEventListener 구현하기
       //프로토콜은 멤버 변수를 포함하지 않고 중괄호도 사용하지 않는다.
       // 메소드 정의는 여기에 하지만 아직 구현은 하지 않는다.
       -(BOOL) isListening;
       -(void) handleEvent : (int) event;
@end

@interface Animal : NSOnject <GameEventListener>
{
    //멤버 변수는 여기에 둔다.
@private
      int foo;
      BOOL active;
}

          //메소드와 오버라이드 메소드는 여기에 둔다.
          -(int) bar : (double) input1;
          -(BOOL) isListening;
          -(void) handleEvent : (int) event;
@end

1.1.6) Objective-C 구현
 @implementation Animal
@synthesize foo;

-(void) bar : (double) input1
{
//input1으로 할일을 한다.
}

-(BOOL)isListening
{
return self.active;
}

-(void) handleEvent : (int) event
{
//event에 따라 할 일을 한다.
}
@end