2012-06-19 2 views
0

클래스에서 사용할 모든 이미지가있는 아틀라스를 만들었습니다. 이 이미지에서 만든 스프라이트 있었다면, 나는 전체 CCSprite 크기를 충당하기 위해 스트레칭하고 1x1 픽셀 이미지입니다 "white.png"Cocos2D 2.0 - CCSprite의 사각형 변경/스프라이트 늘이기

mySprite = [CCSprite spriteWithFile:@"white.png" rect:frame]; 

처럼 만들 것이라고는 RECT에 의해 정의된다 : 프레임 그 API에.

그러나 I/O와 메모리를 최적화하기 위해

, 나는지도 책에 white.png 넣어 내 생각은

mySprite = [CCSprite spriteWithSpriteFrameName:@"white.png"]; 

를 사용하여 만드는 것이었다 그러나 이것은 1x1 픽셀 스프라이트를 생성합니다. 그래서, 내 생각은 내가이

mySprite = [CCSprite spriteWithSpriteFrameName:@"white.png"]; 
[mySprite resizeTo:frame.size]; 

과의 1x1 스프라이트는 내가 원하는 크기를 충당하기 위해 뻗어 것을 할 수있는이 라인

@implementation CCSprite (CCSprite_Resize) 


-(void)resizeTo:(CGSize) theSize 
{ 
    CGFloat newWidth = theSize.width; 
    CGFloat newHeight = theSize.height; 


    float startWidth = self.contentSize.width; 
    float startHeight = self.contentSize.height; 

    float newScaleX = newWidth/startWidth; 
    float newScaleY = newHeight/startHeight; 

    self.scaleX = newScaleX; 
    self.scaleY = newScaleY; 

} 

와 CCSprite를 확장하는 카테고리를 만드는 것이 었습니다.

문제는 이것이 작동하지 않는다는 것입니다.

실마리가 있습니까? 감사.

답변

0

귀하의 경우에는 CCLayerColor를 사용하여 단색 레이어를 만들 수있는 것으로 보입니다. 스프라이트를 사용할 필요가 없습니다. 귀하의 질문에 대해

- 확인은, 그 frame.size는 0이 아닌 (CGSizeZero)

+0

고마워,하지만이 경우에는 CCSprite에서해야한다. 왜냐하면 모든 것은 스프라이트가되어야하는 CCSprite 파생 클래스에서 비롯된 것이기 때문이다. 크기가 0이 아닙니다. – SpaceDog

+0

및 mySprite 초기화 후 spriteFrame이 nil이 아닌가요? – Morion

+0

아니요, 스프라이트는 여전히 1x1 픽셀입니다. 이게 버그일까요? (프레임 캐시에서 스프라이트를 스케일링하지 않습니까?) – SpaceDog

2

만들기 해안은 - (CGAffineTransform)nodeToParentTransform처럼 뭔가를해야만 무시되지 않습니다. 나는 Box2d 물리학을 cocos2d와 함께 사용하고 있으며, PhysicsSprite (CCSprite의 서브 클래스)라는 템플릿 클래스를 오버라이드했으며, 버그가있다 : scale 속성은 아무것도 변경하지 않았다. 나는 이런 식으로 고정 :

- (CGAffineTransform)nodeToParentTransform 
{ 
    b2Vec2 pos = body_->GetPosition(); 

    float x = pos.x * PTM_RATIO; 
    float y = pos.y * PTM_RATIO; 

    // Make matrix 
    float radians = body_->GetAngle(); 
    float c = cosf(radians); 
    float s = sinf(radians); 

    if (!CGPointEqualToPoint(anchorPointInPoints_, CGPointZero)) 
    { 
     x += c * -anchorPointInPoints_.x * scaleX_ + -s * -anchorPointInPoints_.y * scaleY_; 
     y += s * -anchorPointInPoints_.x * scaleX_ + c * -anchorPointInPoints_.y * scaleY_; 
    } 

    // Rot, Translate Matrix 
    transform_ = CGAffineTransformMake(c * scaleX_, s * scaleX_, 
    -s * scaleY_, c * scaleY_, 
    x, y); 

    return transform_; 
} 

원본에서 더 scaleX_scaleY_ 곱셈 없었다.

+0

고마워요,하지만 이걸로 내가 뭘 해야하는거야? 수업에 들려? 수업 연장? – SpaceDog

+0

이것은 내 CCSPrite에 무슨 일이 일어 났을 까? 그래서 그것은 sclaed하지 않았다. 나는 당신의 모든 코드를 보지 못했고, 그래서 당신은 똑같은 일을하고 나의 exaple을 게시했다. 'resizeTo :'메소드 만 추가하면, 내 솔루션이 도움이되지 않을 것이다. – SentineL

관련 문제