如何从多个 类 访问同一个实例
How to access the same instance from multiple classes
我正在尝试从多个 class 访问 class 的同一个实例。
我的炮塔有一个 class,我正在尝试使用我的视图 class 绘制炮塔,同时使用我的逻辑 class 更新它的位置。我不明白如何检查 class 是否已经有一个 运行 实例,如果它有如何访问 运行 实例。我无法在网上找到任何我理解的东西,它就在我头上,感谢所有帮助!
炮塔
public class Turrets {
int health, x, y, speed;
Bitmap sprite;
public Turrets (Context context){ }
public void isMoving(){
x += speed;
}
public int getHealth() {return health;}
public int getX() {return x;}
public int getY() {return y;}
public Bitmap getSprite() {return sprite;}
}
简单炮塔
public class SimpleTurret extends Turrets {
public SimpleTurret(Context context){
super(context);
sprite = BitmapFactory.decodeResource(context.getResources(), R.drawable.test_sprite);
health = 50;
x = 300;
y = 100;
speed = 1;
}
}
逻辑
public class Logic implements Runnable{
Boolean isRunning;
private Thread logicThread;
SimpleTurret simpleTurret;
public Logic(Context context, boolean running){
simpleTurret = new SimpleTurret(context);
logicThread = new Thread(this);
logicThread.start();
isRunning = running;
}
@Override
public void run() {
while (isRunning){
gameView.rapidFireTurret.isMoving();
}
}
}
GameView
public class GameView extends SurfaceView implements Runnable {
private boolean running = true;
SurfaceHolder surfaceHolder = getHolder();
SimpleTurret simpleTurret;
RapidFireTurret rapidFireTurret;
public GameView (Context context){
super(context);
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
while (running){
DrawCanvas();
}
}
public void DrawCanvas(){
Canvas canvas = surfaceHolder.lockCanvas();
if (surfaceHolder.getSurface().isValid()){
canvas.drawColor(Color.RED);
canvas.drawBitmap(simpleTurret.getSprite(), simpleTurret.getX(), simpleTurret.getY(), null);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
像class一样使用单例。
// Java program implementing Singleton class
// with getInstance() method
class Singleton {
// static variable single_instance of type Singleton
private static Singleton single_instance_first = null;
private static Singleton single_instance_second = null;
private static Singleton single_instance_third = null;
// variable of type String
public String s;
// private constructor restricted to this class itself
private Singleton() {
s = "Hello I am a string part of Singleton class";
}
// static method to create instance of Singleton class
public static Singleton getInstance(int index) {
switch (index) {
case 0: {
if (single_instance_first == null)
single_instance_first = new Singleton();
return single_instance_first;
}
case 1: {
if (single_instance_second == null)
single_instance_second = new Singleton();
return single_instance_second;
}
case 2: {
if (single_instance_third == null)
single_instance_third = new Singleton();
return single_instance_third;
}
default: {
if (single_instance_first == null)
single_instance_first = new Singleton();
return single_instance_first;
}
}
}
}
并使用
Singleton firstSingleton = Singleton.getInstance(0);
Singleton secondSingleton = Singleton.getInstance(1);
Singleton thirdSingleton = Singleton.getInstance(2);
把你的class改成这个
public class Turrets {
int health, x, y, speed;
Bitmap sprite;
static Singleton mInstance;
Context mContext;
public Turrets (Context context){
this.mContext=context;
}
public void isMoving(){
x += speed;
}
public int getHealth() {return health;}
public int getX() {return x;}
public int getY() {return y;}
public Bitmap getSprite() {return sprite;}
public static Turrets getInstance()
{
if (mInstance == null) {
mInstance = new Turrets(mContext);
}else {
return mInstance;
}
}
}
我正在尝试从多个 class 访问 class 的同一个实例。 我的炮塔有一个 class,我正在尝试使用我的视图 class 绘制炮塔,同时使用我的逻辑 class 更新它的位置。我不明白如何检查 class 是否已经有一个 运行 实例,如果它有如何访问 运行 实例。我无法在网上找到任何我理解的东西,它就在我头上,感谢所有帮助!
炮塔
public class Turrets {
int health, x, y, speed;
Bitmap sprite;
public Turrets (Context context){ }
public void isMoving(){
x += speed;
}
public int getHealth() {return health;}
public int getX() {return x;}
public int getY() {return y;}
public Bitmap getSprite() {return sprite;}
}
简单炮塔
public class SimpleTurret extends Turrets {
public SimpleTurret(Context context){
super(context);
sprite = BitmapFactory.decodeResource(context.getResources(), R.drawable.test_sprite);
health = 50;
x = 300;
y = 100;
speed = 1;
}
}
逻辑
public class Logic implements Runnable{
Boolean isRunning;
private Thread logicThread;
SimpleTurret simpleTurret;
public Logic(Context context, boolean running){
simpleTurret = new SimpleTurret(context);
logicThread = new Thread(this);
logicThread.start();
isRunning = running;
}
@Override
public void run() {
while (isRunning){
gameView.rapidFireTurret.isMoving();
}
}
}
GameView
public class GameView extends SurfaceView implements Runnable {
private boolean running = true;
SurfaceHolder surfaceHolder = getHolder();
SimpleTurret simpleTurret;
RapidFireTurret rapidFireTurret;
public GameView (Context context){
super(context);
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
while (running){
DrawCanvas();
}
}
public void DrawCanvas(){
Canvas canvas = surfaceHolder.lockCanvas();
if (surfaceHolder.getSurface().isValid()){
canvas.drawColor(Color.RED);
canvas.drawBitmap(simpleTurret.getSprite(), simpleTurret.getX(), simpleTurret.getY(), null);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
像class一样使用单例。
// Java program implementing Singleton class
// with getInstance() method
class Singleton {
// static variable single_instance of type Singleton
private static Singleton single_instance_first = null;
private static Singleton single_instance_second = null;
private static Singleton single_instance_third = null;
// variable of type String
public String s;
// private constructor restricted to this class itself
private Singleton() {
s = "Hello I am a string part of Singleton class";
}
// static method to create instance of Singleton class
public static Singleton getInstance(int index) {
switch (index) {
case 0: {
if (single_instance_first == null)
single_instance_first = new Singleton();
return single_instance_first;
}
case 1: {
if (single_instance_second == null)
single_instance_second = new Singleton();
return single_instance_second;
}
case 2: {
if (single_instance_third == null)
single_instance_third = new Singleton();
return single_instance_third;
}
default: {
if (single_instance_first == null)
single_instance_first = new Singleton();
return single_instance_first;
}
}
}
}
并使用
Singleton firstSingleton = Singleton.getInstance(0);
Singleton secondSingleton = Singleton.getInstance(1);
Singleton thirdSingleton = Singleton.getInstance(2);
把你的class改成这个
public class Turrets {
int health, x, y, speed;
Bitmap sprite;
static Singleton mInstance;
Context mContext;
public Turrets (Context context){
this.mContext=context;
}
public void isMoving(){
x += speed;
}
public int getHealth() {return health;}
public int getX() {return x;}
public int getY() {return y;}
public Bitmap getSprite() {return sprite;}
public static Turrets getInstance()
{
if (mInstance == null) {
mInstance = new Turrets(mContext);
}else {
return mInstance;
}
}
}