Hallo Community,
ich bin gerade dabei ein kleines Spiel unter IOS zu schreiben, ich arbeite mit dem Buch „Spiele entwickeln für iPhone und iPad“ von Patrick Völcker (nur zu empfehlen) . Ich habe
mich erstmal dagegen entschiedne das SpriteKit zu benutzen. Zur Zeit beschäftige ich mich mit der Kollisionsabfrage zwischen 2 Objekten, einem Kreis und einem Rechteck.
Die Theorie ist ja eigentlich recht simpel: prüfen ob sich beide Frames überschneiden, anschließend
prüfen von wo das andere Objekt kommt und letztendlich mit (die Seitenlänge A)^2 + (der Seitenlänge B)^2 < Radius^2 prüfen ob sich der Kreis und das Rechteck berühren.
In der Praxis hatte ich es bereits auch schon einmal geschafft, jedoch hatte sich da nur der Kreis bewegt, nun bewegen sich beide Objekte, dies sollte ja aber eigentlich keinen Unterschied machen.
Jedoch funktioniert es nicht, der Ball kollidiert manchmal nur an einer Seite des Rechtecks,
manchmal erst in der Mitte.
Den Quellcode bin ich Gefühlt schon 100 mal durchgegangen, doch irgendwie finde ich den Fehler nicht. Es wäre nett wenn sich einer die Zeit nehmen könnte und mir einmal erklären könnte, was ich falsch gemacht habe.
Alles anzeigen
Danke im Voraus
ich bin gerade dabei ein kleines Spiel unter IOS zu schreiben, ich arbeite mit dem Buch „Spiele entwickeln für iPhone und iPad“ von Patrick Völcker (nur zu empfehlen) . Ich habe
mich erstmal dagegen entschiedne das SpriteKit zu benutzen. Zur Zeit beschäftige ich mich mit der Kollisionsabfrage zwischen 2 Objekten, einem Kreis und einem Rechteck.
Die Theorie ist ja eigentlich recht simpel: prüfen ob sich beide Frames überschneiden, anschließend
prüfen von wo das andere Objekt kommt und letztendlich mit (die Seitenlänge A)^2 + (der Seitenlänge B)^2 < Radius^2 prüfen ob sich der Kreis und das Rechteck berühren.
In der Praxis hatte ich es bereits auch schon einmal geschafft, jedoch hatte sich da nur der Kreis bewegt, nun bewegen sich beide Objekte, dies sollte ja aber eigentlich keinen Unterschied machen.
Jedoch funktioniert es nicht, der Ball kollidiert manchmal nur an einer Seite des Rechtecks,
manchmal erst in der Mitte.
Den Quellcode bin ich Gefühlt schon 100 mal durchgegangen, doch irgendwie finde ich den Fehler nicht. Es wäre nett wenn sich einer die Zeit nehmen könnte und mir einmal erklären könnte, was ich falsch gemacht habe.
Quellcode
-
- if (CGRectIntersectsRect(ball.frame, player.frame)) {
- if (ball.center.x < player.frame.origin.x) {
- if ( (ball.center.x - player.frame.origin.x) * (ball.center.x - player.frame.origin.x) +
- (ball.center.y - player.frame.origin.y) * (ball.center.y - player.frame.origin.y) <=
- (ball.bounds.size.width/2 * ball.bounds.size.width/2)) {
- [self endGame];
- }
- }
- if (ball.center.x < player.frame.origin.x) {
- if ( (ball.center.x - player.frame.origin.x) * (ball.center.x - player.frame.origin.x) +
- (ball.center.y - (player.frame.origin.y + player.bounds.size.height)) *
- (ball.center.y - (player.frame.origin.y + player.bounds.size.height)) <=
- (ball.bounds.size.height/2 * ball.bounds.size.height/2)) {
- [self endGame];
- }
- }
- else if (ball.center.x > player.frame.origin.x + player.bounds.size.width) {
- if ( (ball.center.x - (player.frame.origin.x + player.bounds.size.width)) *
- (ball.center.x - (player.frame.origin.x + player.bounds.size.width)) +
- (ball.center.y - (player.frame.origin.y + player.bounds.size.height)) *
- (ball.center.y - (player.frame.origin.y + player.bounds.size.height)) <=
- (ball.bounds.size.width/2 * ball.bounds.size.width/2)){
- [self endGame];
- }
- }
- if (ball.center.x > player.frame.origin.x + player.bounds.size.width) {
- if ( (ball.center.x - (player.frame.origin.x + player.bounds.size.width)) *
- (ball.center.x - (player.frame.origin.x + player.bounds.size.width)) +
- (ball.center.y - player.frame.origin.y) * (ball.center.y - player.frame.origin.y) <=
- (ball.bounds.size.width/2 * ball.bounds.size.width/2)){
- [self endGame];
- }
- }
- else if (
- (
- (ball.center.x < player.frame.origin.x) ||
- (ball.center.x > player.frame.origin.x + 20)
- ) && (
- (ball.frame.origin.y >= player.frame.origin.y) &&
- (ball.frame.origin.y <= player.frame.origin.y + 20)
- )
- ) {
- [self endGame];
- }
- else {
- [self endGame];
- }
Danke im Voraus