首先我知道这个主题已经有很多主题,但我仍然不明白。
我正在尝试为Android制作游戏(可在Play商店下载),但我有一个问题可以阻止我每次,我怎样才能制作一款可以在每部手机上播放相同宽高比的游戏?< / p>
例如: 我想制作一个游戏,其中一些物体随机地从屏幕顶部掉落在玩家的背景上。
如何在每部手机上打印背景图像,播放器图像和掉落的物体图像?
首先,我要打印bakcground图像 这是我现在拥有的:
public class MyAwesomeGame extends Game {
public SpriteBatch batch;
@Override
public void create () {
batch = new SpriteBatch();
setScreen(new MenuScreen(this));
}
@Override
public void render () {
super.render();
}
@Override
public void dispose () {
batch.dispose();
}
}
并且:
public class MenuScreen implements Screen {
private MyAwesomeGame game;
public MenuScreen(MyAwesomeGame game){
this.game = game;
}
@Override
public void show() {}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
game.batch.begin();
game.batch.end();
}
@Override
public void resize(int width, int height) {}
@Override
public void pause() {}
@Override
public void resume() {}
@Override
public void hide() {}
@Override
public void dispose() {}
}
请有人向我解释我应该做些什么或给我一些代码吗?
答案 0 :(得分:1)
viewport实际上就是你所需要的。如果您想要使用x = array(744750545472, 705911706019);
foreach ($x as $value) {
$params = array(
"Service" => "AWSECommerceService",
"Operation" => "ItemLookup",
"AWSAccessKeyId" => "ACCESSKEY",
"AssociateTag" => "eledesmaj@example.com",
"ItemId" => $x,
"IdType" => "UPC",
"ResponseGroup" => "ItemAttributes,OfferFull,Offers,SalesRank",
"SearchIndex" => "All"
);
// Set current timestamp if not set
if (!isset($params["Timestamp"])) {
$params["Timestamp"] = gmdate('Y-m-d\TH:i:s\Z');
}
// Sort the parameters by key
ksort($params);
$pairs = array();
foreach ($params as $key => $value) {
array_push($pairs, rawurlencode($key)."=".rawurlencode($value));
}
// Generate the canonical query
$canonical_query_string = join("&", $pairs);
// Generate the string to be signed
$string_to_sign = "GET\n".$endpoint."\n".$uri."\n".$canonical_query_string;
// Generate the signature required by the Product Advertising API
$signature = base64_encode(hash_hmac("sha256", $string_to_sign,
List item
aws_secret_key, true));
// Generate the signed URL
$request_url = 'http://'.$endpoint.$uri.'?'.$canonical_query_string.'&Signature='.rawurlencode($signature);
$data = simplexml_load_file($request_url);
echo $data->Items->Item->ASIN;
的每个设备具有相同宽高比的图像,这将根据设备纵横比自动缩小/缩小图像,但会降低图像质量。
如果您不希望破坏图像质量,请使用FillViewport,它还保持虚拟屏幕大小的宽高比,但与FitViewport相比,它将始终填满整个屏幕,这可能会导致部分视口被切断。
如果您希望背景图像占据整个屏幕,请执行以下操作:
StretchViewport
点击此link了解有关int width = Gdx.graphics.getWidth(); \\ get the width of the device
int height = Gdx.graphics.getHeight(); \\ get the height of the device
Texture backgroundImage = new Texture(pathName);
Image image = new Image(backgroundImage);
image.setSize(width,height); \\ background image will fill up your whole screen
Image player = new Image(new Texture(pathname)); \\ it's the same as what we did above
Stage stage = new Stage(new StretchViewport(width,height));
stage.addActor(player); \\ add your player and background image to stage
stage.addActor(image);
的更多信息
Stage
中的两个参数将根据设备的纵横比拉伸宽度和高度。
现在,您的渲染方法会更新并渲染您的图像。
StretchViewport
我希望这有帮助!
答案 1 :(得分:0)
这正是Viewports的用途。
视口将处理不同的分辨率。 See the Viewport wiki用于不同类型的视口以及它们之间的差异。
还有一些教程可以帮助您开始使用视口。 GameFromScratch有一个,但视口上还有更多。