2013-03-14 2 views
1

J'ai besoin d'aide parce que quand je veux appliquer display.getWidth() et display.getHeight(), il n'y a pas d'erreurs dans Eclipse mais quand je veux le lancer sur un périphérique virtuel, l'application se bloque (L'application s'est arrêtée de manière inattendue ...)Demande écrasé sur getHeight et 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

Merci à l'avance (Im français, donc s'il vous plaît utiliser des mots simples)

EDIT 1

Comme ça?

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; 

Ici je reçois 3 erreurs: La méthode setContentView (int) dans l'activité de type n'est pas applicable pour les arguments (affichage)

Et 2 fois: affichage ne peut être résolu

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 

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

EDIT 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

mouvement 'display = getWindowManager() getDefaultDisplay(); méthode' l'intérieur onCreate de l'activité après 'setContentView' –

+0

peut vous envoyer le journal des erreurs.? –

+0

Ok, regardez l'édition s'il vous plaît – NicMer

Répondre

1

Vous ne pouvez pas utiliser DisplayManager pour obtenir toute l'information que vous voulez qu'après votre Activity a été créé.

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

Je reçois des erreurs, regardez le Edit 2 s'il vous plaît, les erreurs sur la partie suivante – NicMer

+0

Exactement quelles erreurs obtenez-vous? –

+0

L'affichage ne peut pas être résolu en un type; Erreur de syntaxe, insérez "}" pour compléter MethodBody; et toutes mes variables ne sont pas résolues (regardez l'édition 2 et coupez et passé ayou verra) – NicMer

1

Vous ne serez pas obtenir la largeur et la hauteur jusqu'à ce que l'écran est mise au point. Essayez ceci:

@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

Regardez l'édition 3 s'il vous plaît, j'ai eu beaucoup d'erreurs comme édition 2 – NicMer

Questions connexes