Sieht jemand den Fehler? Finde meine App nicht auf dem Emulator

  • 3 Antworten
  • Letztes Antwortdatum
D

dankefuereurehilfe

Neues Mitglied
0
Hallo, habe eine App erstellt, aber ich kann die nicht beim Emulator finden? Habe 4 Klassen erstellt und dann noch im res Ordner einfach einen layout ordner und in der eine XML-Datei, die ich noch weiter verwendet habe. Alle Klassen + die XML-Datei habe ich eingefügt.

Finde leider den Fehler nicht.

Flappy-Bird Klasse:

Code:
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;

import java.util.List;

public class FlappyBird {

    // Initialisieren Sie das Flappy Bird-Spielobjekt
    private Bitmap bitmap;
    private int x, y;
    private int velocity;
    private int screenHeight, screenWidth;
    private int gravity;

    public FlappyBird() {
        // Setzen Sie die Anfangsposition und Geschwindigkeit des Flappy Bird-Spielobjekts
        x = 50;
        y = 250;
        velocity = 0;

        // Setzen Sie die Schwerkraft des Flappy Bird-Spielobjekts
        gravity = 3;
    }

    // Zeichnen Sie das Flappy Bird-Spielobjekt
    public void draw(Canvas canvas) {
        Paint paint = new Paint();
        canvas.drawBitmap(bitmap, x, y, paint);
    }

    // Aktualisieren Sie das Flappy Bird-Spiel
    public void update() {
        // Ändern Sie die Höhe des Flappy Bird-Spielobjekts basierend auf der Geschwindigkeit und der Schwerkraft
        y += velocity;
        velocity += gravity;

        // Verhindern Sie, dass das Flappy Bird-Spielobjekt den Bildschirm verlässt
        if (y < 0) {
            y = 0;
        } else if (y > screenHeight - bitmap.getHeight()) {
            y = screenHeight - bitmap.getHeight();
        }
    }

    // Verarbeiten Sie den Flappy Bird-Sprung
    public void jump() {
        // Verringern Sie die Geschwindigkeit des Flappy Bird-Spielobjekts, um es in die Höhe zu befördern
        velocity = -30;
    }

    // Setzen Sie die Bildschirmgröße für das Flappy Bird-Spiel
    public void setScreenSize(int width, int height) {
        screenWidth = width;
        screenHeight = height;
    }
}

Game-View Klasse

Code:
package com.example.flappybird;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class GameView extends View {

    // Initialisieren Sie das Flappy Bird-Spiel und die Röhren
    private FlappyBird flappyBird;
    private List<Tube> tubes = new ArrayList<>();

    // Initialisieren Sie den Zufallszahlengenerator
    private Random random = new Random();

    public GameView(Context context) {
        super(context);
    }

    // Zeichnen Sie das Flappy Bird-Spiel
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // Zeichnen Sie das Flappy Bird-Spielobjekt
        flappyBird.draw(canvas);

        // Zeichnen Sie die Röhren
        for (Tube tube : tubes) {
            tube.draw(canvas);
        }
    }
}

MainActivity Klasse
Code:
package com.example.flappybird;

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

    // Initialisieren Sie das Spielfeld und das Flappy Bird-Spiel
    private GameView gameView;
    private FlappyBird flappyBird;

    // Initialisieren Sie den Timer
    private Timer timer = new Timer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialisieren Sie das Spielfeld
        gameView = findViewById(R.id.game_view);

        // Erstellen Sie ein neues Flappy Bird-Spiel
        flappyBird = new FlappyBird();

        // Setzen Sie den Timer auf eine feste Rate von 30 FPS
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                flappyBird.update();
                gameView.invalidate();
            }
        }, 0, 33);

        // Setzen Sie den OnTouchListener für das Spielfeld, um die Flappy Bird-Sprünge zu verarbeiten
        gameView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                flappyBird.jump();
                return false;
            }
        });
    }
}


Tube Klasse
Code:
package com.example.flappybird;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;

public class Tube {

    // Initialisieren Sie die Röhre
    private Bitmap bitmap;
    private int x, y;
    private int screenWidth;

    public Tube(int screenWidth) {
        // Setzen Sie die Anfangsposition der Röhre
        x = screenWidth;
        y = 0;

        // Setzen Sie die Bildschirmgröße für die Röhre
        this.screenWidth = screenWidth;
    }

    // Zeichnen Sie die Röhre
    public void draw(Canvas canvas) {
        Paint paint = new Paint();
        canvas.drawBitmap(bitmap, x, y, paint);
    }

    // Aktualisieren Sie die Röhre
    public void update() {
        // Verschieben Sie die Röhre nach links
        x -= 10;

        // Wenn die Röhre den Bildschirm verlässt, setzen Sie sie wieder auf die rechte Seite
        if (x < -bitmap.getWidth()) {
            x = screenWidth;
        }
    }
}

activity_main.xml

Code:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.example.flappybird.GameView
        android:id="@+id/game_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


</androidx.constraintlayout.widget.ConstraintLayout>
 
Zuletzt bearbeitet:
Hallo was mir als erstes dazu einfällt ist.

Sind die Activitys auch im manifest eingetragen?

Kompiliert die app auch also läuft der Build Prozess auch ohne fehler durch?
Beiträge automatisch zusammengeführt:

Bei dem ConstraintLayout fehlen mir auch bei dem der Custom View (Widget) die Ankerpunkte.

Wo ist die Klasse Flappybird du hast zweimal MainActivity.
Beiträge automatisch zusammengeführt:

Hier hast du ja auch ein Build gepostet.
Und da wird es das Icon MyAppProjekt sein.

Sieht jemand den Fehler? Finde meine App nicht auf dem Emulator - Android-Developers.de
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: dankefuereurehilfe
@jogimuc Danke für deine Hilfe. Habe aus Versehen Flappybird zwei mal eingefügt.

Bin eigentlich ein Java Entwickler und das ist meine erste App.

Was genau ist das Manifest? Also ich habe einfach bei der Projekterstellung keine Aktivität gewählt, also diese leere und dann einfach diese 4 Klassen erstellt und dann noch ein Ordner layout und eine XML Datei erstellt und den Code da eingegeben. Mehr habe ich nicht gemacht, also das ist das gesamte was ich im Projekt gemacht habe. Ich habe gedacht, dass das so passen würde.

Der BuildProzess läuft ohne Fehler. Ich habe mich auch gefragt, wass diese MyAppProjekt ist, aber da ist nur eine Fenster, wo mann so ein Plus anklicken kann.
 
Zuletzt bearbeitet:
dankefuereurehilfe schrieb:
wass diese MyAppProjekt ist,
Das ist deine App.

Wenn du am Anfang beim new Projekt erstellen eine Basic Activity gewählt ist das deine App.
Ich benutze meisten eine Empty Activity.
Du musst schon eine Auswählen also noch mal neu Aanfangen.


Wie schaut denn deine Layout Datei aus?
Wie heißt die du benutzt

setContentView(R.layout.activity_main);
Ist das auch das was du selber geschrieben hast?

wo füllst du denn die liste





Beiträge automatisch zusammengeführt:

Du willst in der Draw Methode ein Bitmap zeichnen aber hast noch gar kein Objekt davon.

Also wird nicht gezeichnet es wird sogar ein Error kommen NPE.
Das Objekt Paint existiert zwar aber hat das auch eine Farbe, Stiftart…

Dein Layout hat wie schon gesagt keine Ankerpunkte.

Wo oder Wie füllst du denn die Liste Tubes in der View Klasse ?
Die for macht dann somit garnichts.
 
Zuletzt bearbeitet:

Ähnliche Themen

koje71
Antworten
1
Aufrufe
1.081
swa00
swa00
koje71
Antworten
0
Aufrufe
274
koje71
koje71
M
  • merlin1234x
Antworten
1
Aufrufe
1.164
wilco
W
Zurück
Oben Unten