Autor Wątek: [PHASER] Pierwszy prosty projekt w XDK  (Przeczytany 2635 razy)

Offline ld

  • Użytkownik

# Sierpień 18, 2015, 13:53:07
Witam,
Nie dawno rozpocząłem pracę z XDK i biblioteką Phaser. Po wybraniu właściwego szablonu (z Phaserem) i zapisaniu projektu. Podmieniłem pliki(4 pliki) Phasera na najnowszą wersję(z 2.1.1 na 2.4.2). Po za tym nic więcej nie zmieniałem. Po odpaleniu projektu pojawił się jeden błąd

Phaser v2.4.2 | Pixi.js v2.2.8 | WebGL | WebAudio | http://phaser.io phaser.js:38516
Uncaught TypeError: undefined is not a function Game.js:45

Linia 45 to

this.scale.setScreenSize(true);
Poniżej podaje zawartość pliku Game.js

/* globals Phaser:false */
// create BasicGame Class
BasicGame = {


};


// create Game function in BasicGame
BasicGame.Game = function (game) {
};


// set Game function prototype
BasicGame.Game.prototype = {


    init: function () {
        // set up input max pointers
    //this.input.maxPointers = 1;
        // set up stage disable visibility change
    //this.stage.disableVisibilityChange = true;
        // Set up the scaling method used by the ScaleManager
        // Valid values for scaleMode are:
        // * EXACT_FIT
        // * NO_SCALE
        // * SHOW_ALL
        // * RESIZE
        // See http://docs.phaser.io/Phaser.ScaleManager.html for full document
        this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
        // If you wish to align your game in the middle of the page then you can
        // set this value to true. It will place a re-calculated margin-left
        // pixel value onto the canvas element which is updated on orientation /
        // resizing events. It doesn't care about any other DOM element that may
        // be on the page, it literally just sets the margin.
        this.scale.pageAlignHorizontally = true;
        this.scale.pageAlignVertically = true;
        // Force the orientation in landscape or portrait.
        // * Set first to true to force landscape.
        // * Set second to true to force portrait.
        this.scale.forceOrientation(true, false);
        // Sets the callback that will be called when the window resize event
        // occurs, or if set the parent container changes dimensions. Use this
        // to handle responsive game layout options. Note that the callback will
        // only be called if the ScaleManager.scaleMode is set to RESIZE.
    //this.scale.setResizeCallback(this.gameResized, this);
        // Set screen size automatically based on the scaleMode. This is only
        // needed if ScaleMode is not set to RESIZE.
         this.scale.setScreenSize(true);
        // Re-calculate scale mode and update screen size. This only applies if
        // ScaleMode is not set to RESIZE.
        this.scale.refresh();


    },


    preload: function () {


        // Here we load the assets required for our preloader (in this case a
        // background and a loading bar)
        this.load.image('logo', 'asset/phaser.png');
       
        //this.rect = new Rectangle(0, 0, 5, 4);
    },


    create: function () {
        // Add logo to the center of the stage
        this.logo = this.add.sprite(
            this.world.centerX, // (centerX, centerY) is the center coordination
            this.world.centerY,
            'logo');
        // Set the anchor to the center of the sprite
        this.logo.anchor.setTo(0.5, 0.5);


    },


    gameResized: function (width, height) {


        // This could be handy if you need to do any extra processing if the
        // game resizes. A resize could happen if for example swapping
        // orientation on a device or resizing the browser window. Note that
        // this callback is only really useful if you use a ScaleMode of RESIZE
        // and place it inside your main game state.


    }
};

Po za komentowaniu tej jednej linijki nie ma żadnych błędów. Nie wiem co jest przyczyną. W wielu przykładach w necie to polecenie(linia 45) się pojawia. Jak sądzicie o co chodzi?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline roertbb

  • Użytkownik

  • +1
# Sierpień 18, 2015, 14:07:06
Też ostatnio zmieniłem wersję na nowszą i miałem z tym kilka problemów, zwłaszcza z resizeowaniem okienka gry. Męczyłem się trochę z tym wszystkim i w końcu po przemyszkowaniu internetu zostałem przy starszej wersji.
Ze strony dokumentacji:
This method is deprecated and should not be used. It may be removed in the future.
Updates the size of the Game or the size/position of the Display canvas based on internal state.

Do not call this directly. To "refresh" the layout use refresh. To precisely control the scaling/size, apply appropriate rules to the bounding Parent container or use the USER_SCALE scale mode.
Tu link http://phaser.io/docs/2.3.0/Phaser.ScaleManager.html#setScreenSize
« Ostatnia zmiana: Sierpień 18, 2015, 14:10:21 wysłana przez roertbb »

Offline ld

  • Użytkownik

# Sierpień 18, 2015, 16:09:46
Dziękuje za odpowiedz. Była bardzo pomocna:)

Szukałem metody setScreenSize(true) w nowej dokumentacji 2.4.2 ale nie mogłem jej znaleźć. Sądziłem, że źle szukam. Teraz wiem o co chodziło:)

Jak napisałem wcześniej wiele przykładów z netu ma tą metodę w kodzie. Jak podejść do skalowania w nowej wersji Phasera może wiesz?

Offline roertbb

  • Użytkownik

# Sierpień 18, 2015, 20:06:49
Chyba znalazłem optymalne rozwiązanie, które działało podobnie do setScreenSize(). Testowane na laptopie i telefonie ;)
game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
game.scale.parentIsWindow = true;
game.scale.pageAlignHorizontally = true;
game.scale.pageAlignVertically = true;
game.scale.refresh();
« Ostatnia zmiana: Sierpień 18, 2015, 20:09:05 wysłana przez roertbb »