То, что я пытаюсь выполнить (должно быть как минимум ..) очень просто: я хочу представить SKScene
данные, которые у меня есть в UIViewController
, который представляет эту сцену. Другими словами, у меня есть переменная chapter
объявлена следующим образом:Передача данных в SKScene от UIVIewController
#import <UIKit/UIKit.h>
#import <SpriteKit/SpriteKit.h>
@interface ViewController : UIViewController
@property (nonatomic) NSInteger chapter;
@end
Я испытал бревнами, что переменная глава является фактически объявленной (в моем случае я просто тестирование с ним, как 4).
Вот мой ViewController.m файл и как я представляю свою сцену:
- (void)viewDidLoad {
[super viewDidLoad];
.
.
.
// Configure the view.
SKView *skView = (SKView *)self.view;
if (!skView.scene) {
skView.showsFPS = YES;
skView.showsNodeCount = YES;
// Create and configure the scene.
scene = [OLevel sceneWithSize:CGSizeMake(skView.bounds.size.width, skView.bounds.size.height)];
scene.scaleMode = SKSceneScaleModeResizeFill;
// Set the SKScene chapter #
scene.chapter = self.chapter; // <<<< NOT WORKING?
NSLog(@"CHAP TO PASS: %u", self.chapter);
NSLog(@"CHAP RECEIVED: %u", scene.chapter);
// Present the scene.
[skView presentScene:scene];
}
С сцены определяется следующим образом, с viewDidLoad быть один показано выше: (я его подклассы)
@interface ViewController() {
OLevel *scene;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
.
.
.
Вот мой OLevel.h класс:
#import <SpriteKit/SpriteKit.h>
#import <GameplayKit/GameplayKit.h>
@interface OLevel : SKScene <SKPhysicsContactDelegate, GKAgentDelegate>
@property (nonatomic) NSInteger chapter;
@end
И мой OLevel.m *:
- (id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
NSLog(@"Creating scene");
NSLog(@"CHAP: %u", self.chapter);
[self setUpScene];
}
return self;
}
Я очень смущен, почему этот подход не работает. Я установил свойство в своем ViewController в нужное значение главы. Затем я сказал своему Olevel, какое значение это значение, и установить его собственное свойство главы для такого значения, а затем правильно представить сцену. Почему я продолжаю получать 0 ??
2016-07-18 23:52:32.189 TESTAPP[2038:684620] CHAP TO PASS: 4
2016-07-18 23:52:32.193 TESTAPP[2038:684620] CHAP RECEIVED: 0
2016-07-18 23:52:32.195 TESTAPP[2038:684620] Creating scene
2016-07-18 23:52:32.195 TESTAPP[2038:684620] CHAP: 0
Я знаю, что этот вопрос был дан ответ here с тем же подходом, который я первоначально использовались, прежде чем искать ответ, но я до сих пор, чтобы заставить его работать ..
Если кто-нибудь знает, что я я делаю неправильно, пожалуйста, помогите мне.
Я попытался настроить его таким, чтобы инициализировать сцену как «Olevel * scene», но, похоже, ничего не изменило. То, что я закончил, это запустить отдельную функцию, которая передавала данные непосредственно классу Olevel, который работал нормально. –
Olevel * scene * scene позволяет вашему свойству сцены идентифицироваться как Olevel type и модифицировать его, чтобы вы могли видеть свойство главы. Фактически, если вы зарегистрируетесь в OLevel.m, в файле didMoveToView вы можете увидеть измененное значение раздела. –
В коде, который вы хотите увидеть в методе INIT, для этого вы можете изменить метод INIT, чтобы получить значение главы в качестве входного значения –