我在学习Android编程时遇到了一些问题。我得到了以下内容:一个RelativeLayout,我在其中添加了一个名为“GameView”的新类,扩展了一个表面视图。这个“GameView”类包含了一个“GameThread”类的对象,一个我创建的线程类。所以现在我的问题是,这个线程类一直调用我的表面视图的onDraw()方法。现在我让表面视图在屏幕上绘制一个位图,每次调用onDraw()时,它应该向右移动10个像素。但是现在我的问题是,第一个图像保持在它的位置,右边出现了另一个10个像素的图像。它看起来像这样:
https://docs.google.com/file/d/0B7rVL5jhBMejN2VwTWlmaG1XemM/edit?usp=sharing
现在,我如何能够创建一个平滑的移动雪碧没有这样的克隆图像的痕迹?
我的代码:主类:
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
RelativeLayout rLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rLayout = (RelativeLayout)findViewById(R.id.all);
rLayout.addView(new GameView(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
和游戏视图类
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameView extends SurfaceView {
private Bitmap bmp;
private SurfaceHolder holder;
private GameThread gameThread;
private int x = 11;
public GameView(Context context) {
super(context);
gameThread = new GameThread(this);
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
gameThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
});
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(bmp, x, 10, null);
x += 1;
}
}
和游戏循环类:
import android.graphics.Canvas;
public class GameThread implements Runnable{
private GameView gameView;
private boolean isRunning = false;
public GameThread(GameView gameView) {
this.gameView = gameView;
}
public void start() {
isRunning = true;
new Thread(this, "Game Thread").start();
}
@Override
public void run() {
while(isRunning) {
Canvas c = null;
try {
c = gameView.getHolder().lockCanvas();
synchronized (gameView.getHolder()) {
gameView.onDraw(c);
}
} finally {
if(c != null) {
gameView.getHolder().unlockCanvasAndPost(c);
}
}
}
}
}
我希望有人可以帮助我,谢谢!
在绘制精灵之前添加以下内容:
canvas.drawRGB(0, 0, 0)
在绘制下一帧之前,您需要重置画布的背景。
也可以试试< code>canvas.drawARGB(100,0,0,0)。这将绘制一个半透明的背景,这将允许一些以前绘制的位图显示出来。看起来精灵在它身后留下了微弱的痕迹。
我正在用PyGame制作一个小游戏,相机聚焦在一个代表角色的精灵上,当按下箭头键时,地图会围绕它移动。问题是地图不动。我以前多次遇到过这个问题,我想我已经把它缩小到可能的范围,但是我不知道如何真正解决这个问题。 这是代码: 基于我过去的PyGame程序,我总是在移动被绘制到屏幕上的精灵集时遇到问题,比如我在这里所做的。即使是平庸简单的例子也会失败。我想知道的是这是为什么,我怎样才能简明扼要地画出大
我创建了一个程序,创建一个正方形并将其绘制在JPanel上。还有控制正方形运动的键绑定(w为上)(s为下)(a为左)(d为右)。我的问题是,当我按下键时,它会移动一个实例,犹豫,然后继续移动。有没有办法防止运动的犹豫。 这是我的面板类。 任何帮助都将不胜感激。非常感谢。
我想重新绘制我的屏幕。到目前为止,它所做的只是在第一个屏幕上的头部应该在的地方显示一个点。这很好,但是我在代码中写了我想每秒将头部向下移动10个像素。我正在打印头部应该在的位置,在命令提示符中它显示y值确实在增加。但是在我的屏幕上,头部没有移动。 我尝试过使用revalidate方法,尝试扩展canvas类而不是jframe,我尝试过只为paint方法使用不同的类,我尝试过用paintCompon
移动精灵 现在你知道了如何展示精灵,但是让它们移动呢?很简单:使用Pixi的ticker。这被称为 游戏循环 。任何在游戏循环里的代码都会1秒更新60次。你可以用下面的代码让 cat 精灵以每帧1像素的速率移动。 function setup() { //Start the game loop by adding the `gameLoop` function to //Pixi's `t
我正在学习Android Google API。我正在创建一个应用程序以通过Google Play服务获取最后一个位置。在尝试了许多教程后,我的位置变得为空。我正在我的手机上运行应用程序,即API 23。我在手机上保留位置和数据设置。下面是我的代码。 渐变相关性: AndroidManifest。xml 主活动代码
精灵位置 现在你知道了怎么创建和显示一个精灵,让我们学习如何定位他们的位置和改变他们的大小 在最早的示例里那个猫的精灵被放在了舞台的左上角。它的x和y坐标都是0。你可以通过改变它的x和y坐标的值来改变他们的位置。下面的例子就是你通过设置x和y为96坐标让它在舞台上居中。 cat.x = 96; cat.y = 96; 在你创建这个精灵之后,把这两行代码放进setup方法。 function set