2016-11-12 3 views
0

, поэтому я следил за учебником по ретро-цыплятам в Интернете о том, как сделать 2d-игру на студии Android, и я столкнулся с проблемой, и я попытался понять это, но я просто не могу казалось бы, найти решение. Проблема возникла на его втором видео (https://www.youtube.com/watch?v=Rliwg0sELJo), где он запускает свой код, и на экране появляется прямоугольник, который он может перемещать. Для меня прямоугольник не появляется на холсте по какой-то причине, это просто пустой холст, хотя у меня есть тот же самый код, что и он (я вернулся и проверил).Невозможно нарисовать прямоугольник на холсте [Android Studio Game]

Иногда мое приложение иногда оленья кожа даже запускает и дает мне ошибку, как это (я имею последнюю версию SDK и все):

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. 

Вот код, который я сделал из видео:

[GameObject Интерфейс]

package com.example.ridhavraj.stardrifter; 

import android.graphics.Canvas; 

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

[MainActivity Класс]

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 Класс]

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 Класс]

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); 
    } 
} 

[Player Class]

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); 

    } 
} 

Я не понятия, что я делаю неправильно, любая помощь будет очень оценили.

ответ

0

Ну Оказывается, ребята, я отсталый, была опечатка в классе игрока

частный Rect прямоугольник; закрытый цвет int;

public Player(Rect rectangle, int Color [THIS SHOULD BE 'color' and not 'Color') 
{ 
    this.rectangle = rectangle; 
    this.color = color; 
} 
Смежные вопросы