Schwierigkeiten, den Einstieg zu finden

  • 5 Antworten
  • Letztes Antwortdatum
T

Tayfe

Neues Mitglied
6
Ich habe keine Ahnung, wie ich es am besten in Worte fassen soll und ob es dan auch noch verständlich ist, aber ich versuche es einfach mal:

Ich versuche schon seit etwas längerem, den Einstieg in die Android App Programmierung zu schaffen. Ich habe Erfahrungen in der Webprogrammierung und programmiere auch schon einige Jahre mit Hilfe der Unity3D Engine. Bin in beidem überhaupt kein Experte, mache das nur so zum Hobby, aber es reicht für mich.

Irgendwie reizt mich nun doch aber die Programmierung von Android ganz ohne Engine. Es mag vielleicht dämlich klingen, aber was mich daran wirklich reizt ist die Tatsache, dass es einfach zu laufen zu scheint auf den Handys. Ich habe schon seit längerem eine Idee für eine simple Quiz-App, die mich wirklich schon seit Monaten juckt und die ich gerne verwirklichen würde. Doch ich habe das Gefühl, dass eine ganze 3D Engine im Hintergrund einfach zu viel ist, um eine simple Quiz-App zu spielen. Wenn der Nutzer nicht gerade einen Egoshooter oder ein 3D Autorennen oder so etwas startet sondern nur eine simple Quiz-App, die man vllt gerade mal 3 Minuten am Stück spielt, dann sollte der Start des Spiels nicht schon 20 oder noch mehr Sekunden in Anspruch nehmen. Das ist vielleicht etwas übertrieben, aber es fühlt sich für mich einfach falsch an. Das ist also mein Anreiz, in die "richtige" Android Programmierung einzusteigen.

Doch genau da scheitere ich auch momentan. Es ist schwer zu sagen, was das eigentliche Problem ist, aber irgendwie irritiert es mich unglaublich total, dass es scheinbar 2 verschiedene Arten von Tutorials gibt oder vielleicht gar Programmierarten?
Die einen Tutorials die fangen an mit dem WYSIWYG-Editor und setzen Buttons schön geordnet auf den Bildschirm, ändern die Hintergrundfarbe, ändern mal vom List zum Relative Layout. Es kommt mir vor, als ob sie fast jeden einzelnen Button, den man theoretisch in die App ziehen könnte, vorstellen und erklären.
Dem gegenüber finde ich Tutorials, die diesen Editor überhaupt gar nicht nutzen. Da wird von Grund auf alles selbst programmiert, wobei diese Tutorials meist auf Spieleprogrammierung aus zu sein scheinen.

Jetzt weiß ich nicht, welche Art die "richtige" ist. Irgendwie werde ich den Gedanken nicht los, dass Android Studio ja der offizielle Editor ist. Und da dieser Editor nunmal auch die Möglichkeit bietet, die App zu einem großen Teil per Drag&Drop zu gestalten, hatte ich am Anfang den Gedanken, dass es ein muss ist, diesen Editor zu nutzen. Vermutlich liege ich damit total falsch, aber irgendwie werde ich den Gedanken nicht los, dass die Nutzung dieses Editors die "richtige" Methode ist. Doch gleichzeitig finde ich diesen Editor ziemlich schwachsinnig, wenn man nicht gerade eine absolut komplett simple App bauen möchte. Und da meines ja eher in Richtung Spieleprogrammierung gehen sollte, sehe ich in diesen anderen Tutorials keinen großen Nutzen für mich.

Um vielleicht noch ein wenig zu spezifizieren, was genau ich eigentlich erreichen will: Ich möchte später gerne eine simple App programmieren, bei der man Zahlen in die richtige Reihenfolge bringen muss. Sei es durch klicken, ziehen oder sonst was. Das ganze könnte man bestimmt auch relativ einfach mit diesem WYSIWYG-Editor machen, doch ich will schon ein ordentliches Design. Ich denke dabei immer ein wenig an das Spiel 94%. Die eigentliche Spielmachanik zu programmieren ist total simple. Doch das Design ist ja auch Teil des Spiels und dieses scheint mir doch schon ein wenig fortschrittlicher zu sein. Und in diese Richtung möchte ich auch gerne gehen. Und jetzt z.B. konkret bei diesem Beispiel haben die ja auch nicht diesen Drag&Drop Editor genutzt nehme ich an sondern das Design wirklich programmiert.

So, ich habe keine Ahnung, ob meine Probleme auch nur auf irgendeine Weise verständlich oder nachvollziehbar sind^^ Doch ich hoffe, dass ihr mir irgendwie aus meinem Problem heraus helfen könnt, damit ich endlich mal anfangen kann, durchzustarten. Denn aktuell fange ich immer irgendwelche Tutorials an. Diese haben dann meistens schon wieder einen klein wenig anderen Ansatz als die vorherigen und ich breche wieder ab...
 
Da ist leider das Problem, dass ich zur Zeit kein Geld habe für solche Bücher oder Online-Kurse. Ich bin momentan als "armer" freiwilliger Weltwärtsler unterwegs und habe nicht die Möglichkeit, bei einem täglichen "Einkommen" von 5€ mir solch ein Buch zu kaufen.

Wobei du vermutlich Recht hast, dass solch ein Buch einige meiner Zweifel beseitigen und mir einen soliden Einstieg geben könnte. Vielleicht sollte ich diese Möglichkeit im Hinterkopf behalten bis ich wieder in Deutschland bin und dort dann auch wieder ein wenig mehr mit Hilfe eines Studentenjobs verdienen kann.
 
Hallo Willkommen in der Android Welt.

Der Editor hilft die nur Position und Größen zu setzen und trägt alles in xml dateien ein. Man muss troptzdem den Code dafür schrieben zum beispiel Buttons müssen trotzdem eine Logik bekommen. Die Activity will gefüllt werden usw.

Da du schon programmieren kannst geht es hier auch schon los für dich : Get Started | Android Developers (eine kleine Einführung aber muss man cniht elsen)

Das hier einfach mal anfangen da wird alles wichtige abgedeckt:

Getting Started | Android Developers

Ich hab mit Spieleprogrammierung angefangen udn mcih erstmal cnihht mit XML beschäftigt. Ich habe einfach eine "Leinwand" in meiner App und die fülle ich.
So wie man es auch mit Java in Swing machen würde kaum ein Unterschied.

Viel Erfolg
 
  • Danke
Reaktionen: Tayfe
Ich hab mit Spieleprogrammierung angefangen udn mcih erstmal cnihht mit XML beschäftigt. Ich habe einfach eine "Leinwand" in meiner App und die fülle ich.
So wie man es auch mit Java in Swing machen würde kaum ein Unterschied.

Ja ich glaube, dass ist auch das, wonach ich suche. Nur war ich mir sie so ganz sicher, ob das auch eine übliche Methode ist, da die Tutorials, die ich bisher meistens gefunden habe, nur von dem Editor gehandelt haben und wie man die Buttons dann dort positioniert und wie man diese dann auch per XML verändern kann und so weiter. Doch das interessiert mich eher weniger. Ich möchte mich ja Richtung Spieleprogrammierung wie schon immer orientieren und z.B. Codes schreiben, bei dem z.B. ein Bild auf den Bildschirm erscheint und dann jede Sekunde um einige % nach links oder oben bewegt wird. So etwas kann man dann erweitern, dass bei einem Touch ein Richtungswechsel statt finden und so weiter. Und wenn ich so etwas erstmal gefunden habe, dann geht es auch schnell zu meiner eigenen App denke ich, denn solche Spielmechaniken und so etwas habe ich ja schon längst verstanden, ich kapiere nur noch nicht ganz, wie ich so etwas in etwa in Android Studio schreibe.
 
Dann ist ein guter Anfang erstmal ein paar Android Basics zu lernen.

Die meisten Tutorials sind nciht speziell für Spiele ausgelegt udn Android bietet viele gute Lösungen um Inhalte darzustellen.

Also fürs erste Kannst du einfach 1 Activity 1 Surfaceviewklasse die einen SurfaceHolder.Callback implementiert und 1 Thread.

Die Activity füllst du mit deinem Surfaceview.
Der Thread enthält die gesamte Spiellogik und das einzige was er amcht ist eine Draw() Methode deiner Wahl aufzurufen die den Canvas lockt und darauf zeichnet.

Ist die straight Forward M;ethode udn easy umzusetzen


cih habe vor einiger Zeit mal ein paar blanks/Schablonen erstellt


hier die jew. Codes(ncoh keine Logik oder so enthalten nur das allernötigste) vielleicht ist das ein guter ansatz für dich:

Die Activity

Code:
package de.jaiel.activities;

import de.jaiel.surfaceviews.PlayMenuView;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;


public class PlayMenuActivity extends Activity{
 
    PlayMenuView pMView;

 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pMView=new PlayMenuView(this);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(pMView);
     
    }
 
}

Die Surfaceview
Code:
package de.jaiel.surfaceviews;

import de.jaiel.threads.PlayMenuThread;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class PlayMenuView extends SurfaceView implements SurfaceHolder.Callback {
 
 
    //__________________________________________//
    PlayMenuThread pMThread;
    SurfaceHolder sHolder;
    Canvas canvas;
 
    //__________________________________________//
    public boolean surfaceReady=false;
 
    /*
     * Constructor
     */
    public PlayMenuView(Context context) {
        super(context);
        sHolder = getHolder();
        sHolder.addCallback(this);
    }
 
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub
     
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        surfaceReady=true;
        startPlayMenuThread();
     
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        surfaceReady=false;
        pMThread.setRunning(false);
        boolean retry = true;
        while(retry)
        {
            try
            {
                pMThread.join();
                retry = false;
            }
            catch(Exception e)
            {}
        }
     
    }
 
    /*
     * Method for the drawing operations.
     */
    public void doDraw()
    {
        try
        {
            canvas = sHolder.lockCanvas();
            synchronized(sHolder)
            {
                pMThread.drawOnCanvas(canvas);
            }
        }
        catch(Throwable t)
        {
            canvas=null;
        }
        finally
        {
            if(canvas!= null)
            {
                sHolder.unlockCanvasAndPost(canvas);
            }
        }
    }
 
 
    /*
     * Method to start the PlayMenuThread. It gets called when the Surface is created
     */
    public int startPlayMenuThread()
    {
        pMThread=new PlayMenuThread(this);
        pMThread.setRunning(true);
        try
        {
                pMThread.start();
                return 0;
        }
        catch(RuntimeException e)
        {
              
        }      
    }

}


Der Thread:
Code:
package de.jaiel.threads;

import de.jaiel.surfaceviews.PlayMenuView;
import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;

public class PlayMenuThread extends Thread{
 
    PlayMenuView pMView;
 
    private boolean isRunning=false;
    long delTime;
    long oldTime;
 
    public PlayMenuThread(PlayMenuView pMView)
    {
        this.pMView=pMView;
     
    }

    public void setRunning(boolean isRunning)
    {
        this.isRunning=isRunning;
    }
 
    @Override
    public void run()
    {
      
        while(isRunning)
        {
            setDeltatime();
            updateSomething(delTime);
            pMView.doDraw();
         
        }
    }


    public void drawOnCanvas(Canvas canvas)
    {
          //Draw operations with Canvas' methods
     }

    public void setDeltaTime()
    {
            if(delTime<30&&oldTime!=0)
            {
                try
                {
                    sleep(30-delTime);
                }
                catch (InterruptedException e)
                {
                    return;
                }
                delTime=System.currentTimeMillis()-oldTime;
            }
            if(delTime>50)delTime=50l;
            oldTime=System.currentTimeMillis();
    }
}


So ungefähr sieht es aus....läuft jedenfalls
 

Ähnliche Themen

F
Antworten
5
Aufrufe
649
swa00
swa00
Zurück
Oben Unten