Aus mehreren Activitys auf Werte zurückgreifen

  • Antworten:16
Aron Brast
  • Forum-Beiträge: 92

17.09.2014, 20:27:40 via Website

Ich habe eine App, die aus einem Thread, einer Activity und zwei Sprites besteht, ist es möglich Werte, die ich zum Beispiel in einem Sprite verwende auch im anderen zu verwenden ??

Danke schonmal im vorraus :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.09.2014, 20:30:42 via App

Das kommt ganz darauf an wie die Logik aufgebaut ist. Am besten du postest mal relevanten Code.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

17.09.2014, 20:32:33 via Website

Okay einen Moment :)

Antworten
Aron Brast
  • Forum-Beiträge: 92

17.09.2014, 20:37:52 via Website

int x = 0;
int y = 0;
void abprallen() {
if (x + 40 > theGameView.getWidth() - width - xSpeed || x + xSpeed < 40) {
xSpeed = -xSpeed;
}
x = x + xSpeed;
if (y + 40> theGameView.getHeight() - height - ySpeed || y + ySpeed < 0) {
ySpeed = -ySpeed;
}
y = y + ySpeed;
currentFrame = ++currentFrame % BMP_COLUMNS;
}

Diese Methode wird immer in der OnDraw Methode des ersten Sprites aufgerufen, dasselbe habe ich nochmal im anderen Sprite und die Methode für die in einem Sprite die X und Y Werte im anderen brauche will ich halt noch programmieren.

Danke schonmal :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.09.2014, 20:45:23 via App

Du könntest der Klasse getMethoden geben die dqnn die entsprechenden werte zurückgeben. Oder du löst es über statische Variablen..(nicht so schön..)

Ist das Sprite nicht immer die gleiche Klasse und von dieser hast du verschiedene Instanzen?
Dann könntest du nämlich auch eine liste von Instanzen anlegen und es dann über diese Speichern und abrufen.
Das mit dem Thread ist halt so ne sache. Die werte dürfen nur gelesen und nicht geschrieben werden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

17.09.2014, 21:12:28 via Website

Okay, vielen Dank :)

Antworten
Aron Brast
  • Forum-Beiträge: 92

17.09.2014, 21:43:19 via Website

Wie könnte ich es denn realisieren, wenn ich weiterhin nur einen Sprite benutze, aber eines der angezeigten Objekte durch eine Methode bewegen will und die anderen sich unabhängig davon bewegen und, wie kann ich die Kollision zweier angezeigter Objekte hinbekommen ??

Antworten
Marius H.
  • Forum-Beiträge: 6

18.09.2014, 14:09:33 via App

Hey Aron,

Zur Kollision:

du hast 2 Objekte mit postions koordinate und breite und höhe.

if(obj1.x<obj2.x)
if(obj1.x+obj1.breite >= obj2.x && <= obj2.x+obj2.breite)
return true;

if(obj1.x>obj2.x)
if(obj2.x+obj2.breite >= obj1.x && <= .... (wie oben))
return true;

das gleiche dann analog für die y-koordinate ;)

— geändert am 18.09.2014, 14:11:19

Antworten
Aron Brast
  • Forum-Beiträge: 92

18.09.2014, 14:27:17 via Website

Cool, danke :)

Antworten
Fabian Simon
  • Forum-Beiträge: 359

18.09.2014, 14:45:47 via Website

Weiß jetzt nich ob es passt... da nur überfolgen
Aber was grundlegenes...
Statische Objekte habe schon ihren sinn:
Jedoch sollten sie im Normalfall, wenn es sich um eine Klasse handelt von der immer nur ein Object erstellt wird....
Hierfür gibt es ein Entwurfsmuster.
Die nennt sich singleton...

Gruß
Fabian

Antworten
Marius H.
  • Forum-Beiträge: 6

18.09.2014, 15:44:27 via App

@aron

Kein Ding, hab ich doch gerne gemacht ;)

— geändert am 18.09.2014, 15:45:08

Antworten
Aron Brast
  • Forum-Beiträge: 92

18.09.2014, 17:02:52 via Website

@Marius H

Ich habe das ganze mal ausprobiert, doch bei mir scheint ein Fehler vorzuliegen,
also ich habe mehrere Klassen, eine Sprite Klasse, eine GameView Klasse und einen GameLoopThread,
die Sprite Klasse sieht so aus:

import java.util.Random;
import android.graphics.Bitmap;
import android.graphics.Canvas;

public class Sprite {

private int x = 0;
private int y = 0;
private int xSpeed;
private int ySpeed;
private int width;
private int height;
private Bitmap bmp;
private GameView theGameView;

public Sprite(GameView theGameView, Bitmap bmp) {
    this.theGameView = theGameView;
    this.bmp = bmp;
    this.width = bmp.getWidth();
    this.height = bmp.getHeight();
    Random rnd = new Random();
    ySpeed = rnd.nextInt(10) - 4;
    xSpeed = rnd.nextInt(10) - 4;
}

private void abprallen() {
    if (x > theGameView.getWidth() - width - xSpeed || x + xSpeed < 0) {
        xSpeed = -xSpeed;
    }
    x = x + xSpeed;
    if (y > theGameView.getHeight() - height - ySpeed || y + ySpeed < 0) {
        ySpeed = -ySpeed;
    }
    y = y + ySpeed;
}

public void onDraw(Canvas canvas){
    abprallen();
    canvas.drawBitmap(bmp, x, y, null);
}

}

Es werden zwei Bitmaps auf dem Bildschirm angezeigt, die ich in der GameView Klasse definiere:

private Sprite theSprite, theSprite2;

.....

bmp = BitmapFactory.decodeResource(getResources(),
R.drawable.figure);
theSprite = new Sprite(this, bmp);
theSprite2 = new Sprite(this, bmp);

nun möchte ich in der Sprite Klasse prüfen, ob die beiden Bitmaps kollidieren, wie kann ich das schaffen ?

Danke schonmal im vorraus :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

18.09.2014, 17:09:26 via Website

Ab besten über die aktuellen Koordinaten der Elemente.
Da ist aber dabei das Problem, dass du die Elementgröße mitberechnen musst, damit es egal ist wo sich die Sprites berühren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

18.09.2014, 17:12:34 via Website

@Pascal P

Ich glaube ich stehe gerade etwas auf dem Schlauch, wie kann ich die aktuellen Koordinaten der Elemente vergleichen ??
Kannst du vielleicht ein kleines Code Beispiel schreiben ??
Oder es so erklären ??

Vielen Dank schonmal :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

18.09.2014, 17:26:46 via Website

Na ja korrigiert mich wenn das jetzt flasch ist, aber du hast doch x und y koordinaten.
Diese geben die Postioion des Sprites an.
Ich weiss nicht wie genau diese Koordinaten sind deswegen kann ich das gerade nicht genau erklären.

Hier mal meine Idee:

Du hast Koordinaten jedes Sprites, wenn diese werte sich nähern, dann irgendwann behrühren sich vlt. die Sprites.

Behrührung könnte so bestimmt werden:
Wenn Sprite1.x +/- 10 {irgend ein korrekturwert} == sprite2.x +-10
-> Wenn die beiden koordinaten der Sprites im Umkreis von höchtens 20 Koordinatenpunkten (2x10, da plus minus) liegen, behrühren sie sich (meine Festlegung, muss du nachher festlegen welchen höchstabstand die Elemente haben dürfen)

Das gleiche gilt für y.

Wie gesagt, ist nur eine Theorie ob diese gut und verlässlich funktioniert weiss ich nicht..
Zudem ist der Programmieraufwand hoch, da du ja für die x werte die "Korrekturquote" einzeln berechnen musst, da mit keine IF Abrage bekannt ist, die mir eine Value Range von +/- 10 erlaubt

Edit: Gerade noch nen tut dazu gefunden:
http://www.edu4java.com/en/androidgame/androidgame7.html
Das hast du doch auch benutzt.
Code sieht fast gleich aus.

— geändert am 18.09.2014, 17:28:56

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

18.09.2014, 18:05:47 via Website

Ja, bei der Spritekollision im Tutorial geht es allerdings darum, das überprüft wird, ob ein Sprite angeklickt wird.

Trotzdem danke :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

18.09.2014, 18:07:52 via Website

Ja aber nur bei denen, die sich auch berühren

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten