- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在定义的时间间隔内一次又一次地在下面的代码中执行这段代码
for (Sprite sprite : sprites) {
sprite.onDraw(canvas);
}
我尝试了几种方法,但我遇到了错误。因为我的所有动画都与 sleep 和线程扩展类同步
package com.okok;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
public class GameView extends SurfaceView {
private Bitmap bmp;
private SurfaceHolder holder;
private GameLoopThread gameLoopThread;
private List<Sprite> sprites = new ArrayList<Sprite>();
private long lastClick;
private Bitmap bmpBlood;
private List<TempSprite> temps = new ArrayList<TempSprite>();
private int mint;
public GameView(Context context) {
super(context);
gameLoopThread = new GameLoopThread(this);
holder = getHolder();
holder.addCallback(new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
createSprites();
gameLoopThread.setRunning(true);
gameLoopThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
bmpBlood = BitmapFactory.decodeResource(getResources(), R.drawable.blast);
}
private void createSprites() {
sprites.add(createSprite(R.drawable.greenenact));
sprites.add(createSprite(R.drawable.greenenact));
sprites.add(createSprite(R.drawable.greenenact));
}
private Sprite createSprite(int resouce) {
Bitmap bmp = BitmapFactory.decodeResource(getResources(), resouce);
return new Sprite(this, bmp);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.rgb(21, 181, 195));
for (int i = temps.size() - 1; i >= 0; i--) {
temps.get(i).onDraw(canvas);
}
for (Sprite sprite : sprites) {
sprite.onDraw(canvas);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (System.currentTimeMillis() - lastClick > 500) {
lastClick = System.currentTimeMillis();
synchronized (getHolder()) {
float x = event.getX();
float y =event.getY();
for (int i = sprites.size() - 1; i >= 0; i--) {
Sprite sprite = sprites.get(i);
if (sprite.isCollition(x, y)) {
sprites.remove(sprite);
temps.add(new TempSprite(temps, this, x, y, bmpBlood));
break;
}
}
}
}
return true;
}
}
这是我用来移动东西的 GameLoopThread 类
package com.okok;
import android.graphics.Canvas;
public class GameLoopThread extends Thread {
static final long FPS = 10;
private GameView view;
private boolean running = false;
public GameLoopThread(GameView view) {
this.view = view;
}
public void setRunning(boolean run) {
running = run;
}
@Override
public void run() {
long ticksPS = 1000 / FPS;
long startTime;
long sleepTime;
while (running) {
Canvas c = null;
startTime = System.currentTimeMillis();
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
sleepTime = ticksPS - (System.currentTimeMillis() - startTime);
try {
if (sleepTime > 0)
sleep(sleepTime);
else
sleep(10);
} catch (Exception e) {}
}
}
}
最佳答案
尝试这样的事情:
private void createSprites() {
{
new Thread(new Runnable() {
public void run() {
for (int z =0; z<20; z++ ) // total of 20 sprites
try
{
Thread.sleep(5000); // new enemy every 5 seconds
sprites.add(createSprite(R.drawable.image));
z++;
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}).start();
}
关于java - 每隔几秒绘制一次 Sprite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19327751/
我需要一个跟踪付款的结果,我可以在其中查看在过去五个小时内以 15 分钟为间隔使用了多少个付款选项。 我的表“payment_options_log”有两列:payment_option 和 crea
我创建了一个类似于节拍器的 Android 应用程序。实际上我想每 n 毫秒播放一次哔声。为此,我使用了 MediaPlayer 和计时器。 我的代码是这样的: 解决方案 1: start_butto
我有多个 Raspberry Pi 从移动设备收集 wifi 信标并将它们保存在 mySQL 数据库中。我在数据库中创建了一个 View 。数据库中的每个条目都有移动设备 mac 地址、pi id、r
我比较菜鸟我有一个天文台,当我点击一个按钮时它开始计时 crono = (Chronometer) findViewById(R.id.crono); begin= (Button) find
我有一个 python 脚本,我正在运行它,如下所示: python3 ./bin/abc.py --log_file ./web/prr.log 现在我需要确保上述进程每 3 小时运行一次。流程如下
我有以下列表。 vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] inserted_elements = [2, 2, 2, 2, 2] 我想通过插入每两个元素来获得以
我想知道安排代码的最佳方法。我有一个代码可以生成报告并每隔 24 小时向一组人发送邮件。它是一个基于控制台的 Java 应用程序。我想知道安排它的最佳方法。有时我可能需要将其更改为 12 小时间隔。但
这个问题在这里已经有了答案: Run certain code every n seconds [duplicate] (7 个答案) 关闭 8 年前。 我有一个线程类,它的循环需要每秒执行 4 次
我有一个很长的 clojure 字符串,我需要每 2 个字符用空格将其拆分(例如:“1234567890”-->“12 34 56 78 90”。我使用的解决方案是: (->> (partitio
我想在 3 个字符后添加一个冒号。所以“123:456:789:0”我想打印它。我怎样才能做到这一点。现在输出的方式:“123:4567890” String s = "1234567890"; Sy
我有一个包含以下(相关)列的表:id_mi、日期和值。我想使用 y 轴中“值”列中的值和 x 轴中的日期来构建图表,但由于它们很多,我希望图表上的点是 X 行的平均值。 对于这个例子,假设 X = 1
我有一个具有游戏风格元素的应用程序,即使它不是游戏,我有游戏中心正在运行,并且希望每次有 100 个“Chatters”加入他们的群组/论坛时通知当前设备用户。一旦用户达到某些里程碑(1k 订阅/加入
我有以下查询,用于计算每天的 CSR 调用指标和总数。我现在为每日报告运行它的方式是按扩展分组并将 now() 和 curdate() 值放在日期和时间列中。但是,我现在的任务是修改它以获取过去 30
例如,我想在每天凌晨 3 点在两个数据库之间运行同步 ruby 脚本(如果可能的话,在 rails 操作中)。将这些时间存储在数据库中会很好,因为如果同步失败,我想将其设置为在一个小时内重试(在数
我有一个 android studio 项目,它包含 C++ 代码。代码非常大,编译它大约需要 1.5 小时。每次当我点击“运行”或“调试”按钮时,gradle 中的第一个任务是:ProjectNam
所以我正在为现有的 c 应用程序编写一个图形用户界面。 gui 只是一个简单的界面,它只会显示而不会真正向应用程序反馈任何信息。但是如果有一些新信息可用,我需要检查一个链表。 现在我不想使用另一个线程
Java spring - 我有以下 cron 作业的 cron 表达式。 0 0/35 * * * ? 但是上面提到的 cron 表达式每小时触发一次,如下所示 1:35 2:35 3:35 4:3
为了对新表字段进行一些测试,我想伪造测试数据库中现有记录的一些值。我想为表中的每 8 条记录分配一个值。我可以使用以下语法轻松选择每 8 条记录: select * from (select ro
为 CakePHP 1.3 编写一个新功能,我希望密码在 x 天后过期,并在 y 天过期前自动将密码更改为随机字符串,并通过电子邮件向用户发送新密码或登录链接。服务器上的 crontab 是正确的方法
我正在学习 Python 和 Pygame,我要做的第一件事是一个简单的贪吃蛇游戏。我试图让蛇每 0.25 秒移动一次。这是我循环的代码部分: while True: check_for_qu
我是一名优秀的程序员,十分优秀!