GSI

s1.sqlitedb 를 하나 제작했습니다.

그리고 나서 xcode의 resource에 추가를 했습니다.
그리고 아래와 같은 코드를 이용해서 프로그램을 짜주었습니다.

-(void) readAnimalsFromDatabase {

// Setup the database object

sqlite3 *database;

// Init the animals Array

// animals = [[NSMutableArray alloc] init];

// Open the database from the users filessytem

if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK) {

// Setup the SQL Statement and compile it for faster access

NSString* sqlStatement = [NSString stringWithFormat:@"select * from s1"];

sqlite3_stmt *compiledStatement;

if(sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK) {

// Loop through the results and add them to the feeds array

while(sqlite3_step(compiledStatement) == SQLITE_ROW) {

int idx = sqlite3_column_int( compiledStatement, 0 );

int level = sqlite3_column_int( compiledStatement, 1 );

int c1 = sqlite3_column_int( compiledStatement, 2 );

int c2 = sqlite3_column_int( compiledStatement, 3 );

int c3 = sqlite3_column_int( compiledStatement, 4 );

// Create a new animal object with the data from the database

// Animal *animal = [[Animal alloc] initWithName:aName description:aDescription url:aImageUrl];

// Add the animal object to the animals Array

// [animals addObject:animal];

// [animal release];

}

}

else

{

NSString* msg = [[NSString alloc] initWithFormat:@"%s", sqlite3_errmsg( database )];

NSLog( @"Failed to open database with message '%s'.", sqlite3_errmsg( database ) );

}

// Release the compiled statement from memory

sqlite3_finalize(compiledStatement);

}

sqlite3_close(database);

}

** 연동 방법에 대해서는 따로 적지를 않았습니다.


이렇게 작업 후에 테스트를 해보니 이상한 결과가 나오더군요.

if(sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, &compiledStatement,NULL) == SQLITE_OK)

여기 코드에서 "실패"가 떨어 지더라구요.
그래서 위의 코드에서 보는 msg라는 내용에 글자를 찍어 보면

no such table s1 이라고 나오게 됩니다.

그래서 과연 이 파일이 어디 있나 찾아 봤더니 컴파일 되고 빌드 되면서
해당 응용 프로그램의 document에 하나 생기더군요 하지만 사이즈가 0으로 나오더라구요.

그래서 다른 소스들을 보니 아래의 메소드를 적용해주는걸 보았습니다.

-(void) checkAndCreateDatabase{

// Check if the SQL database has already been saved to the users phone, if not then copy it over

BOOL success;

// Create a FileManager object, we will use this to check the status

// of the database and to copy it over if required

NSFileManager *fileManager = [NSFileManager defaultManager];

// Check if the database has already been created in the users filesystem

success = [fileManager fileExistsAtPath:[self dataFilePath]];

// If the database already exists then return without doing anything

if(success) return;

// If not then proceed to copy the database from the application to the users filesystem

// Get the path to the database in the application package

NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:kFilename];

// Copy the database from the package to the users filesystem

[fileManager copyItemAtPath:databasePathFromApp toPath:[self dataFilePath] error:nil];

[fileManager release];

}


위의 코드를 수행하게 되면 document에 데이터가 없다면 복사를 수행하라는 의미의 코드인듯 합니다.( 사실 이 부분은 아직 잘 모름 )


그래서 위의 함수를 적용 및 호출을 아래와 같이 해주니까.

제대로 데이터가 불러와 지더군요.


- (id) init

{

if (self = [super init])

{

touchPos = CGPointMake(0, 0);

gameState = kLogo;

logoBack = [[LogoBack alloc] init];

// Execute the "checkAndCreateDatabase" function

[self checkAndCreateDatabase];

// Query the database for all animal records and construct the "animals" array

[self readAnimalsFromDatabase];

}

return self;

}


위의 내용에 대해서 실제적인 코드는 여기 압축을 해서 올리지 못하지만,

sqlite3의 내용을 조금 숙지 하셨다면 금방 이해 하시리라 믿습니다. ^^


이거 가지고 조금 삽질을 했네요.

다행이 이 코드를 보면서 다른 면을 보게 되서 더 기쁘네요 ^^

Posted by gsi
:


CrashLanding 소스를 보면서 Texture2D 클래스를 보니까. 전체 텍스처에 대한 처리만 가능하도록 되어 있었습니다.
그래서 이걸 메소드를 하나더 만들어서 텍스처의 일부 영역을 화면에 뿌리고자 할려고 했습니다.

이때 Texture2D를 상속해서 Texture2DEx로 만들려고 했지만.. 
에러가 주루룩 떠드군요.. 

그래서 생각한 결과 Categories를 사용하게 되었습니다.
이 내용은 검색을 해보면 많이 나옵니다.

우선 구현한 내용을 아래에 기술합니다.

1. Texture2DEx.h, m 을 만듭니다.

2. 아래와 같이 코드를 헤더 파일에 작성합니다.


#import <Foundation/Foundation.h>

#import "Texture2D.h"


@interface Texture2D (SpriteAnimation)

- (void) drawAtPointTest:(CGPoint)point;

@end



3. 아래와 같이 코드를 소스 파일에 작성합니다.

#import "Texture2DEx.h"


@implementation Texture2D (SpriteAnimation)


- (void) drawAtPointTest:(CGPoint)point 

{

_maxS = 63.0 / 256.0// test

GLfloat coordinates[] = { 0, _maxT,

_maxS, _maxT,

0, 0,

_maxS, 0 };

GLfloat width = (GLfloat)_width * _maxS,

height = (GLfloat)_height * _maxT;

width = 63.0; // test

GLfloat vertices[] = { -width / 2 + point.x, -height / 2 + point.y, 0.0,

width / 2 + point.x, -height / 2 + point.y, 0.0,

-width / 2 + point.x, height / 2 + point.y, 0.0,

width / 2 + point.x, height / 2 + point.y, 0.0 };

glBindTexture(GL_TEXTURE_2D, _name);

glVertexPointer(3, GL_FLOAT, 0, vertices);

glTexCoordPointer(2, GL_FLOAT, 0, coordinates);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

}


@end


Posted by gsi
:


## Style1
NSArray* array = [NSArray arrayWithObjects:object1, object2, object3 nil];
NSEnumerator* enumerator = [array objectEnumerator];
NSString* aString = @"son";
id anObject = [enumerator nextObject];
while (anObject != nil)
{
  [anObject doSomethingWithString:aString];
  anObject = [enumerator nextObject];
}

## Style2
NSArray* array = [NSArray arrayWithObjects:object1, object2, object3 nil];
NSEnumerator* enumerator = [array objectEnumerator];
NSString* aString = @"son";
id anObject = nil;
while ((anObject = [enumerator nextObject]))
{
  [anObject doSomethingWithString:aString];
}

##Style3
NSArray* array = ''';
for(id object in someContainer)
{
  ...
}
Posted by gsi
:


CrashingLanding 인가..
그 소스를 기반 코드로 해서 지금 다른 프로그램을 좀 만들고 있다.

Objective-C의 코딩도 아직 익숙하지 않고,
하지만.. 오픈지엘 코드는 조금은.. 손에 익은 터라..

오늘 작업 하면서 비행기의 스프라이트가 한 이미지에 3장 짜리로 구성되어져 있었다.

189 * 55 인데..
즉. 가로 63 사이즈로 3장이 있는 것이다.

이것을 로그해서 드로잉을 해보니 제대로 나왔다.
즉, 189라는 2의 승수가 아닌 정보를 2의 승수로 내부적 처리를 하게 되는거 같다.

하지만.. 이때 텍스처의 좌표를 3등분해서 추가를 해보면..
값이 제대로 표시가 되지 않는다.
내부적으로 다르게 처리 되어지는거 같았다.

그래서 이미지를 189 * 55를 256 * 55 로 크롭을 시켜서
이미지를 확장 시켰다.

그 이후에 63.0 / 256.0 으로 해서 텍스트 좌표를 추가 하니까.. 제대로 표시가 되었다.

소스 코드 및 관련 이미지들은.. 솔직히 맥에서 어떻게 스크린샷을 뜨는지도 몰겠고 ^^..
그래서 걍 패스..

혹시나 관련 질문이 있으시면 코멘트 부탁 해요..
Posted by gsi
: