【问题标题】:Android : Andengine setting sprite position that works on all devicesAndroid:Andengine 设置适用于所有设备的精灵位置
【发布时间】:2012-12-09 12:45:43
【问题描述】:

我正在使用 And Engine 制作游戏,当我试图以通用方式制作它时,它适用于所有设备,然后我遇到了麻烦......

我需要在背景精灵的特定位置设置一个精灵,它应该适用于所有屏幕...我的背景屏幕的大小与设备的尺寸相同..

我尝试使用像素,比如说 Glaxy S3 ha 尺寸 720*1280

我根据它在位置 (584,608)

设置我的精灵

和我的 HTC experia ha 尺寸 (320,480)

所以我需要将它设置在 (244,172) ....

我已经尝试了以下所有方法来以通用方式设置精灵的位置,但如果任何工作都没有......

我已经尝试了很多以下的东西来制作一些让我能够做到的公式,但找不到任何..请指教

final Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

 metrics.density;
 metrics.densityDpi;
 metrics.heightPixels);
 metrics.scaledDensity);
 metrics.widthPixels);
 metrics.xdpi);
 metrics.ydpi);



Point point = getDisplaySize(display);
 CAMERA_WIDTH = point.x;
 CAMERA_HEIGHT = point.y;
 DisplayMetrics dm = new DisplayMetrics();     getWindowManager().getDefaultDisplay().getMetrics(dm);
 double x = Math.pow(dm.widthPixels/dm.xdpi,2); 
 double y = Math.pow(dm.heightPixels/dm.ydpi,2);
 double screenInches = Math.sqrt(x+y);
 int widthPix = (int) Math.ceil(dm.widthPixels * (dm.densityDpi / 160.0));

//CAMERA_WIDTH = display.getWidth();
//CAMERA_HEIGHT = display.getHeight();

问题有点复杂.. 正如我上面所说,我尝试使用像素,比如说 Glaxy S3 ha *dimensions 720*1280 并且所需的精灵位置是 (584,608) 所以我设置的方式(CAMERA_WIDTH/1.233f,CAMERA_HEIGHT/2.112f)*

但是 HTC experia 的尺寸 *320*480 所以根据 (CAMERA_WIDTH/1.233f,CAMERA_HEIGHT/2.112f) 所需的位置是 (2599.5,227.27)* 但根据显示这是错误的...... 当我将其设置为 (244,172) 以使其完美运行时。...请帮忙。

【问题讨论】:

    标签: android andengine dimension


    【解决方案1】:

    AndEngine 提供多种解析策略。它们用于确定RenderSurfaceView 的大小,从而确定游戏在屏幕上的实际大小,具体取决于屏幕大小。

    您应该使用RatioResolutionPolicy:它将使用尽可能大的尺寸,同时保持宽度和高度之间的恒定比率。通过保持相机的大小不变,它所显示的所有内容都将按照这个不变的比例进行缩放,这在不同的设备上会有所不同。

    示例:让CAMERA_WIDTH = 720 和CAMERA_HEIGHT = 480。如果我们以这种方式创建相机和引擎选项:

    this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
    EngineOptions options = new EngineOptions(..., new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);
    

    比率为720 / 480 = 1.5。 在场景中放置精灵时,使用恒定坐标。假设我们把它放在屏幕中间:

    Sprite sprite = new Sprite(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2, ...);
    

    所以:

    • 在屏幕尺寸为 720x480 的设备上,精灵将放置在 (360, 240) 屏幕坐标处。
    • 在屏幕尺寸为 480x320 的设备上,精灵将放置在 (240, 160) 屏幕坐标处。
    • 在屏幕尺寸为 800x480 的设备上,精灵将放置在 (400, 240) 屏幕坐标处。

    等等……

    【讨论】:

    • Jong 感谢您的评论,但我的问题有点复杂.. 正如我所说,我尝试使用像素,比如说 Glaxy S3 ha 尺寸 720*1280 并且所需的精灵位置是 (584,608) 所以我设置方式(CAMERA_WIDTH/1.233f,CAMERA_HEIGHT/2.112f)但 HTC experia 的尺寸为 320*480 所以根据(CAMERA_WIDTH/1.233f,CAMERA_HEIGHT/2.112f)所需的位置是(2599.5,227.27),但根据显示这是错误的。 ..当我将它设置为 (244,172) 时,它的工作完美..请帮助..
    • 嗨,我怀疑我使用的是比率分辨率策略,在我的基本游戏活动中,我覆盖了 onsetContent 视图但是在该边距仅出现在一侧之后我该如何解决这个问题?这是我的堆栈问题的链接stackoverflow.com/questions/14427152/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多