Swift:从GameViewController设置GameScene变量

时间:2015-07-07 00:07:59

标签: ios swift sprite-kit

我需要将几个变量从我的GameViewController传递给我的GameScene。

GameViewController:

   ##authInterceptorService.js##

 (function ()
{
   var injectParams = ['$rootScope', 'authService'];

    function authInterceptorFactory($rootScope, authService)
    {
    factory = {};

    factory.request = function(config)
    {
        var currentUser = authService.getCurrentUser(),
            access_token = currentUser ? currentUser.access_token : null;

        if(access_token)
        {
            config.headers.authorization = access_token;
        }

        return config;
    };

    factory.responseError = function(response)
    {
        if(response.status === 401)
        {
            $rootScope.$broadcast('unauthorized');
        }

        return response;
    };

    return factory;
};

authInterceptorFactory.$inject = injectParams;

angular
    .module('rdApp.authModule')
    .factory('authInterceptorService', authInterceptorFactory);
 }());



    ##authService.js##
(function()
{
var injectParams = ['$http', 'store'];

function authFactory($http, store)
{
    factory = {};
    var urlBase = '-------';
    var currentUser = null;

    factory.setCurrentUser = function(user)
    {
        currentUser = user;
        store.set('user', user);

        return currentUser;
    };

    factory.getCurrentUser = function()
    {
        if(!currentUser)
        {
            currentUser = store.get('user');
        }

        return currentUser;
    };

    factory.signIn = function (user)
    {
        return $http.post(urlBase + '-----', user);
    };

    return factory;
};

authFactory.$inject = injectParams;

angular
    .module('rdApp.authModule')
    .factory('authService', authFactory);

}());


/*CONSOLE ERROR */
TypeError: authService.getCurrentUser is not a function
at factory.request (authInterceptorService.js:11)
at angular.min.js:119
at m.$eval (angular.min.js:134)
at m.$digest (angular.min.js:131)
at m.$apply (angular.min.js:134)
at angular.min.js:19
at Object.e [as invoke] (angular.min.js:38)
at d (angular.min.js:19)
at yc (angular.min.js:20)
at Xd (angular.min.js:18)(anonymous function) @ angular.min.js:107

GameScene - 具有上面列出的变量(idDefence)等。

override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = GameScene(size: view.frame.size) as GameScene? {

        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = false
        skView.showsNodeCount = false
        skView.showsPhysics = false

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        // pass game set-up variables
        scene.idDefence = idDefence
        scene.idAttack = idAttack
        scene.tries = tries
        scene.runs = runs
        scene.teamShirt = teamShirt

        skView.presentScene(scene)
    }
}

这符合但是idDefence变量(从GameViewController正确打印为数字)不会传递给活动的GameScene并保持为0. GameScene代码:

class GameScene: SKScene, SKPhysicsContactDelegate {

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    // variables - set-up defenders
    var idDefence = 0
    ...

任何帮助非常感谢

1 个答案:

答案 0 :(得分:0)

您正在检查init(size:)初始化程序中这些属性的值;在线上调用:

if let scene = GameScene(size: view.frame.size) as? GameScene {
    ... 
}

此时,尚未运行从GameViewController设置属性值的代码;因此他们仍然有他们的默认值。

如果您在didMoveToView的{​​{1}}方法中检查属性的值,则会看到它们都具有正确的值,因为GameScene将在{{1}之后调用}}