Erste Spiel App

R

Ratzefummel321

Neues Mitglied
0
Halli Hallo,

und zwar bin ich grad dabei eine kleine Spiele app zu programmieren. Es ist so, dass ich noch anfänger auf dem Gebiet Android und generell Spieleprogrammierung bin...

Aktueller Stand ist, dass ich eine Startacitivity hab mit drei Buttons. Bei druck auf Start gelangt man in die Spielactivity.

Um mich langsam an animationen heranzutasten habe ich ein object von links nach rechts laufen lassen... das klappt auch ganz gut. Aber nachdem ich dem Canvas gleichzeitig einen Background verpasst hab läuft das ganze extrem langsam ab. Klar, es wird daran liegen, dass jedesmal der hintergrund neu gezeichnet werden muss. Hat jemand ne Idee, wie ich da die Performance verbessern kann, weil im fertigen Spiel noch ne ganze menge mehr passieren soll.

Zweite frage ist, wie ich nun diese bewegung mit einem Listener verknüpfen kann. Ziel solles sein, dass die Spielfigur am anfang des spiels unten links auf dem canvas platziert ist und wenn ich links neben die figur drücke soll sich diese immer ein paar pixel nach links bewegen. Wenn ich rechts neben die figur drücke das gleiche nur halt nach rechts....

Hier erstmla meine Klassen:

Das ist die Main-Activity. Hier dürfte alles klar gehen:
Code:
package com.example.flunky;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.os.Build;

public class MainActivity extends ActionBarActivity implements OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(this);
        
   
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

   


    


    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        setContentView(new SpielActivity(this));
        
    }

}

Das ist die Spielactivity:
Code:
package com.example.flunky;

import java.util.concurrent.TimeUnit;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.view.View.OnTouchListener;

public class SpielActivity extends View implements OnTouchListener   {
    
    
   
   
   Bitmap bitmap;
   int x,y;
   
 
    
  

    public SpielActivity (Context context){
        
        
        
        super(context);
        this.setOnTouchListener(this);

        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
        x = 0;
        y = 0;
        
       }


public void onDraw(Canvas canvas){
        Bitmap background = BitmapFactory.decodeResource(getResources(),
                R.drawable.game_background);
        Rect dst = new Rect();
        dst.set(0, 0, canvas.getWidth(), canvas.getHeight());
        canvas.drawBitmap(background, null, dst, null);
        
        if (x < canvas.getWidth()){
            
            x += 10;
        } else {
            x = 0;
        }
        
        Paint p = new Paint();
        canvas.drawBitmap(bitmap, x, y, p);
        invalidate();
        
        
}










    @Override
    public boolean onTouch(View v, MotionEvent event) {
        
            
        return false;
    }
    
}

ich hoffe jemand kann mir ein paar tipps geben....
 
Bei jedem onDraw lädst du die Bilddatei mit BitmapFactory.decodeResource() neu aus dem Speicher und das braucht eben Zeit. Bitmaps lädt man immer vorher und nur 1x. Mach das in der SpielActivity().
Ebenso das Rect. Es muss nicht immer ein neues sein, sondern es reicht eines.

Übrigens bruchst du gar kein Rect, du kannst das Bitmap auch direkt mit drawBitmap(Bitmap, left, top, Paint) zeichnen.
 
Dankeschön erstmal für den Tipp. Jetzt läufts flüssig.

Also ich bin grad echt am verzweifeln....

ich hab keine ahnung, wie ich nun nen listener implemntiere, sodass ich die x und y koordinaten des bildschirmes erfassen kann und damit das bitmap bewegen kann.

eigentlich dürfte das ja keine grosse sache sein, aber ich finde kaum irgendwo hilfreiche Literatur, wo ich sowas erlesen könnte.

Danke schonmal für die Hilfe!
 
die links habe ich mir angesehen....hab aber auch schon selbst bei amazon geguckt und irgendiwe nix passendes gefunden....

Gibt es denn sonst keinen, der in irgendeiner art und weise erfahrung mit meinem problem hat?
 
Erfahrung haben hier viele, aber die Programmierung von Spiele ist ein riesiges Gebiet. Was für ein Spiel willst du denn programmieren?

2D, 3D oder keine Grafik? Mit oder ohne "KI"?


Die Bücher wären schon meine Wahl, wenn ich ein Android Spiel programmieren wollte.
 
Hallo,

ich probiere mehr oder weniger genau das selbe. Bin aber schon ein Stück weiter.

Schau mal hier und lass es laufen:

https://www.android-hilfe.de/forum/android-app-entwicklung.9/app-haengt-nach-einer-weile.553040.html

Problem ist allerdings, wie im Post beschrieben, dass die App nach Pause bzw. Stop nicht wieder so recht anläuft.

Habe das aus einem Buch zusammengestöpselt.

Wenn ich wieder zeit finde, versuche ich es mal mit dem Debugger und sehe, ob ich Fehlermeldungen hier posten kann. Oder du machst das?

Ich denke, das ist genau so ein Framework. wie du es suchst? Ist natürlich noch ganz grob, aber es macht Grafik, Bitmaps, Touch, Sound und etwa 60 fps bei mir.

Ciao

Gerhard
 

Ähnliche Themen

koje71
Antworten
1
Aufrufe
939
swa00
swa00
D
Antworten
3
Aufrufe
460
jogimuc
J
E
Antworten
0
Aufrufe
959
ey6799
E
Zurück
Oben Unten