Hilfe beim Projekt omg ich bin so dumm

  • 3 Antworten
  • Letztes Antwortdatum
Jaiel

Jaiel

Dauer-User
235
Hey mein Name ist Jaiel und ich hab ne dumme frage:

Erst mal ein paar Hintergrund infos:

Habe mit 19 während der asubildung einen ersten Kontakt zu C++ gehabt, ging aber nicht weit über Konsolen programme und ein paar minispiele mit circles und rects hinaus(pacman der kugeln frisst ohne hindernisse oder gamewelt einfach auf einer schwarzen fläche).

dann war lange Zeit pause udn jetzt habe ich mich vor 3 monaten entschieden apps mit android zu programmieren.

Bin gerade dabei ene kleine app zu erstellen ala 80er 2D shooter ... ganz simpel und endlos und so.

Es gibt folgende objekte zur zeit:
eine Vaterkalsse namens MovObj
Eine Klasse Enemy die von der Vaterklasse erbt
Eine Klasse Defender die auch von der Vaterklasse erbt
dann halt die Klassen:
-Defendershot(schüsse des defenders)
-Normalshot(es gibt einen normalEnemy)
-Missile(die benutzt der Bomber enemy)
an objekten generiere ich:
1 spacedefender (erbt von Defender, hat drei shoot modi)
5 Kamikaze(Enemy, fliegt auf defender zu)
5 Bomber(schießt auf den Defender Missiles ab) beinhaltet ein missile objekt, die er abschießt
5 Normal(schießt wie der Defender einfach gerade schüsse anch vorne)beinhaltet 10 NormalShots die er abschießt und zwar nach vorne

SO!!!

Ich baue jetzt schon seit 1 woche an dieser (blöden scheiß einfachen) sache nun schon rum und seit egstern bin ich an dem punkt wo ich stagniere udn nciht weiter weiß.

Mein Problem ist zur Zeit GANZ EINFACH DIE FU***** png files auf der app darzustellen.

also ihr seht ich bin ein richtiger noob zur zeit:

Mein Konzept der App ist einfach :

Eine Einstiegsactivity(Menü mit den Buttons "Spiel", "Einstellungen","keinahnungsonstnochwas...Highscore?")
Eine Gameactivity ...und der Rest kommt später.

(Ich verzweifle dass ich shcon seit ner woche daran sitze, wollte es "übers Wochenende" zu ende kriegen....nix da)

Ok die Gameactivity macht zur Zeit nur das:

Code:
public class GameActivity extends Activity{
	/**
	 * irgendein javadoc shit 
	 */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		GameThread gt=new GameThread();
		gt.run();
	}
}

also startet den Game thread:
der tut einfach nur das:

instanziert alle objekte die benutz werden

Code:
public void run()
	{
		/**
		 * instances of the classes
		 */
		Defender defender=new Defender();

		Normal normal[]=new Normal[enemyCount];
		Kamikaze kamikaze[]=new Kamikaze[enemyCount];
		Bomber bomber[]=new Bomber[enemyCount];
		for(int i=0;i<enemyCount;i++)
		{
			normal[i]=new Normal();
			kamikaze[i]=new Kamikaze();
			bomber[i]=new Bomber();
		}

dann gehts auch schon ind en Game loop:

Code:
//------------Modell-------------------
			
			////////////////////////////moving the objects////////////////////////////////
			//move the defender and call shoot() method
			defender.moveDefender(delTime);
			defender.shoot();
			
			//move the enemies and call the respective shoot() methods
			for(int i=0;i<enemyCount;i++)
			{
				if(!normal[i].isDestroyed)
				{normal[i].moveNormal();normal[i].shoot();}
				if(!kamikaze[i].isDestroyed)
				kamikaze[i].moveKamikaze(defender.getPosX(),defender.getPosY(),delTime);
				if(!bomber[i].isDestroyed)
				{bomber[i].moveBomber(delTime);bomber[i].shootMissile();}
			}
			
			//move the missiles
			for(int i=0;i<enemyCount;i++)
				if(!bomber[i].missile.isDestroyed)
					bomber[i].missile.moveMissile(defender.getPosX(), defender.getPosY(), delTime);
			
			//move the shots of the defender
			for(int i=0;i<defender.defenderShotCount;i++)
			{
				if(!defender.defenderShot[i].isDestroyed)defender.defenderShot[i].moveDefenderShot(delTime);
			}
			
			//move the shots of the normal enemy
			for(int i=0;i<enemyCount;i++)
			for(int j=0;j<normal[i].normalShotCount;j++)
			{
				if(!normal[i].normalShot[j].isDestroyed)normal[i].normalShot[j].moveNormalShot(delTime);
			
////////////////////////////////collision test//////////////////////////////
			
			//collision with the boundaries of the screen
			
			
			//collision of the defender with the objects
			
			//collision of the objects with the defender's shots
			
			
			
			//-------------View--------------------
			
			
			
			
			
			//----------Controller-----------------
			
			//before game loop continues
			for(;System.currentTimeMillis()-oldTime<40;);
			delTime=System.currentTimeMillis()-oldTime;
			oldTime=System.currentTimeMillis();}

ich hab da paar sachen noch nciht implementiert

die ganzen logiken sind in den jeweiligen klassen impementiert also so a la jedes Objekt lümemrt sich um sich selbst und so

naja ok

die stelle wo collision test noch hinkommt da werde ich ienfach prüfen ob sich die positionen der jeweiligen onjekte überschneiden und die run methode setzt einfach die HP's der Enemies oder des Defender einfach um einen gewissen wert runter und zerstört die schüsse falls sie treffen oder aus dem bildschirm fliegen

so alles schön und gut:
zuerst werden die neuen positionen der objekte berechent
dann folgt eine (professionelle*lach*:lol::lol::lol:) kollisionsabfrage
die "gamewelt" setzt bei kollision den wert isDestroyed der jew. zerstörten objekte auf true(isDestroyed=true)

so jetzt mein unwissen:

ich hab die positionen vond en objekten und möchte nun das frame neu zeichnen und zwar logischerweise mit den objekten die nich zerstört sind!!!


ALSO MEINE FRAGE IST EIGENLTICH:

Wie zeichne ich auf das aktuelle Fenster die .png Bilder auf den entsprechenden Positionen?



ganz einfach!!!!!!!!!!!!!!!!!!!!!!!!
ich habe erst angefangen mcih mit 2d Bibliotheken zu befassen den eine tag aber habe gemerkt dass ich die nciht brauche da ich ja sleber schond ie updates berechne und die kollisionen auchvgleich mit berechne und würde gerne auch das rendern noch hinterher amchen.

Ich möchte ganz einfach dieses Schema haben in meiner game loop und ich finde es genügt auch für diese game:

Positionen updaten
Kollisionen berechnen
Zeichnen
Warten falls 40 ms(25fps) noch nicht vorüber sind
und wieder von vorne anfangen falls Defender noch "lebt"


ok danke für jede hilfe und respkt dass du das heir zu ende gelsen hast

Außerdem entschuldige ich mcih für mien rechtschreibung sowie Gorß- und kleinschreibung


Vielen dank euer Jaiel!!!

Der ursprüngliche Beitrag von 21:44 Uhr wurde um 21:53 Uhr ergänzt:

und nchwas nur so nebenbei ich benutze sehr oft den System.currentTimeMillis(), ergibt das vllt einen großen overhead? uund findet ihr eine for loop einzubaune die ncihts tut bis 40 ms vorbei sind sinnvoll oder kann man den thread so lange schlafen legen(sleep()) bis diese zeit verstrichen sit oder amcht es keinen untrerschied=?
 
Hi, ich habe mir jetzt nicht deinen ganzen Text durchgelesen, aber du solltest nicht nur auf deine Rechtschreibung achten, sondern auf deine TIPPFEHLER! Die sind echt schlimm.
Ich habe in den letzten Jahren ca. 15 Apps programmiert. Ich empfehle dir ein 2D-Framework wie Cocos2dx.
Dort kannst du sogar in C++ programmieren und es läuft auf iOs und Android ohne große Probleme.

Edit: Und dein Titel ist auch nicht den Forenrichtlinien entsprechend.
 
Ich hab selber noch nie ein komplettes Spiel entwickelt, deshalb ist der folgende Code ungetestet und nur meine Theorie. Wenn du keine Library verwenden willst, würde ich es nach meinem aktuellen Kenntnisstand etwa so angehen:

  1. Du hast in deiner Activity eine SurfaceView, wo du draufzeichnen willst
  2. Beim erstellen des GameThreads gibts du eine Referenz auf die SurfaceView oder den SurfaceHolder mit:

    Code:
    //Activity
    
    new GameThread(mySurfaceView.getHolder());

    Code:
    //GameThread
    
    private SurfaceHolder surfaceHolder;
    
    public GameThread(SurfaceHolder holder) {
       surfaceHodler = holder;
    }
  3. Im Thread lockst du den Canvas und zeichnest:
    Code:
    Canvas canvas = surfaceHolder.lockCanvas();
    
    if (canvas != null) {
    
        //Variante 1: Direkt auf den Canvas zeichnen
        canvas.drawBitmap(...);
    
        //Variante 2: Objekte haben jeweils eine eigene Draw-Methode
        bomber.draw(canvas);
    
        surfaceHolder.unlockCanvasAndPost(canvas);
    }

Wie du die Bilder überhaupt in der App lädst, kommt etwas drauf an, wo sie liegen. Ein Beispiel wäre so (sollte auch für PNGs funktionieren):
Code:
Bitmap img = BitmapFactory.decodeFile(fileName);
 
danke für die antworten

Zoopa vielen Dank für deine Antwort ich seh jetzt schon viel klarer...so werde ich das amchen
Danke danke danke!!!
 
Zuletzt bearbeitet:

Ähnliche Themen

4
Antworten
10
Aufrufe
1.081
jogimuc
J
Zurück
Oben Unten