2013-09-30 32 views
9

Jaki jest prawidłowy sposób "pomniejszania" swojej sceny.SpriteKit - Ustaw skalę i fizykę

Mam obiekt, który podaję impuls, aby wystrzelić go przez ekran. Na przykład wystrzeliwuje około 100 pikseli. Działa to zgodnie z oczekiwaniami - zwiększ siłę, na którą leci więcej, zwiększ gęstość, o którą lata mniej itd.

Problemem jest powiększanie, jedyny sposób, jaki znam, aby pomniejszyć na scenie to setScale, a wszystkie moje węzły kurczą się zgodnie z oczekiwaniami.

Ale zamiast przelatującego obiektu o tej samej wartości (po prostu pomniejszonego) przelatuje ponad dwukrotnie więcej niż odległość.

Po zarejestrowaniu masy/gęstości itp. Obiektu przed i po skalowaniu są one takie same, jak oczekiwano.

Dlaczego więc nie leci tyle samo? Próbowałem zmienić impuls, żeby pasował do skali, ale to nie działa, tak, że leci na mniejszą odległość - ale nie jest jedno za jedno ze skalowaniem.

Tricky question ...

Dzięki za pomysły.

Odpowiedz

10

Łatwy fix (dzięki Chris LaPollo, autor na RW)

[self runAction:[SKAction scaleTo:0.5 duration:0]]; 

Nic innego potrzebne.

Najdziwniejsze jest to, że nie można zrobić

[self setScale:0.5]; 

Jak się to ostrzeżenie, a doenst pracę - ale prowadzenie działań robi - dziwne !!!

SKScene: Ustawienie skali SKScene nie ma żadnego efektu.

+2

Nie można wykonać [self setScale: 0,5]; ponieważ nie powinieneś skalować sceny. Zobacz moją odpowiedź poniżej. – JKallio

+2

Nie można tego już zrobić: "SKScene: animowanie skali SKScene nie ma żadnego efektu." – edo42

10

Uważam, że nie powinno się skalować SKScene (tak jak to sugeruje, jeśli spróbujesz metody setScale z SKScene). Zamiast tego spróbuj , zmieniając rozmiar.

myScene.scaleMode = SKSceneScaleModeAspectFill; 

A potem podczas powiększania:

myScene.size = CGSizeMake(myScene.size.width + dx, myScene.size.height + dy); 

* Apple documentation mówi:

Ustaw właściwość scaleMode do SKSceneScaleModeResizeFill. Sprite Kit automatycznie zmienia rozmiar sceny tak, aby zawsze była zgodna z rozmiarem widoku.

1

Dla osób takich jak ja, które znalazły się tutaj po wyszukiwaniu, zmiana skali sceny w celu zmniejszenia nie działa. Zamiast upakować wszystkie węzły w pustym SKNode i uruchomić działania na tym jednym:

self.rootNode = [SKNode node]; 
// Add your children nodes here to the rootnode. 
[self addChild:self.rootNode]; 
// Zoom out 
[self.rootNode runAction:[SKAction scaleBy:2 duration:5]]; 
// Zoom in 
[self.rootNode runAction:[SKAction scaleBy:.5 duration:5]]; 

samo jest SKScene. Mam nadzieję, że to pomoże.