2010-07-18 3 views
3

내 작은 게임 프로젝트는 Cocos2d에서 Chipmunk (SpaceManager를 통해)로 만든 물리 기반 플랫폼 채용입니다.Cocos2d-iPhone 프로젝트 용 그래픽 개발을위한 전략이 필요합니다.

일반적인 타일 매핑 된 레벨 디자인과 약간 다른 것을 원했기 때문에 일러스트 레이터에서 SVG 파일로 레벨을 생성했습니다. 그런 다음 풍경, 플랫폼, 스폰 지점 등을 생성하기 위해 구문 분석합니다. 작동 중입니다. 꽤 잘 그리고 나는 내가 레벨 디자인으로 이런 방식으로 원하는만큼 창의적이 될 수 있다고 느낍니다.

그러나이 접근법은 지금까지 다람쥐 몸체와 모양 만 생성합니다. 풍경과 같은 것들을위한 그래픽을 만들 때 도움이되지 않습니다.

그래서 나는 기본적인 수준 (축소)이 같은 작은 선물 alt text http://www.tomelders.com/bin/leveleg.jpg

회색 영역은 풍경을 나타내는 것이 보일 것입니다 무슨 말인지 설명합니다.

내 첫 번째 생각은 Photoshop에서 이러한 레벨을 추적하여 512x512 png으로 분할 한 다음 물리층 위에 놓을 수있었습니다. 그러나 본능적으로 그렇게 비효율적 인 방법으로 들린다. 롤란도 뒤에

사람은 그들

alt text http://www.handcircus.com/wp-content/uploads/2008/06/rolando_screen_b.jpg

잘 작동하는 매우 간단한 방법을 가지고있다하지만 나는 그들이 MX에서 달성 한 것과 거의 비슷한, 내 수준에 좀 더 상세하고 싶습니다 신체 상해 alt text

내가 더 많이 볼수록 그들은 내가 맨 위에 큰 이미지를 놓는 것에 대해 언급 한 첫 번째 접근법을 사용하고 있다고 확신합니다.

내 질문은 누군가가 이런 종류의 물건을 얻기 위해 탐구하거나 읽어야 할 물건에 대한 조언이나 통찰력을 가지고 있는지입니다. 지금까지 Cocos2d에서 레벨 그래픽을 작성한 유일한 경험은 TMXTileMaps입니다. 나는 게임 개발에 아직 익숙하지 않아 아마도 내가 아직 모르는 것을 목표로하고있는 것을 기술하기위한 전문 용어와 용어가있을 것입니다.

도움이나 조언을 크게 듣습니다.

추신 : 질문에서 질문하는 것이 나쁜 형식이지만 여기에 의미가 있습니다. 메모리 사용에 관한 수학은 무엇입니까? 내 그래픽의 메모리 사용량을 계산하는 데 사용할 수있는 공식이 있습니까?

+0

당신은 아마도를 공유 할 수 레벨 설계를 위해 일러스트 레이터 SVG 파일을 사용하기위한 코드?나는 똑같은 일을 시도하고 있는데 출발점을 갖는 것이 도움이 될 것입니다. 미리 감사드립니다. – Salman

+0

오랫동안 이것을 보지 않았습니다. 아마도 매우 나빠질 것입니다.하지만 여기 http://pastebin.com/HiGZDWTk – gargantuan

답변

2

어떨까요? Cocos2d에서는 텍스처를 사용하여 스프라이트를 만들 수 있습니다.이 텍스처는 이미지 버퍼에 그려서 생성 할 수 있습니다. 그것은 당신에게 두 세계의 장점을 줄 것입니다. 레벨 데이터를 사용하여 지형 영역에 대한 큰 벡터 모양으로 언급 된 큰 512x512 이미지 청크를 그릴 수 있지만지도에 포함 된 데이터를 기반으로하여 작은 그래픽을 사용하여 마음 속의 콘텐츠에 장식합니다. . 그렇게하면 MX Mayhem이 앱과 함께 거대한 이미지 파일을 대량 출하하지 않고있는 것과 같은 것을 만들 수 있습니다. (이 MX 신체 상해가 어떻게하는지 경우 사실, 그것은 나를 놀라게하지 않을 것입니다.) 여기

내가 비슷한 달성하기 위해 지금 사용하고 일부 코드입니다 :

- (CGContextRef) createBitmapContextOfSize:(CGSize) size { 
    CGContextRef context = NULL; 
    CGColorSpaceRef colorSpace; 
    void *   bitmapData; 
    int    bitmapByteCount; 
    int    bitmapBytesPerRow; 

    bitmapBytesPerRow = (size.width * 4); 
    bitmapByteCount  = (bitmapBytesPerRow * size.height); 

    colorSpace = CGColorSpaceCreateDeviceRGB(); 
    bitmapData = malloc(bitmapByteCount); 
    if (bitmapData == NULL) { 
     fprintf (stderr, "Memory not allocated!"); 
     return NULL; 
    } 
    context = CGBitmapContextCreate (bitmapData, 
            size.width, 
            size.height, 
            8,  // bits per component 
            bitmapBytesPerRow, 
            colorSpace, 
            kCGImageAlphaPremultipliedLast); 
    CGContextSetAllowsAntialiasing (context,NO); 
    if (context== NULL) { 
     free (bitmapData); 
     fprintf (stderr, "Context not created!"); 
     return NULL; 
    } 
    CGColorSpaceRelease(colorSpace); 
    return context; 
} 

- (UIImage *)drawLevelImage { 

    UIImage *gfx = [UIImage imageNamed:@"gfx.png"]; 
    CGContextRef myBitmapContext = [self createBitmapContextOfSize: CGSizeMake(1024,1024)]; 
    // Preserve alpha 
    CGContextClearRect (myBitmapContext, CGRectMake(0,0,1024,1024)); 

    // Step through your shapes here, and whenever you need to draw something out of your gfx: 
    CGImageRef _imageRef = CGImageCreateWithImageInRect(gfx.CGImage, sourceImageRect); 
    CGContextDrawImage(myBitmapContext, destinationImageRect, _imageRef); 
    CGImageRelease(_imageRef); 
    // The above could be sped up by caching the image refs if you use them more than once. 

    UIImage *result = [UIImage imageWithCGImage: CGBitmapContextCreateImage(myBitmapContext)]; 
    CGContextRelease(myBitmapContext); 
    return result; 
} 
+0

을 보내면이 모든 것을 소화하기까지 다소 시간이 걸릴 것입니다. 그러나 제가 말할 수있는 것에서 이것은 승리 한 아이디어처럼 보입니다. 건배. – gargantuan

+0

도와 드리겠습니다. 당신이 어떻게 지내는지에 대한 후속 조치를 듣는 것이 흥미로울 것입니다. –

관련 문제