我试图制作一款游戏,当用户点击绿色按钮时,它会消失,但是当用户点击红色按钮时,他们会无法在屏幕上连续显示多个随机按钮,这是我的代码
package com.Tripps.thesimplegame;
import java.util.Random;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.view.View;
public class DrawingView extends View {
int mBackgroundColor = 000000;
String yo = "#";
Paint paint;
final float radius = 230f;
private long lastUpdated = 0;
private int lastColor = Color.BLACK;
public DrawingView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public DrawingView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public DrawingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas){
String str = "Joke of the day";
super.onDraw(canvas);
paint = new Paint();
Random random = new Random();
Random randomTwo = new Random();
//Rect ourRect = new Rect();
Rect topRect = new Rect();
Rect backGround = new Rect();
paint.setColor(Color.BLACK);
backGround.set(0,0,canvas.getWidth(),canvas.getHeight());
canvas.drawRect(backGround, paint);
while(System.currentTimeMillis() > lastUpdated + 1000){
lastColor = random.nextInt(2) == 1 ? Color.RED : Color.GREEN;
lastUpdated = System.currentTimeMillis();
paint.setColor(lastColor);
canvas.drawCircle(random.nextInt((int) (canvas.getWidth()-radius/2)) + radius/2f, random.nextInt((int) (canvas.getHeight()-radius/2)) + radius/2f, radius, paint);
}
}
}
答案 0 :(得分:0)
现在到底发生了什么,你想要与众不同?
无论如何,出于性能和可读性原因,我建议做一些事情:
制作两个static int
变量,CANVAS_WIDTH和CANVAS_HEIGHT,在onCreate
中初始化它们,并在onDraw
中使用它们,而不是每次都查询它们。
对于背景,您不需要始终绘制与屏幕一样大的矩形。只需在xml中为DrawView提供黑色背景。
为什么要使用while
?它无论如何都会被执行一次,那么如何使用if
?
写完这篇文章后,我有一些可能只是你的解决方案。
首先,创建一个Handler animationHandler
并在onCreate中初始化它。
制作
Runnable r = new Runnable{
run(){
invalidate();
}
};
并在onDraw animationHandler.posteDelayed(r, FRAME_RATE);
同样使public static final int FRAME_RATE = 30
为30 fps或= 15为60 fps。
现在你可以制作另一个public static final int SECOND
,它实际上告诉你,在一秒钟结束之前你需要多长时间运行它,所以用1000/FRAME_RATE
启动。
创建另一个变量timer,用0初始化,并输入timer ++;在你的onDraw中。
现在把它放在onDraw:
if(timer>=SECOND){
//draw your circle here
timer=0;
}
现在你只需询问用户是否触摸了一个圆圈。这是另一件大事,我可能会在我吃完之后做那件事,虽然我建议你自己做,但我认为这不是一项艰巨的任务。