2014-07-22 10 views
5

Ho una palla che rimbalza sul ghiaione, qualcosa come pong.
Il raggio della sfera dipende dallo schermo.Stessa fisica in SpriteKit a prescindere dalle dimensioni dell'oggetto in iPad e iPhone

Ho trovato che la palla non sta andando con la stessa velocità su iPhone e iPad.
Poiché la sfera è più grande su iPad, quindi è più grande ball.physicsBody.mass.

Domanda Come risolvere correttamente questo problema?
Ho trovato due modi:
Primo: SpriteKit iPhone/iPad different resolution, need same physics per modificare SKPhysicsWorld. Il secondo è: SpriteKit ball speed differ on size per riparare mass di palla.

Penso che il fissaggio della sfera mass sia corretto.
Sono corretto?

+1

Perché non eseguire un test rapido? Aumentare la massa rispetto alla differenza di dimensioni della forma del cerchio, vedere se si comporta allo stesso modo su entrambi i dispositivi. Non penso che lo farà anche perché potrebbe non esserci una relazione lineare con le dimensioni di massa e forma. Anche allora dovresti aumentare la massa per tutti gli altri corpi, così come la gravità, al fine di garantire almeno un comportamento di collisione simile. – LearnCocos2D

+0

Ho eseguito quei test e su SpriteKit e quello che posso dire con certezza è che la velocità dipende dalla massa in modo lineare, ma non ho visto la relazione di linea tra dimensione/area/volume e massa. Questo mi sembra un problema molto comune. Se fai un gioco come il pong, vuoi lo stesso movimento della palla su tutti i dispositivi. Quindi speravo che qualcuno, che l'ha risolto, possa dare una certa esperienza su come l'ha risolto. – WebOrCode

+0

Il mio commento precedente è sbagliato, perché ho eseguito calcoli e ho fatto alcuni arrotondamenti. Dopo aver messo tutto in Excel (e facendo la funzione CORREL) posso dire che tutto è fodera, ad es. massa per modellare le dimensioni. – WebOrCode

risposta

0

App in cui ho usato questo approccio può stato visto a: seguente
https://itunes.apple.com/us/app/pongfinity/id930801337

ho fatto:

Ho fissi: attrito, la restituzione, linearDamping e massa, tutte le proprietà sulla sfera physicsBody.

NSUInteger normalizeForHeight(NSUInteger number) 
{ 
    CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    CGFloat screenHeight = screenRect.size.height; 



    CGFloat factor = 1.0; 
    factor = screenHeight/480; 
    return (number * factor); 
} 

Così, ogni volta che sto cambiando la velocità della palla, sto usando questo normalizeForHeight(20), 20 è solo un po 'ho costante ho preso:

funzione scritta da me che ho usato.