Vai al contenuto

Giochino iPhone


Toma91

Messaggi raccomandati

Salve, sto provicchiando a creare una specie di giochino per iPhone, ma mi serve un aiuto... Come faccio, quando un oggetto che si muove sullo schermo ne colpisce un'altro, a farlo scomparire del tutto (il secondo)?

Es. Una pallina vaga per lo schermo, colpisce una sbarretta, la sbarretta scompare

Spero di essere stato abbastanza chiaro... :rolleyes:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Si chiamano collisioni e ci vuole un algoritmo che le verifichi e che normalmente viene chiamato Detect Collision (che fantasia che abbiamo noi programmatori).

Questo algoritmo te lo devi creare tu all'interno di un metodo; poi richiamami il metodo dal mainGameLoop (hai un mainGameLoop vero ?) in modo che possa controllare costantemente le collisioni.

Una volta che è verificata la collisione dei due oggetti bisogna rimuovere l'oggetto interessato e questo dipende da che oggetto è.

Se si tratta di una UIView o di una UIImageView normalmente è sufficiente un removeFromSuperView, ma anche questo è relativo.

Ti ho creato abbastanza confusione ?

[EDIT] Se vai su www.xcodeitalia.com e ti iscrivi, l'iscrizione è gratuita, è possibile scaricare il progetto completo di un giochino per iPhone, con il codice commentato, con tanto di gestione delle collisioni.

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Grazie!!! Si un po' di confusione ce l'ho, ma oggi pomeriggio provo a fare qualcosina... In caso posso ancora contare sul tuo aiuto? Sei a mia disposizione?

Grazie dell'attenzione :DD:love:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Grazie!!! Si un po' di confusione ce l'ho, ma oggi pomeriggio provo a fare qualcosina... In caso posso ancora contare sul tuo aiuto? Sei a mia disposizione?

Grazie dell'attenzione :lol: :love:

Nel limite del possibile si.

Ora non vorrei spammare ma non trovo più l'opzione per mandare i PM :DD

Sul forum di xcodeitalia.com c'è una apposita sezione sul game programming per iPhone.

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Anch'io non trovo più l'opzione per i MP, consolati...

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Sto procedendo... Allora, del codice del gioco di XcodeItalia non ci ho capito molto, ma forse solo perché non l'ho studiato bene, che vado di fretta...

Per ora io sto usando CGRectIntersectsRect per verificare il contatto, e sembra funzionare... Se puoi capire il codice senza aver visto l'applicazione, io te lo posto, così ci dai un'occhiata...

È un po' schifoso e ridondante ecc perché l'ho "riciclato" da un'altra app ma poi lo limerò un po' :rolleyes:

#import "BoxViewController.h"

//stato della partita
#define kPartitaInCorso 1
#define kPartitaFerma 2

//velocità della pallina sui due assi
#define kVelocitaPallaY 12

//velocità di movimento del computer
#define kVelocitaMovComputer 13

//punteggio massimo, di fine partita
#define kPuntiVittoria 5

@implementation BoxViewController

@synthesize barraUno, barraDue, pallina, textInizia, puntiUno, puntiDue, statoPartita, velocitaPalla, blocco;

/*
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
   if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
       // Custom initialization
   }
   return self;
}
*/

/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
}
*/



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
//metodo eseguito al caricamento della vista
- (void)viewDidLoad {
   [super viewDidLoad];
punteggioUno = 3;
//impostiamo lo stato iniziale della partita su "ferma"
self.statoPartita = kPartitaFerma;
//settiamo la velocità della palla in un componenta a due dimensioni
int rand = random()%10;
velocitaPalla = CGPointMake(rand, kVelocitaPallaY);
pallina.center = CGPointMake(self.view.center.x, 400);
//avviamo un timer per il movimento della pallina
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(gameLoop) userInfo:nil repeats:YES];
}

-(void)gameLoop{
//controlliamo se la partita è in corso
if (statoPartita == kPartitaInCorso){
	//muoviamo il centro della pallina, spostandolo con i valori della velocità
	pallina.center = CGPointMake(pallina.center.x + velocitaPalla.x, pallina.center.y + velocitaPalla.y);
	//se il centro è oltre le dimensioni orizzontali della vista, invertiamo la direzione (sempre sull'asse X)
	if (pallina.center.x > self.view.bounds.size.width || pallina.center.x < 0){
		velocitaPalla.x = -velocitaPalla.x;
	}
	//se il centro è oltre le dimensioni verticali della vista, invertiamo la direzione (sempre sull'asse Y)
	if (pallina.center.y < 0){
		velocitaPalla.y = -velocitaPalla.y;
	}
	//controlliamo se la pallina è a contatto con la barraDue (quella in basso)
	if (CGRectIntersectsRect(pallina.frame, barraDue.frame)){
		if (pallina.center.y < barraDue.center.y){
			velocitaPalla.y = -velocitaPalla.y;
			if (velocitaPalla.x > 0) {
				int rand = random()%10;
				velocitaPalla.x = rand;
			} else {
				int rand = random()%10;
				velocitaPalla.x = -rand;
			}
		}
	}
	//controlliamo se la pallina è a contatto con il blocchetto
	if (CGRectIntersectsRect(pallina.frame, blocco.frame)){
		if (pallina.center.y - 8 < blocco.center.y + 10){
			velocitaPalla.y = -velocitaPalla.y;				
		}
	}
	//controlliamo se la pallina è caduta
	if (pallina.center.y > self.view.bounds.size.height){
		punteggioUno --;
		[self reset:(punteggioUno < 0)];
	}		
} else {
	//se la partita è ferma facciamo ricomparire la label per avviare il gioco
	if(textInizia.hidden){
		textInizia.hidden = NO;
	}
}
}

-(void)reset:(BOOL) newGame{
//mettiamo la partita sullo stato fermo
self.statoPartita = kPartitaFerma;
//posizioniamo la pallina al centro dello schermo
pallina.center = CGPointMake(self.view.center.x, 400);	
//controlliamo se la partita è finita (un giocatore ha vinto)
if (newGame){
	if (punteggioUno < 0){
		textInizia.text = @"Hai perso";
	}
} else {//non ha vinto nessuno, si continua a giocare
	textInizia.text = @"Tocca per iniziare";
}
//settiamo le label con i due punteggi
puntiUno.text = [NSString stringWithFormat:@"%d", punteggioUno];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//se la partita è ferma facciamola riniziare
if(statoPartita == kPartitaFerma){
	textInizia.hidden = YES;
	statoPartita = kPartitaInCorso;
} else if (statoPartita == kPartitaInCorso){//la partita è in corso, muoviamo le racchette
	[self touchesMoved:touches withEvent:event];
}
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
//creiamo un oggetto con le informazione del "touch" fatto dall'utente
UITouch *touch = [[event allTouches] anyObject];
//rileviamo le coordinate del tocco fatto dall'utente
CGPoint location = [touch locationInView:touch.view];
//creiamo un oggetto con le nuove coordinate in cui dobbiamo spostare la barra (quella dell'utente, ovvero la barraDue)
CGPoint xLocation = CGPointMake(location.x,barraDue.center.y);
//muoviamo la barra dell'utente
barraDue.center = xLocation;
}


/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
   // Return YES for supported orientations
   return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
   [super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
   [super dealloc];
[pallina dealloc];
[barraUno dealloc];
[barraDue dealloc];
[puntiUno dealloc];
[puntiDue dealloc];
[textInizia dealloc];
[blocco dealloc];
}

@end

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Eresia !!!! Eresia !!!!:rolleyes::fiorellino::rofl::ciao:

Che non ti veda mai più chiamare il metodo dealloc di un oggetto, altrimenti vengo li e ti formatto il Mac :DD

Il metodo dealloc non va, ripeto non va, mai chiamato direttamente. Devi fare il release e poi ci pensa lui a mandare in esecuzione il dealloc.

Detto questo tu vuoi rimuovere il blocchetto immagino.

Però mi serve sapere che cosa è il blocchetto : UIView, UIImageView o cos'altro ?

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Prima di tutto grazie delle dritte e dei consigli!!!

Comunque il blocchetto è un UIImageView! E cos'è la storia del dealloc? Mi spieghi un po' se hai voglia? Io so solo che (credo) serve a liberare la memoria (?)...

Oddio che combino :(?

Grazie, appena mi rispondi correggo tutto subito :ghghgh: :ghghgh:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Allora se è una UIImageView dovrebbe essere sufficiente un removeFromSuperView nel punto in cui viene verificata la collisione.

Questo ci ricollega al discorso del dealloc e del release.

Nel momento in cui tu invochi il metodo removeFormSuperView dell'oggetto UIImageView, ne viene fatto il release che a sua volta invoca il dealloc, liberando la relativa memoria occuppata dall'oggetto.

Attenzione !!! : il discorso di cui sopra vale solo se il retain count dell'oggetto è uguale a 0 (zero).

Come vedi il metodo dealloc non va mai invocato direttamente in quanto invocato automaticamente nel momento in cui retain count dell'oggetto è uguale a 0.

Se lo si richiama direttamente e il retain count non è a zero avremo problemi nel funzionamente dell'applicazione.

Se vuoi approfondire il discorso sulla gestione della memoria, sempre su xcodeitalia trovi una serie di tutorial relativi alla gestione della memoria.

I tutorial sono per Mac, ma a parte il garbage collection che su iPhone non esiste, i concetti e modo di funzionamento sono glistessi.

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Allora io non ho bisogno di fare il dealloc di niente? Perché il blocchetto è deallocato quando lo si colpisce, e il resto serve sempre all'applicazione fino alla sua chiusura... o no?

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Allora io non ho bisogno di fare il dealloc di niente? Perché il blocchetto è deallocato quando lo si colpisce, e il resto serve sempre all'applicazione fino alla sua chiusura... o no?

In un certo senso è così. Comunque sia il metodo dealloc non va mai chiamato. Viene invocato automaticamente a seguito di un release.

Nel momento in cui tu colpisci il blocchetto e lo rimuovi, per esempio con il removeFromSuperView, viene scatenata la sequenza di eventi release->dealloc.

Fermo restando che il retain count dell'oggetto sia zero. Fino a che non è a zero la memoria non viene liberata.

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Allora a occhio dovrebbe proprio essere zero, visto che "correggendo" il codice in

		//controlliamo se la pallina è a contatto con il blocchetto
	if (CGRectIntersectsRect(pallina.frame, blocco.frame)){
		if (pallina.center.y - 8 < blocco.center.y + 10){
			velocitaPalla.y = -velocitaPalla.y;
			[blocco removeFromSuperview];
------>           	[blocco release];
		}

mi si blocca al contatto con il blocco e mi esce in un EXC_BAD_ACCESS!

Ora vado a sistemare l'interfaccia e pulire il codice, ancora una volta, grazie per il supporto!

Mi sa che mi tocca offrirti una birretta :ghghgh:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Ok, scusa se ti rompo ancora...

Allora il motore fisico non fa proprio quello che voglio io: ad esempio se la pallina entra di lato al blocco rimane "incastrata" rimbalzando da dove entra al lato opposto, per poi continuare la sua corsa...

Inoltre, quando il blocco è rimosso, se la palla entra in contatto con il unto dove si trovava prima agisce come se il blocchetto ci fosse ancora...

Di cosa ho bisogno? Di un altro motore 2D vero? Oppure? :ghghgh:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Qui la cosa si fa un poco più complicata.

Prima di tutto bisogna sapere come inserisci il blocco.

Li metti tramite Interface Builder ? Per caso hai degli IBOutlet con @property (nonatomic, retain) e relativo @synthesize ?

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Il blocco lo inserisco in Interface Builder, quindi collego File's Owner a lui;

poi in Xcode ho nell'AppViewController.h

@property (nonatomic, retain) IBOutlet UIImageView *blocco;

e in AppViewController.m

@synthesize barraUno, [...], blocco;

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Aiuto...

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Allora, intanto la riga [blocco release]; non dovrebbe andar messa, visto che rimuovendo l'oggetto dalla view (riga sopra) questo viene anche rilasciato, e non essendo stato fatto un retain dovresti già essere a posto così.

Magari metti un blocco = nil; così ti eviti che chiamate ad un puntatore non più valido ti creino crash imprevisti.

Il problema infatti è che tu rilasci l'oggetto, ma poi all'interno del gameLoop non controlli se esiste ancora, quindi ti va in errore.

Dovresti mettere un controllo per vedere se l'oggetto esiste ancora.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

Allora, intanto la riga [blocco release]; non dovrebbe andar messa, visto che rimuovendo l'oggetto dalla view (riga sopra) questo viene anche rilasciato, e non essendo stato fatto un retain dovresti già essere a posto così.

Sì sì, infatti quello era solo per controprova!

Magari metti un blocco = nil; così ti eviti che chiamate ad un puntatore non più valido ti creino crash imprevisti.

Il problema infatti è che tu rilasci l'oggetto, ma poi all'interno del gameLoop non controlli se esiste ancora, quindi ti va in errore.

Dovresti mettere un controllo per vedere se l'oggetto esiste ancora.

Ma il gioco non mi va in errore... Il problema è che con il removeFromSuperView rimuove il blocco alla vista, ma poi di fatto è ancora li, infatti se la pallina ci si interseca rimbalza ancora...

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Ma il gioco non mi va in errore... Il problema è che con il removeFromSuperView rimuove il blocco alla vista, ma poi di fatto è ancora li, infatti se la pallina ci si interseca rimbalza ancora...

Uhm… dovrei riguardare neglio il codice, perché lo scroso un po' velocemente.

La prima cosa che mi viene in mente è che sebbene l'oggetto venga rimosso, e di conseguenza anche rilasciato, non venga deallocato subito, quindi risponda ancora come se esistesse.

La cosa potrebbe essere possibile, perché la documentazione mi sembra che dica che gli oggetti vengono deallocati una volta che il retain sia uguale a 0, ma non per forza subito, ma appena il sistema lo ritiene opportuno.

Una prova semplice e veloce sarebbe quella che ti ho suggerito, ovvero impostare il blocco a nil, dopo averlo rimosso dalla sua superview, e mettere nel gameLoop un controllo per vedere se il blocco esiste (quindi blocco!=nil) o meno.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

Va bien, provo subito :fiorellino:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Sembra proprio che blocco = nil funzioni :ghghgh:, ora vado avanti un altro po' con il programma e al prossimo (a breve) problema torno qui a chiedere :fiorellino:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Arrivo in ritardo ma vedo che ti hanno già risposto.

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Non ti preoccupare per il ritardo, devo molto anche a te, ci mancherebbe...

Allora ho "riscritto" il progetto da capo, non utilizzando risorse pasticciate di altri vecchi programmi, e ora sto riniziando la programmazione vera e propria...

Appena ho sviluppato un po' la situazione (ovvero al prossimo intoppo :mad:) sono qui pronto a ricevere il vostro aiuto!!!

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Non ti preoccupare per il ritardo, devo molto anche a te, ci mancherebbe...

Allora ho "riscritto" il progetto da capo, non utilizzando risorse pasticciate di altri vecchi programmi, e ora sto riniziando la programmazione vera e propria...

Appena ho sviluppato un po' la situazione (ovvero al prossimo intoppo :shock:) sono qui pronto a ricevere il vostro aiuto!!!

Beh...visto che sei ripartito da capo io mi butterei sulle OpenGL ES a questo punto. ;)

Scherzo ovviamente. Vogliamo vedere qualche screen. :mhh:

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

A saperle usare, le OpenGL ES :salute:...

Ho ricominciato solo nel senso che non ho utilizzato il codice impiastricciato di prima, preso dall'altra mia app, ma ho creato un nuovo progetto!

Poi posterò qualche screen :salute:

In cosa consistono le OpenGL ES?

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

In cosa consistono le OpenGL ES?

Sono delle librerie grafiche OpenSource, sorelle minori delle OpenGL che vengono usate anche su Mac e destinate all'utilizzo in particolare su dispositivi mobili.

Servono per disegnare la grafica accedendo direttamente al processore grafico del dispositivo, tramite set di apposite istruzioni e naturalmente sono più performanti.

Insomma quando vedi quei bei gioconi con tutti quegli effetti speciali, grafica pazzesca, etc... ecco dietro molte volte ci sono le OpenGL (su windows molto spesso viene usata la controparte Microsoft che si chiama DirectX)

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Ah ok, sono come le OpenGL normali più o meno quindi...

E si programma allo stesso modo usando le OGL? Cioè, quello che io implementavo con

velocitaPalla = CGPointMake(kVelocitaPallaX, kVelocitaPallaY);

lo devo comunque fare? O devo usare funzioni e librerie differenti?

E le amiche collisioni?

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Eccomi con un nuovo problema...

Il mio giochino ha 14 blocchetti blocco1, blocco2... Quando al palla lo colpisce il blocchetto scompare e va tutto bene! Ma...

Come faccio, usando qualcosa tipo una matrice, a fare il tutto senza dover scrivere per ogni blocco:

	if (CGRectIntersectsRect(palla.frame, blocco1.frame)) {

		if (palla.center.y - 10 < blocco1.center.y + 10 && palla.center.x > blocco1.center.x - 20 && palla.center.x < blocco1.center.x + 20 ||
			palla.center.y + 10 > blocco1.center.y - 10 && palla.center.x > blocco1.center.x - 20 && palla.center.x < blocco1.center.x + 20) {

			velocitaPalla.y = -velocitaPalla.y;

		} else if (palla.center.x - 10 > blocco1.center.x + 20 && palla.center.y > blocco1.center.y - 10 && palla.center.y < blocco1.center.x + 10 ||
				   palla.center.x + 10 > blocco1.center.x - 20 && palla.center.y > blocco1.center.y - 10 && palla.center.y < blocco1.center.x + 10) {

			velocitaPalla.x = -velocitaPalla.x;

		}

		[blocco1 removeFromSuperview];
		blocco1 = nil;

	}

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Up?

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Metti tutti i blocchetti dentro un array, poi con un ciclo for() scansiona ogni elemento dell'array e per ogni elemento verifica la collisione. :rolleyes:

MacBook Air 13" 128 SSD - Time Capsule 500 GB - iPhone 5S 16GB - iPad 2 Wi-Fi 32GB

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...