2013-03-14 3 views
1

Мне нужна помощь, потому что когда я хочу применить display.getWidth() и display.getHeight(), ошибок в Eclipse нет, но когда я хочу запустить его на виртуальном устройстве, авария приложения (приложение неожиданно остановилось ...)Приложение разбилось на getHeight и getWidth

public class GameState extends Activity { 

//Largeur et hauteur de l'écran 
Display display = getWindowManager().getDefaultDisplay(); 
int _screenWidth = display.getWidth(); 
int _screenHeight = display.getHeight(); 


//La balle 
final int _ballSize = 10; 
int _ballX = _screenWidth/2; int _ballY = _screenHeight/2; 
int _ballVelocityX = 2;  int _ballVelocityY = 4; 

//Les barres 
final int _batLength = 75; final int _batHeight = 10; 
int _topBatX = (_screenWidth/2) - (_batLength/2); 
final int _topBatY = 10; 
int _bottomBatX = (_screenWidth/2) - (_batLength/2); 
final int _bottomBatY = _screenHeight - 20; 

Etc

заранее спасибо (Im французский поэтому, пожалуйста, используйте простые слова)

EDIT 1

Нравится?

public class GameState extends Activity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Display display = getWindowManager().getDefaultDisplay(); 
    setContentView(display);} 

//Largeur et hauteur de l'écran 
int _screenWidth = display.getWidth(); 
int _screenHeight = display.getHeight(); 


//La balle 
final int _ballSize = 10; 
int _ballX = _screenWidth/2; int _ballY = _screenHeight/2; 
int _ballVelocityX = 2;  int _ballVelocityY = 4; 

Здесь я получаю 3 ошибки: Метод setContentView (INT) в типе деятельности не применяется для аргументов (Display)

И 2 раза: дисплей не может быть решена

03-14 16:29:44.655: E/AndroidRuntime(538): FATAL EXCEPTION: main 
03-14 16:29:44.655: E/AndroidRuntime(538): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nicmer.pong/com.salocincreations.pong.P1_vs_P1}: android.view.InflateException: Binary XML file line #8: Error inflating class com.salocincreations.pong.GameView 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.os.Looper.loop(Looper.java:123) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.app.ActivityThread.main(ActivityThread.java:3683) 
03-14 16:29:44.655: E/AndroidRuntime(538): at java.lang.reflect.Method.invokeNative(Native Method) 
03-14 16:29:44.655: E/AndroidRuntime(538): at java.lang.reflect.Method.invoke(Method.java:507) 
03-14 16:29:44.655: E/AndroidRuntime(538): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-14 16:29:44.655: E/AndroidRuntime(538): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-14 16:29:44.655: E/AndroidRuntime(538): at dalvik.system.NativeStart.main(Native Method) 
03-14 16:29:44.655: E/AndroidRuntime(538): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class com.salocincreations.pong.GameView 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
03-14 16:29:44.655: E/AndroidRuntime(538): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.app.Activity.setContentView(Activity.java:1657) 
03-14 16:29:44.655: E/AndroidRuntime(538): at com.salocincreations.pong.P1_vs_P1.onCreate(P1_vs_P1.java:20) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
03-14 16:29:44.655: E/AndroidRuntime(538): ... 11 more 
03-14 16:29:44.655: E/AndroidRuntime(538): Caused by: java.lang.reflect.InvocationTargetException 
03-14 16:29:44.655: E/AndroidRuntime(538): at java.lang.reflect.Constructor.constructNative(Native Method) 
03-14 16:29:44.655: E/AndroidRuntime(538): at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
03-14 16:29:44.655: E/AndroidRuntime(538): at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
03-14 16:29:44.655: E/AndroidRuntime(538): ... 21 more 
03-14 16:29:44.655: E/AndroidRuntime(538): Caused by: java.lang.NullPointerException 
03-14 16:29:44.655: E/AndroidRuntime(538): at com.salocincreations.pong.GameState.<init>(GameState.java:12) 
03-14 16:29:44.655: E/AndroidRuntime(538): at com.salocincreations.pong.GameThread.<init>(GameThread.java:19) 
03-14 16:29:44.655: E/AndroidRuntime(538): at com.salocincreations.pong.GameView.<init>(GameView.java:23) 
03-14 16:29:44.655: E/AndroidRuntime(538): ... 24 more 

РЕДАКТИРОВАТЬ 2

package com.salocincreations.pong; 

import android.app.Activity; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.os.Bundle; 

public class GameState extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.p1_vs_p1); 

    Display display = getWindowManager().getDefaultDisplay(); 
    int _screenWidth = display.getWidth(); 
    int _screenHeight = display.getHeight(); 


    //La balle 
    final int _ballSize = 10; 
    int _ballX = _screenWidth/2; int _ballY = _screenHeight/2; 
    int _ballVelocityX = 2;  int _ballVelocityY = 4; 

    //Les barres 
    final int _batLength = 75; final int _batHeight = 10; 
    int _topBatX = (_screenWidth/2) - (_batLength/2); 
    final int _topBatY = 10; 
    int _bottomBatX = (_screenWidth/2) - (_batLength/2); 
    final int _bottomBatY = _screenHeight - 20; 

    public GameState() 
    { 
    } 

    //The update method 
    public void update() { 

    _ballX += _ballVelocityX; 
    _ballY += _ballVelocityY; 

    //DEATH! 
    if(_ballY > _bottomBatY + 10 || _ballY < 0)   
    {_ballX = 100; _ballY = 100;}//Collisions with the goals 

    if(_ballX > _screenWidth || _ballX < 0) 
       _ballVelocityX *= -1; //Collisions with the sides  

    if(_ballX > _topBatX && _ballX < _topBatX+_batLength && _ballY - 16 < _topBatY)   
        _ballVelocityY *= -1; //Collisions with the bats  

    if(_ballX > _bottomBatX && _ballX < _bottomBatX+_batLength 
        && _ballY + 16 > _bottomBatY) 
          _ballVelocityY *= -1; 
    } 

    public boolean surfaceTouched(float posX, float posY) { 
     _topBatX = (int) posX; 
     _bottomBatX = (int) posX; 

     return true; 
     } 


    //the draw method 
    public void draw(Canvas canvas, Paint paint) { 

    //Clear the screen 
    canvas.drawRGB(0, 0, 0); 

    //set the colour 
    paint.setARGB(200, 0, 200, 700); 

    //draw the ball 
    canvas.drawRect(new Rect(_ballX,_ballY,_ballX + _ballSize,_ballY + _ballSize), 
           paint); 

    //draw the bats 
    canvas.drawRect(new Rect(_topBatX, _topBatY, _topBatX + _batLength, 
              _topBatY + _batHeight), paint); //top bat 
    canvas.drawRect(new Rect(_bottomBatX, _bottomBatY, _bottomBatX + _batLength, 
              _bottomBatY + _batHeight), paint); //bottom bat 

     // Nous allons dessiner nos points par rapport à la résolution de l'écran 
     int iWidth = canvas.getWidth(); // Largeur 
     int iHeight = canvas.getHeight(); // Hauteur 

     // Affecter une couleur de manière aléatoire 
      paint.setARGB(255, 500, 500, 500); 
      // Définir l'épaisseur du segment 
      paint.setStrokeWidth (2); 
      // Puis dessiner nos points dans le cavenas 
      canvas.drawLine(0, iHeight/2, iWidth, iHeight/2, paint);  
      canvas.drawCircle(iWidth/2, iHeight/2, 50, paint); 
     }    
    } 

РЕДАКТИРОВАТЬ 3

package com.salocincreations.pong; 

import android.app.Activity; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Rect; 

public class GameState extends Activity { 
    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    Display display = getWindowManager().getDefaultDisplay(); 
    int _screenWidth = display.getWidth(); 
    int _screenHeight = display.getHeight();; 


    //La balle 
    final int _ballSize = 10; 
    int _ballX = _screenWidth/2; int _ballY = _screenHeight/2; 
    int _ballVelocityX = 2;  int _ballVelocityY = 4; 

    //Les barres 
    final int _batLength = 75; final int _batHeight = 10; 
    int _topBatX = (_screenWidth/2) - (_batLength/2); 
    final int _topBatY = 10; 
    int _bottomBatX = (_screenWidth/2) - (_batLength/2); 
    final int _bottomBatY = _screenHeight - 20; 

    public GameState() 
    { 
    } 

    //The update method 
    public void update() { 

    _ballX += _ballVelocityX; 
    _ballY += _ballVelocityY; 

    //DEATH! 
    if(_ballY > _bottomBatY + 10 || _ballY < 0)   
    {_ballX = 100; _ballY = 100;}//Collisions with the goals 

    if(_ballX > _screenWidth || _ballX < 0) 
       _ballVelocityX *= -1; //Collisions with the sides  

    if(_ballX > _topBatX && _ballX < _topBatX+_batLength && _ballY - 16 < _topBatY)   
        _ballVelocityY *= -1; //Collisions with the bats  

    if(_ballX > _bottomBatX && _ballX < _bottomBatX+_batLength 
        && _ballY + 16 > _bottomBatY) 
          _ballVelocityY *= -1; 
    } 

    public boolean surfaceTouched(float posX, float posY) { 
     _topBatX = (int) posX; 
     _bottomBatX = (int) posX; 

     return true; 
     } 


    //the draw method 
    public void draw(Canvas canvas, Paint paint) { 

    //Clear the screen 
    canvas.drawRGB(0, 0, 0); 

    //set the colour 
    paint.setARGB(200, 0, 200, 700); 

    //draw the ball 
    canvas.drawRect(new Rect(_ballX,_ballY,_ballX + _ballSize,_ballY + _ballSize), 
           paint); 

    //draw the bats 
    canvas.drawRect(new Rect(_topBatX, _topBatY, _topBatX + _batLength, 
              _topBatY + _batHeight), paint); //top bat 
    canvas.drawRect(new Rect(_bottomBatX, _bottomBatY, _bottomBatX + _batLength, 
              _bottomBatY + _batHeight), paint); //bottom bat 

     // Nous allons dessiner nos points par rapport à la résolution de l'écran 
     int iWidth = canvas.getWidth(); // Largeur 
     int iHeight = canvas.getHeight(); // Hauteur 

     // Affecter une couleur de manière aléatoire 
      paint.setARGB(255, 500, 500, 500); 
      // Définir l'épaisseur du segment 
      paint.setStrokeWidth (2); 
      // Puis dessiner nos points dans le cavenas 
      canvas.drawLine(0, iHeight/2, iWidth, iHeight/2, paint);  
      canvas.drawCircle(iWidth/2, iHeight/2, 50, paint); 
     }    
    } 
+2

движение 'дисплей = getWindowManager() getDefaultDisplay(); 'внутри метода OnCreate активности после' setContentView' –

+0

вы можете отправить сообщение об ошибке журнала.? –

+0

Хорошо, посмотри править пожалуйста – NicMer

ответ

1

Вы не можете использовать DisplayManager, чтобы получить любую информацию, которую вы хотите, пока ваш Activity был создан.

public class GameState extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 

    Display display = getWindowManager().getDefaultDisplay(); 
    int _screenWidth = display.getWidth(); 
    int _screenHeight = display.getHeight(); 


    //La balle 
    final int _ballSize = 10; 
    int _ballX = _screenWidth/2; int _ballY = _screenHeight/2; 
    int _ballVelocityX = 2;  int _ballVelocityY = 4; 

    //Les barres 
    final int _batLength = 75; final int _batHeight = 10; 
    int _topBatX = (_screenWidth/2) - (_batLength/2); 
    final int _topBatY = 10; 
    int _bottomBatX = (_screenWidth/2) - (_batLength/2); 
    final int _bottomBatY = _screenHeight - 20; 

    } 
+0

Я получаю ошибки, смотрю на Редактировать 2, пожалуйста, ошибки на следующей части – NicMer

+0

Точно, какие ошибки вы получаете? –

+0

Дисплей не может быть разрешен к типу; Синтаксическая ошибка, вставить «}» для завершения MethodBody; и все мои переменные не разрешены (посмотрите на редактирование 2 и вырежьте и пропустите ayou увидите) – NicMer

1

Вы не получите ширину и высоту, пока экран не сфокусируется. Попробуйте это:

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
Display display = getWindowManager().getDefaultDisplay(); 
    int _screenWidth = display.getWidth(); 
    int _screenHeight = display.getHeight(); 


    //La balle 
    final int _ballSize = 10; 
    int _ballX = _screenWidth/2; int _ballY = _screenHeight/2; 
    int _ballVelocityX = 2;  int _ballVelocityY = 4; 

    //Les barres 
    final int _batLength = 75; final int _batHeight = 10; 
    int _topBatX = (_screenWidth/2) - (_batLength/2); 
    final int _topBatY = 10; 
    int _bottomBatX = (_screenWidth/2) - (_batLength/2); 
    final int _bottomBatY = _screenHeight - 20; 
} 
+0

Посмотрите на редактирование 3, пожалуйста, у меня появилось много ошибок, так как редактирование 2 – NicMer

Смежные вопросы