我有一点问题,就像在这张照片中看到的那样,我不能像我想的那样带回屏幕尺寸,而且我有点失落...... (我正在学习)
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
}
}
答案 0 :(得分: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
答案 1 :(得分:0)
您可以像这样使用Context.getResources()和Resources.getDisplayMetrics:
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
然后你会
displayMetrics.widthPixels; // width
displayMetrics.heightPixels; // height
答案 2 :(得分:0)
兼容&lt; 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不是一个Activity,这个东西应该在构造函数中。像这样:
public class GameState {
// declare variables above here without assignments
public GameState(Context context){
// everything above, but save the variables outside of the constructor
}
}
然后在使用GameState的Activity中,执行gameState = new GameState(this);