WebHU - Programozási kérdések és válaszok

Mi a baj a koordinátarendszerrel ebben a SpriteKit beállításban?

Létrehoztam egy SKView-t, amely egy ilyen SKScene alosztályt mutat be:

SKView *skv = [[SKView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:skv];

self.skScene = [[TestScene alloc] initWithSize:v.bounds.size];
[skv presentScene:_skScene];

Ezután a koordinátarendszer eredetének megtekintéséhez egy kis 10x10-es színes négyzetet adok a jelenethez.

SKSpriteNode *ori = [SKSpriteNode spriteNodeWithColor:[UIColor greenColor] size:CGSizeMake(10,10)];
[self addChild:ori];

A bal alsó sarokban zöld négyzet látható:

zöld pont a bal alsó sarokban

Ahogy gondoltam, a SpriteKit koordinátarendszer olyan, hogy az origó mindig a középpontban van. De a jelenetben az origó a bal alsó sarokban van. Amikor hozzáadok egy gyermek csomópontot a {0,0}-hoz, az a bal alsó sarokban is megjelenik.

Amikor hozzáadok egy SKSpriteNode-ot, és {0,0} pozícióba helyezem a jelenetben, megjelenik a bal alsó sarokban. De a bal alsó sarokban a jelenet eredete köré összpontosul (félig balra, félig lefelé vágva).

De most még zavarosabb a helyzet. Amikor hozzáadok egy SKSpriteNode-ot egy másik SKSpriteNode-hoz, az al-sprite KÖZÉPEN lesz a szülőben.

Tehát ez azt jelenti, hogy a jelenet koordinátarendszere másképp működik, mint a sprite koordinátarendszer?

Újrafutóz:

  • Amikor egy sprite-ot pozícionálok a jelenetben a(z) {0,0} helyen, a bal alsó sarokban jelenik meg, 50%-ban levágva (az eredet körül középen).
  • Amikor egy sprite-ot a sprite-ben {0,0} helyen helyezek el, a sprite közepén jelenik meg.

Rosszul van beállítva a jelenetem, vagy így működik?


Válaszok:


1

Ez így működik. Minden OpenGL nézet (legalábbis a 2D-sek) a bal alsó sarokban található.

A sprite helyzete is megfelelő. Alapértelmezés szerint mindkettő 0,0 helyen található. A sprite textúrája a csomópont pozíciójához viszonyítva a horgonypont faktor alapján rajzolódik ki. Az alapértelmezett érték 0,5, a 0,5 a textúrát a csomópont pozíciójának középpontjába helyezi.

Módosíthatja a jelenet horgonypontját 0,5, 0,5-re, ami a sprite-okat a jelenet közepére helyezi. Módosíthatja a sprite horgonypontját is, bár ez nem ajánlott, mivel olyan dolgokat érint, mint a forgatás, a lépték, az ütközésészlelés és a gyermek csomópont pozíciója.

31.12.2013

2

ezt a kódot hozzáadhatja a GameViewController.swifthez:

override func viewDidLoad() {
        super.viewDidLoad()

        // Detect the screensize
        var sizeRect = UIScreen.mainScreen().applicationFrame
        var width = sizeRect.size.width * UIScreen.mainScreen().scale
        var height = sizeRect.size.height * UIScreen.mainScreen().scale

        // Scene should be shown in fullscreen mode
        let scene = GameScene(size: CGSizeMake(width, height))


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

        /* 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

        skView.presentScene(scene)
    }
13.06.2015

3

Amit tettem, az az volt, hogy beállítottam a megjeleníteni kívánt SKScene méretét annak a Viewcontrollernek a bounds.size-jére, amelyről a jelenetet meg akarom mutatni. Valami ilyesmi:

    if let scene = GameScene(fileNamed:"GameScene") {
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true
        scene.size = skView.bounds.size
        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        skView.presentScene(scene)
    }

Remélem ez neked is bevált, ha hibáztam itt, kérlek jelezd nekem is :)

19.10.2015
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..