SKSpriteNode의 적절한 서브 클래 싱 및 인스턴스 초기화

알렉스

SKSpriteNode를 하위 클래스로 지정하여 게임에 대해 서로 다른 속성을 가진 다른 캐릭터를 만드는 데 사용할 수 있습니다. 이것은 사소한 작업이어야한다는 것을 알고 있지만 인스턴스가 생성 될 때 변수를 초기화하는 방법을 이해하는 데 어려움을 겪고 있습니다. 헤더에는 다음이 있습니다.

#import <SpriteKit/SpriteKit.h>

@interface MyClass : SKSpriteNode 
@property int myVariable;
@end

그리고 구현에서 :

#import "MyClass.h"
@interface MyClass ()
@end

@implementation MyClass
@synthesize myVariable;

- (id)init {
    if (self = [super init]) {
        myVariable = 100;
    }
    return self;
}

장면에서 노드를 만들 때 :

@implementation GameScene
{
    MyClass *mySprite;
}

- (void)didMoveToView: (SKView *) view
{
    mySprite = [MyClass spriteNodeWithImageNamed:@"image.png"];
}

myVariable의 값은 0이며, 이는 spriteNodeWithImageNamed가 init 메서드를 실행하지 않는다는 것을 의미한다고 가정합니다. 내가 사용하는 경우 :

mySprite = [[MyClass alloc] init]; // or mySprite = [MyClass new];
mySprite = [MyClass spriteNodeWithImageNamed:@"image.png"];

변수 이름이 100으로 올바르게 설정되었지만 spriteNodeWithImageNamed에 의해 0으로 되돌려졌습니다.

나는 또한 시도했다 :

mySprite = [[MyClass alloc] init]; // or mySprite = [MyClass new];
[mySprite setTexture:[SKTexture textureWithImageNamed:@"image.png"]];

이 경우 myVariable의 값은 정확하지만 장면에 노드를 추가 할 때 이미지가 나타나지 않습니다. spriteNodeWithImageNamed를 사용할 때 어떤 init 메서드가 호출됩니까? SKSpriteNode init 메서드를 부적절하게 재정의하고 있습니까?

MaxKargin

클래스 생성으로 모든 작업을 올바르게 수행했지만 팩토리 메서드를 호출 spriteNodeWithImageNamed한 다음 자체적으로 초기화하고 할당 한다는 점을 명심해야 합니다. 따라서 사용자 지정 init메서드 를 사용 하려면 팩토리 메서드도 재정의해야합니다.

MyClass 구현 내에서 이니셜 라이저를 호출하도록 메서드를 재정의합니다.

+ (instancetype) spriteNodeWithImageNamed:(NSString *)imageName{
    MyClass *newClass = [[MyClass alloc] init];
    SKTexture *spriteTexture = [SKTexture textureWithImageNamed:imageName];
    newClass.size = spriteTexture.size;
    newClass.texture = spriteTexture;
    return newClass;
}

도움이 되었기를 바랍니다. 궁금한 점이 있으면 알려주세요.

* 편집 : 실제로 SKSpriteNode에 init메서드 가 없기 때문에 (또는 적어도 우리가 알고있는) 이것을 버리고 싶었습니다 . 따라서 Apple의 미스터리에 깊이 빠져들고 싶지 않다면 다음과 같이하십시오.

+ (instancetype) spriteNodeWithImageNamed:(NSString *)imageName{
    MyClass *newClass = [[MyClass alloc] initWithImageNamed:imageName];
    newClass.myVariable = 100;
    return newClass;
}

대신 initWithImagemyVariable에 넣도록 재정의 할 수 있지만 요점은 initSKSpriteNode와 함께 이니셜 라이저 를 사용하지 않으려는 것 입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MKOverlayRenderer의 적절한 서브 클래 싱

분류에서Dev

클래스의 인스턴스에 대한 스마트 포인터 초기화 및 해당 메서드에 액세스

분류에서Dev

수퍼 클래스에서 서브 클래스의 클래스 인스턴스 변수 초기화

분류에서Dev

한 번에 클래스 정의 및 인스턴스화

분류에서Dev

싱글 톤 클래스에서 멤버의 다른 인스턴스화

분류에서Dev

서브 클래스 초기화 패턴

분류에서Dev

서브 클래스를 사용한 템플릿 인스턴스화 및 전문화 순서

분류에서Dev

클래스의 정적 멤버 함수 호출 및 초기화

분류에서Dev

멀티 스레딩 클라이언트에서 COM 개체의 초기화 및 인스턴스화

분류에서Dev

서브 클래스의 적절한 인스턴스 선언은 무엇입니까?

분류에서Dev

싱글 톤 클래스에서 초기화 한 후 배열이 nil입니다.

분류에서Dev

다른 클래스에서 한 클래스의 인스턴스 만들기

분류에서Dev

F #의 레코드와 유사한 클래스 인스턴스 초기화

분류에서Dev

기본 클래스에서 벡터의 깨끗한 인스턴스화

분류에서Dev

클래스의 JVM 초기화 순서는 다른 클래스의 인스턴스가 있습니다.

분류에서Dev

슈퍼 클래스 클래스 초기화 이전에 서브 클래스 최종 정적 초기화?

분류에서Dev

NSManagedObject의 서브 클래스 서브 클래 싱

분류에서Dev

개체 인스턴스화 : 동일한 이름의 내부 클래스 및 외부 클래스 (Java)

분류에서Dev

제네릭 클래스 및 서브 클래 싱 배열

분류에서Dev

싱글 톤 클래스의 초기화 목록

분류에서Dev

다른 클래스의 인스턴스로서의 스칼라 싱글 톤

분류에서Dev

파이썬에서 습한 공기의 밀도를 계산하기위한 클래스 및 클래스 메서드 초기화

분류에서Dev

디자인 패턴 찾기 : 서브 클래 싱없이 메서드 재정의

분류에서Dev

네이티브 내보내기 클래스 및 싱글 톤 메서드 반응

분류에서Dev

클래스 인스턴스의 포인터를 사용한 초기화가 C ++에서 유일한 것입니까?

분류에서Dev

Hibernate Inheritance-슈퍼 클래스 인스턴스 가져 오기 및 서브 클래스로 캐스팅

분류에서Dev

numpy 및 jax를 사용한 비전 이적 서브 클래 싱

분류에서Dev

numpy 및 jax를 사용한 비전 이적 서브 클래 싱

분류에서Dev

Eager 초기화에서 클래스 로딩시 생성 된 싱글 톤 클래스의 인스턴스가 단점을 고려할 수있는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    MKOverlayRenderer의 적절한 서브 클래 싱

  2. 2

    클래스의 인스턴스에 대한 스마트 포인터 초기화 및 해당 메서드에 액세스

  3. 3

    수퍼 클래스에서 서브 클래스의 클래스 인스턴스 변수 초기화

  4. 4

    한 번에 클래스 정의 및 인스턴스화

  5. 5

    싱글 톤 클래스에서 멤버의 다른 인스턴스화

  6. 6

    서브 클래스 초기화 패턴

  7. 7

    서브 클래스를 사용한 템플릿 인스턴스화 및 전문화 순서

  8. 8

    클래스의 정적 멤버 함수 호출 및 초기화

  9. 9

    멀티 스레딩 클라이언트에서 COM 개체의 초기화 및 인스턴스화

  10. 10

    서브 클래스의 적절한 인스턴스 선언은 무엇입니까?

  11. 11

    싱글 톤 클래스에서 초기화 한 후 배열이 nil입니다.

  12. 12

    다른 클래스에서 한 클래스의 인스턴스 만들기

  13. 13

    F #의 레코드와 유사한 클래스 인스턴스 초기화

  14. 14

    기본 클래스에서 벡터의 깨끗한 인스턴스화

  15. 15

    클래스의 JVM 초기화 순서는 다른 클래스의 인스턴스가 있습니다.

  16. 16

    슈퍼 클래스 클래스 초기화 이전에 서브 클래스 최종 정적 초기화?

  17. 17

    NSManagedObject의 서브 클래스 서브 클래 싱

  18. 18

    개체 인스턴스화 : 동일한 이름의 내부 클래스 및 외부 클래스 (Java)

  19. 19

    제네릭 클래스 및 서브 클래 싱 배열

  20. 20

    싱글 톤 클래스의 초기화 목록

  21. 21

    다른 클래스의 인스턴스로서의 스칼라 싱글 톤

  22. 22

    파이썬에서 습한 공기의 밀도를 계산하기위한 클래스 및 클래스 메서드 초기화

  23. 23

    디자인 패턴 찾기 : 서브 클래 싱없이 메서드 재정의

  24. 24

    네이티브 내보내기 클래스 및 싱글 톤 메서드 반응

  25. 25

    클래스 인스턴스의 포인터를 사용한 초기화가 C ++에서 유일한 것입니까?

  26. 26

    Hibernate Inheritance-슈퍼 클래스 인스턴스 가져 오기 및 서브 클래스로 캐스팅

  27. 27

    numpy 및 jax를 사용한 비전 이적 서브 클래 싱

  28. 28

    numpy 및 jax를 사용한 비전 이적 서브 클래 싱

  29. 29

    Eager 초기화에서 클래스 로딩시 생성 된 싱글 톤 클래스의 인스턴스가 단점을 고려할 수있는 이유는 무엇입니까?

뜨겁다태그

보관