2016-11-12 3 views
0

so folgte ich Retro-Hühner-Tutorial online, wie man ein 2D-Spiel auf Android Studio und ich habe über ein Problem laufen und ich habe versucht, es herauszufinden, aber ich kann einfach nicht scheint eine Lösung zu finden. Das Problem trat auf seinem zweiten Video (https://www.youtube.com/watch?v=Rliwg0sELJo) auf, wo er seinen Code ausführt und ein Rechteck auf dem Bildschirm erscheint, mit dem er sich bewegen kann. Für mich erscheint das Rechteck aus irgendeinem Grund nicht auf der Leinwand, es ist nur eine leere Leinwand, obwohl ich genau den gleichen Code wie er habe (ich bin zurückgegangen und überprüft).Kann nicht zeichnen Rechteck auf Leinwand [Android Studio Game]

Manchmal manchmal meine Anwendung auch so und gibt mir Fehler starten doesnt (ich die neueste SDK-Version und alles haben):

Cold swapped changes. 
$ adb shell am start -n "com.example.ridhavraj.stardrifter/com.example.ridhavraj.stardrifter.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 
Connected to process 3319 on device emulator-5554 
W/System: ClassLoader referenced unknown path: /data/app/com.example.ridhavraj.stardrifter-2/lib/x86 
I/InstantRun: Instant Run Runtime started. Android package is com.example.ridhavraj.stardrifter, real application class is null. 
W/System: ClassLoader referenced unknown path: /data/app/com.example.ridhavraj.stardrifter-2/lib/x86 
I/OpenGLRenderer: Initialized EGL, version 1.4 
D/OpenGLRenderer: Swap behavior 1 

        [ 11-11 20:20:52.858 3319: 3343 D/   ] 
        HostConnection::get() New Host Connection established 0xaee13300, tid 3343 
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 3343 (Thread-5) 

     [ 11-11 20:20:53.138 1214: 1214 W/   ] 
     debuggerd: handling request: pid=3319 uid=10072 gid=10072 tid=3343 
Application terminated. 

Hier ist der Code, den ich aus dem Video gemacht haben:

[Gameobject Interface]

package com.example.ridhavraj.stardrifter; 

import android.graphics.Canvas; 

public interface GameObject { 
    public void draw(Canvas canvas); 
    public void update(); 
} 

[MainActivity Klasse]

package com.example.ridhavraj.stardrifter; 

import android.os.Bundle; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.pm.ActivityInfo; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

public class MainActivity extends Activity { 



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

     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(new GamePanel(this)); 
    } 

} 

[Mainthread Klasse]

package com.example.ridhavraj.stardrifter; 

import android.graphics.Canvas; 
import android.provider.Settings; 
import android.view.SurfaceHolder; 

public class MainThread extends Thread{ 

    public static final int MAX_FPS = 30; 
    private double averageFPS; 
    private SurfaceHolder surfaceHolder; 
    private GamePanel gamePanel; 
    private boolean running; 
    public static Canvas canvas; 

    public void setRunning(boolean running) 
    { 
     this.running = running; 
    } 

    public MainThread(SurfaceHolder surfaceHolder, GamePanel gamePanel) 
    { 
     super(); 
     this.surfaceHolder = surfaceHolder; 
     this.gamePanel = gamePanel; 
    } 

    @Override 
    public void run() 
    { 
     long startTime; 
     long timeMillis = 1000/MAX_FPS; 
     long waitTime; 
     int frameCount = 0; 
     long totalTime = 0; 
     long targetTime = 1000/MAX_FPS; 

     while(running) 
     { 
      startTime = System.nanoTime(); 
      canvas = null; 

      try 
      { 
       canvas = this.surfaceHolder.lockCanvas(); 
       synchronized (surfaceHolder) 
       { 
        this.gamePanel.update(); 
        this.gamePanel.draw(canvas); 
       } 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      finally 
      { 
       if (canvas != null) 
       { 
        try 
        { 
         surfaceHolder.unlockCanvasAndPost(canvas); 
        } 
        catch (Exception e) 
        { 
         e.printStackTrace(); 
        } 
       } 

      } 

      timeMillis = (System.nanoTime()-startTime)/1000000; 
      waitTime = targetTime - timeMillis; 

      try 
      { 
       if (waitTime > 0) 
       { 
        this.sleep(waitTime); 
       } 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 

      totalTime += System.nanoTime() - startTime; 
      frameCount++; 
      if (frameCount == MAX_FPS) 
      { 
       averageFPS = 1000/((totalTime/frameCount)/1000000); 
       frameCount = 0; 
       totalTime = 0; 
       System.out.println(averageFPS); 
      } 
     } 
    } 

} 

[Gamepanel Klasse]

package com.example.ridhavraj.stardrifter; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Point; 
import android.graphics.Rect; 
import android.view.MotionEvent; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class GamePanel extends SurfaceView implements SurfaceHolder.Callback { 

    private MainThread thread; 

    private Player player; 
    private Point playerPoint; 

    public GamePanel(Context context) 
    { 
     super(context); 

     getHolder().addCallback(this); 

     thread = new MainThread(getHolder(), this); 

     player = new Player(new Rect(100,100,200,200), Color.rgb(255,0,0)); 
     playerPoint = new Point(150,150); 

     setFocusable(true); 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder Holder, int format, int width, int height) 
    { 

    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) 
    { 
     thread = new MainThread(getHolder(), this); 
     thread.setRunning(true); 
     thread.start(); 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) 
    { 
     boolean retry = true; 
     while(true) 
     { 
      try 
      { 
       thread.setRunning(false); 
       thread.join(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      retry = false; 
     } 
    } 

    public boolean onTouchEvent(MotionEvent event) 
    { 
     switch (event.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
      case MotionEvent.ACTION_MOVE: 
       playerPoint.set((int)event.getX(), (int)event.getY()); 
     } 
     return true; 
     //return super.onTouchEvent(event); 
    } 

    public void update() 
    { 
     player.update(playerPoint); 
    } 

    @Override 
    public void draw(Canvas canvas) 
    { 
     super.draw(canvas); 

     canvas.drawColor(Color.WHITE); 
     player.draw(canvas); 
    } 
} 

[Spieler Klasse]

package com.example.ridhavraj.stardrifter; 

import android.graphics.Paint; 
import android.graphics.Point; 
import android.graphics.Canvas; 
import android.graphics.Rect; 

public class Player implements GameObject{ 

    private Rect rectangle; 
    private int color; 

    public Player(Rect rectangle, int Color) 
    { 
     this.rectangle = rectangle; 
     this.color = color; 
    } 

    @Override 
    public void draw(Canvas canvas) 
    { 
     Paint paint = new Paint(); 
     paint.setColor(color); 
     canvas.drawRect(rectangle, paint); 
    } 

    @Override 
    public void update() 
    { 

    } 

    public void update(Point point) 
    { 
     //l,t,r,b 
     rectangle.set(point.x-rectangle.width()/2, point.y-rectangle.height()/2, point.x+rectangle.width()/2, point.y+rectangle.height()/2); 

    } 
} 

ich Ahnung nicht, was ich falsch mache, würde jede mögliche Hilfe sein sehr geschätzt.

Antwort

0

Nun stellte sich heraus, Jungs, ich bin zurückgeblieben, ein Tippfehler in der Spielerklasse war

privaten Rect Rechteck; private Int Farbe;

public Player(Rect rectangle, int Color [THIS SHOULD BE 'color' and not 'Color') 
{ 
    this.rectangle = rectangle; 
    this.color = color; 
} 
Verwandte Themen