0

この写真に示されているように、画面サイズを思い通りに戻すことができず、少し迷っています... (学習中)

http://imageshack.us/f/708/erreurtaillepong4.png/

http://imageshack.us/f/708/erreurtaillepong5.png/

画面の幅と高さが必要です

助けてください

編集1

尋ねられた私のコードは次のとおりです。

package com.salocincreations.pong;

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

public class GameState {

    //Largeur et hauteur de l'écran
    int _screenWidth = TailleEcran.Measuredwidth;
    int _screenHeight = TailleEcran.Measuredheight;


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

public class TailleEcran extends Activity {


    int Measuredwidth;
    int Measuredheight;
    Point size = new Point();
    WindowManager w = getWindowManager();{

      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2){
            w.getDefaultDisplay().getSize(size);

            Measuredwidth = size.x;
            Measuredheight = size.y; 
          }else{
            Display d = w.getDefaultDisplay(); 
            Measuredwidth = d.getWidth(); 
            Measuredheight = d.getHeight(); 
          }}}

ラインで

int _screenWidth = TailleEcran.Measuredwidth;
int _screenHeight = TailleEcran.Measuredheight;

エラーの内容: 非静的フィールド TailleEcran.Measuredwidth への静的参照を作成できません

非静的フィールド TailleEcran.Measuredheight への静的参照を作成できません

編集2

では、anthropomo、私は書く必要があります ?

        public class GameState {
        // declare variables above here without assignments
        Display display = ((WindowManager)
            context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        DisplayMetrics metrics = new DisplayMetrics();
        display.getMetrics(metrics);

        int pixHeight = metrics.heightPixels;
        int pixWidth = metrics.widthPixels;
    // dp numbers:
        float density  = context.getResources().getDisplayMetrics().density;
        float dpHeight = pixHeight / density;
        float dpWidth  = pixWidth / density;
public GameState(Context context){
//all the rest of my class
    }

}
4

3 に答える 3

0

Context.getResources()Resources.getDisplayMetricsは次のように使用できます。

DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

その後、あなたは持っているでしょう

displayMetrics.widthPixels;  // width
displayMetrics.heightPixels; // height
于 2013-03-13T16:09:00.123 に答える
0

13 未満で非推奨でない場合の互換性:

    Display display = ((WindowManager)
        context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);

    int pixHeight = metrics.heightPixels;
    int pixWidth = metrics.widthPixels;
// dp numbers:
    float density  = context.getResources().getDisplayMetrics().density;
    float dpHeight = pixHeight / density;
    float dpWidth  = pixWidth / density;

編集:

display.getMetrics(metrics);クラス内のメソッドの外で宣言のみを行うことができるため、エラーが発生しています。このコードはすべてメソッド内にある必要があり、GameState が実際にはアクティビティではないと仮定すると、このようなものはコンストラクター内にある必要があります。このようなもの:

public class GameState {
    // declare variables above here without assignments

    public GameState(Context context){
        // everything above, but save the variables outside of the constructor
    }

}

次に、GameState を使用するアクティビティで、gameState = new GameState(this);

于 2013-03-13T16:17:42.790 に答える
0

これを試して

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

13 より前の API では、以下を使用できます。

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated
于 2013-03-13T16:06:34.103 に答える