Я работал над игрой без растровых изображений или чего-то еще, я использую прямоугольники в качестве объектов и меняю их цвет для своей цели, как красные прямоугольники для игрока и серые прямоугольники для стен. Мой вопрос в том, что это правильный способ заменить прямоугольники растровыми изображениями/изображениями?Как загрузить растровое изображение для Android-игры?
Я знаю, чтобы загрузить Bitmaps вы можете просто сделать это:
Bitmap randomBitmap = BitmapFactory.decodeResource(getResources(),
com.example.android4gametest.R.drawable.ic_launcher);
Должен ли я загрузить все мои Bitmaps и передать их в классы, или я должен загрузить растровое изображение внутри своего класса, а не передать его? и как бы я это сделал, потому что я не могу использовать BitmapFactory, потому что у меня нет доступа к getResources()! или я должен загружать свои растровые изображения/изображения из папки моих ресурсов, которые, как я знаю, у меня не будут иметь те же «инструменты», которые вы можете сказать, чтобы испортить растровое изображение.
MainActivity
public class MainActivity extends Activity {
Game theGame;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(new Game(this));
}
}
Игра Панель общественного класса Game продляет SurfaceView реализует SurfaceHolder.Callback {
GameThread _thread;
public Game(Context context) {
super(context);
getHolder().addCallback(this);
setFocusable(true);
_thread = new GameThread(getHolder(), this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder holder) {
_thread.setRunning(true);
_thread.start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
protected void onDraw(Canvas canvas) {
Log.d("OnDraw", "it is Drawing");
canvas.drawColor(Color.BLUE);
}
public void update() {
// TODO Auto-generated method stub
}
}
GameLoop Ничто здесь
public class GameThread extends Thread{
/*FPS Code*/
private final static int MAX_FPS = 30;
private static final int FRAME_PERIOD = 1000/MAX_FPS;
protected SurfaceHolder holder;
protected Game game;
private boolean isRunning = false;
public GameThread(SurfaceHolder _holder, Game _game) {
this.holder = _holder;
this.game = _game;
}
/**
* Returns True if the game is still running and False if the game is over
* @return
*/
public boolean isRunning() {
return isRunning;
}
/**
* Set to true for the game loop to start
* @param isRunning
*/
public void setRunning(boolean isRunning) {
this.isRunning = isRunning;
}
@Override
public void run() {
Canvas c;
Log.d("Pallyways", "Starting game Loop");
long beingTime;
long timeDiff;
int sleepTime;
int framesSkipped;
sleepTime = 0;
while(isRunning){
c = null;
try{
c = holder.lockCanvas();
synchronized(holder){
beingTime = System.currentTimeMillis();
framesSkipped = 0;
game.update();//Update
game.onDraw(c);//Redraw
timeDiff = System.currentTimeMillis() - beingTime ;
sleepTime = (int) (FRAME_PERIOD - timeDiff);
if(sleepTime>0){
try{
Thread.sleep(sleepTime);}
catch (InterruptedException e) {
e.printStackTrace();}
finally{}
}
while(sleepTime<0 && framesSkipped < 5){
game.update();
sleepTime+= FRAME_PERIOD;
framesSkipped++;
}
}
}finally{if(c!=null){
holder.unlockCanvasAndPost(c);
}
}
}
}
}
Hero Class я не начал, но я хотел бы знать, как загрузить растровое изображение на классе, который находится на другом пакете
package com.example.android4gametest.Actors;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.example.android4gametest.R;
public class Hero {
//getContext() gives me an error and that is because it does not have a reference
private Bitmap hero = BitmapFactory.decodeResource(getContext().getResources(),
R.drawable.ic_launcher);
public Hero(){
}}
бы я должен перейти к контексту в мой класс, чтобы загрузить его с помощью растрового изображения? так что скажем, что мой конструктор героя класса будет чем-то вроде «Герой (Контекст)» –
Ага, мой плохой, подумал, что ваш класс расширен. Да, это тоже сработает. Просто не держите глобальную ссылку на Контекст или не храните его в WeakReference. – Ljdawson
. Я обновлю свой вопрос с помощью моих 4 классов. –