我只是想说我是java应用程序开发的新手。
所以我在屏幕上浮动这个图像,当我触摸屏幕时,我希望图像改变颜色(从图像切换到图像1)我得到了这个工作,但图像移动到起点,我希望过渡平滑,发生在图像处于特定点的位置。
我在GameView.java类中有这个代码
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
private MainThread thread;
private CharacterSprite characterSprite;
private int col = 0;
public GameView(Context context){
super(context);
getHolder().addCallback(this);
thread = new MainThread(getHolder(),this);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder){
characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen), 100, 100);
thread.setRunning(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder){
boolean retry = true;
while(retry){
try{
thread.setRunning(false);
thread.join();
}catch(InterruptedException e){
e.printStackTrace();
}
retry = false;
}
}
public void update(){
characterSprite.update();
}
public boolean onTouchEvent(MotionEvent event) {
int X = (int) event.getX();
int Y = (int) event.getY();
int eventaction = event.getAction();
switch (eventaction) {
case MotionEvent.ACTION_DOWN:
if(col == 0){
int ox = characterSprite.getX();
int oy = characterSprite.getY();
characterSprite.setX(ox);
characterSprite.setX(oy);
characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen1), ox, oy);
Toast.makeText(getContext(), "ACTION_UP "+"X: "+ox+" Y: "+oy, Toast.LENGTH_LONG).show();
col = 1;
}else{
int ox = characterSprite.getX();
int oy = characterSprite.getY();
characterSprite.setX(ox);
characterSprite.setX(oy);
characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen), ox, oy);
Toast.makeText(getContext(), "ACTION_UP "+"X: "+ox+" Y: "+oy, Toast.LENGTH_LONG).show();
col = 0;
}
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
@Override
public void draw(Canvas canvas){
super.draw(canvas);
if(canvas!=null){
characterSprite.draw(canvas);
}
}
这是大部分工作正在进行的地方,我还有CharacterSprite.java类,它基本上创建了'image'并使它在屏幕上浮动:
public class CharacterSprite {
private Bitmap image;
private int x,y;
private int xVelocity = 10;
private int yVelocity = 5;
private int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
private int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
public CharacterSprite(Bitmap bmp, int x, int y){
image = bmp;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public void setX(int nx){
x = nx;
}
public void setY(int ny){
y = ny;
}
public void draw(Canvas canvas){
canvas.drawBitmap(image,x,y,null);
}
public void update(){
if(x < 0 && y < 0){
x = screenWidth / 2;
y = screenHeight / 2;
}else{
x += xVelocity;
y += yVelocity;
if((x > screenWidth - image.getWidth()) || (x < 0)){
xVelocity = xVelocity*-1;
}
if((y > screenHeight - image.getHeight()) || (y < 0)){
yVelocity = yVelocity*-1;
}
}
}
你可以看到我试图获得当前的x和y并在创建新角色时将其设置回来,但是这不起作用,我的猜测是这种情况正在发生,因为一秒钟图像不在屏幕上并且整个事情重置但是我不确定那是不是2.我不知道如何解决这个问题。如果有人能指出我应该搜索哪个会很棒。
@edit:我改为这个Toast.makeText(getContext(), "ACTION_UP "+"X: "+characterSprite.getX()+" Y: "+characterSprite.getY(), Toast.LENGTH_LONG).show();
要调试,我得到的输出是ACTION_UP X: 0 Y: 0
回答
添加
public void updateD(Canvas canvas){
canvas.drawBitmap(image,x,y,null);
}
对CharacterSprite.java
并改变:
if(col == 0){
int ox = 550; //characterSprite.getX();
int oy = 550;//characterSprite.getY();
// characterSprite.setX(ox);
//characterSprite.setX(oy);
characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen1));
Toast.makeText(getContext(), "ACTION_UP "+"X: "+characterSprite.getX()+" Y: "+characterSprite.getY(), Toast.LENGTH_LONG).show();
col = 1;
}
至:
if(col == 0){
characterSprite.setImg(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen1));
Toast.makeText(getContext(), "ACTION_UP "+"X: "+characterSprite.getX()+" Y: "+characterSprite.getY(), Toast.LENGTH_LONG).show();
col = 1;
}