我在资源文件夹中有各种不同大小的图像,并且遵循制作安卓游戏的教程here,并且想知道如何扩展我的图像以适应屏幕尺寸? 我正在使用4个不同的类和主菜单类,我正在尝试加载菜单Image:
Graphics.java:
package com.ashmore.framework;
import android.graphics.Paint;
public interface Graphics {
public static enum ImageFormat {
ARGB8888, ARGB4444, RGB565
}
public Image newImage(String fileName, ImageFormat format);
public void clearScreen(int color);
public void drawLine(int x, int y, int x2, int y2, int color);
public void drawRect(int x, int y, int width, int height, int color);
public void drawImage(Image image, int x, int y, int srcX, int srcY,
int srcWidth, int srcHeight);
public void drawImage(Image Image, int x, int y);
void drawString(String text, int x, int y, Paint paint);
public int getWidth();
public int getHeight();
public void drawARGB(int i, int j, int k, int l);
}
AndroidGraphics.java:
package com.ashmore.framework.Implementation;
import java.io.IOException;
import java.io.InputStream;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import com.ashmore.framework.Graphics;
import com.ashmore.framework.Image;
public class AndroidGraphics implements Graphics {
AssetManager assets;
Bitmap frameBuffer;
Canvas canvas;
Paint paint;
Rect srcRect = new Rect();
Rect dstRect = new Rect();
public AndroidGraphics(AssetManager assets, Bitmap frameBuffer) {
this.assets = assets;
this.frameBuffer = frameBuffer;
this.canvas = new Canvas(frameBuffer);
this.paint = new Paint();
}
@Override
public Image newImage(String fileName, ImageFormat format) {
Config config = null;
if (format == ImageFormat.RGB565)
config = Config.RGB_565;
else if (format == ImageFormat.ARGB4444)
config = Config.ARGB_4444;
else
config = Config.ARGB_8888;
Options options = new Options();
options.inPreferredConfig = config;
InputStream in = null;
Bitmap bitmap = null;
try {
in = assets.open(fileName);
bitmap = BitmapFactory.decodeStream(in, null, options);
if (bitmap == null)
throw new RuntimeException("Couldn't load bitmap from asset '"
+ fileName + "'");
} catch (IOException e) {
throw new RuntimeException("Couldn't load bitmap from asset '"
+ fileName + "'");
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
}
if (bitmap.getConfig() == Config.RGB_565)
format = ImageFormat.RGB565;
else if (bitmap.getConfig() == Config.ARGB_4444)
format = ImageFormat.ARGB4444;
else
format = ImageFormat.ARGB8888;
return new AndroidImage(bitmap, format);
}
@Override
public void clearScreen(int color) {
canvas.drawRGB((color & 0xff0000) >> 16, (color & 0xff00) >> 8,
(color & 0xff));
}
@Override
public void drawLine(int x, int y, int x2, int y2, int color) {
paint.setColor(color);
canvas.drawLine(x, y, x2, y2, paint);
}
@Override
public void drawRect(int x, int y, int width, int height, int color) {
paint.setColor(color);
paint.setStyle(Style.FILL);
canvas.drawRect(x, y, x + width - 1, y + height - 1, paint);
}
@Override
public void drawARGB(int a, int r, int g, int b) {
paint.setStyle(Style.FILL);
canvas.drawARGB(a, r, g, b);
}
@Override
public void drawString(String text, int x, int y, Paint paint){
canvas.drawText(text, x, y, paint);
}
public void drawImage(Image Image, int x, int y, int srcX, int srcY,
int srcWidth, int srcHeight) {
srcRect.left = srcX;
srcRect.top = srcY;
srcRect.right = srcX + srcWidth;
srcRect.bottom = srcY + srcHeight;
dstRect.left = x;
dstRect.top = y;
dstRect.right = x + srcWidth;
dstRect.bottom = y + srcHeight;
canvas.drawBitmap(((AndroidImage) Image).bitmap, srcRect, dstRect,
null);
}
@Override
public void drawImage(Image Image, int x, int y) {
canvas.drawBitmap(((AndroidImage)Image).bitmap, x, y, null);
}
public void drawScaledImage(Image Image, int x, int y, int width, int height, int srcX, int srcY, int srcWidth, int srcHeight){
srcRect.left = srcX;
srcRect.top = srcY;
srcRect.right = srcX + srcWidth;
srcRect.bottom = srcY + srcHeight;
dstRect.left = x;
dstRect.top = y;
dstRect.right = x + width;
dstRect.bottom = y + height;
canvas.drawBitmap(((AndroidImage) Image).bitmap, srcRect, dstRect, null);
}
@Override
public int getWidth() {
return frameBuffer.getWidth();
}
@Override
public int getHeight() {
return frameBuffer.getHeight();
}
}
Assets.java
package com.ashmore.ballescape;
import com.ashmore.framework.Image;
import com.ashmore.framework.Music;
import com.ashmore.framework.Sound;
public class Assets {
public static Image background;
public static Image menu;
public static Image loading;
public static Sound click;
public static Music theme;
public static void load (SampleGame sampleGame) {
theme = sampleGame.getAudio().createMusic("menutheme.mp3");
theme.setLooping(true);
theme.setVolume(0.85f);
theme.play();
}
}
LoadingScreen.java:
public class LoadingScreen extends Screen {
public LoadingScreen(Game game) {
super(game);
}
@Override
public void update(float deltaTime) {
Graphics g = game.getGraphics();
Assets.menu = g.newImage("menu.jpg", ImageFormat.RGB565);
// Assets.background = g.newImage("background.jpg", ImageFormat.RGB565);
Assets.loading = g.newImage("loading.png", ImageFormat.RGB565);
//Assets.click = game.getAudio().createSound("explode.ogg");
game.setScreen(new MainMenuScreen(game));
}
最后,例如,在这个主菜单类中,我想从我的资源文件夹中将菜单图像绘制到屏幕上。但是图像不是正确的屏幕尺寸,我希望能够将其设置为调整后的尺寸,以便我的游戏可以在多个设备上运行。
MainMenuScreen.java(相关部分):
@Override
public void paint(float deltaTime) {
Graphics g = game.getGraphics();
g.drawImage(Assets.menu, 0, 0);
}
我应该怎么做呢?我不想在ImageView中设置图像,因为我使用纯粹的java而不是游戏的xml ....至少对于我将使用的背景图像......我应该保留其他资产(像字符一样大小,对吧?
答案 0 :(得分:0)
获取
def Check(self,fname):
client = SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.load_system_host_keys()
client.connect(self.ip,22,self.username,self.password)
ping_command = 'ping -n -c 5 '+str(self.ip)
stdin, stdout, stderr = client.exec_command(ping_command)
for line in stdout.readlines():
print line
try:
with open(fname,'ab') as text_file:
text_file.wirte(stdout)
text_file.close()
except IOError:
pass
client.close()
然后在你的背景上涂抹
Bitmap bitmapBob;
bitmapBob = BitmapFactory.decodeResource(this.getResources(), R.drawable.wall);
如有必要,请使用此功能
Rect dest = new Rect(0, 0, getWidth(), getHeight());
// Draw bob as background with dest size
canvas.drawBitmap(bitmapBob, null, dest, paint);