我有一个应用程序有一个方块,每隔1.5秒在屏幕上移动一次,每次点击它都会得到一个点。我试图在每次点击方块时将颜色变为随机颜色。此外,我希望在较硬模式的设置下有一个选项,其中方块每隔0.7秒移动一次。
这是我的绘制方法:
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLUE);
Paint dotPaint = new Paint();
canvas.drawRect(dotX, dotY, dotX + 60, dotY + 60, dotPaint);
dotPaint.setColor(Color.WHITE);
dotPaint.setTextSize(60);
canvas.drawText("Score: " + score, 20, 60, dotPaint);
这是我的onTouch方法:
public boolean onTouch(View v, MotionEvent event) {
if (detectHit( (int)event.getX(), (int)event.getY() )) {
score++;
invalidate();
}
return false;
我不太确定如何使广场的颜色每次点击都会改变。
Also, here is my menu items:
public boolean onOptionsItemSelected(MenuItem item) {
// handle menu item selection
switch (item.getItemId()){
case R.id.item1:
newGame();
return true;
case R.id.item2:
quit();
return true;
case R.id.item3:
harder();
return true;
default:
return super.onOptionsItemSelected(item);
and my harder method:
public void harder(){
timer.schedule(task, 0, 700);
}
答案 0 :(得分:1)
好吧只是一个建议,将你的detectHits()方法从(int ...,int ...)更改为(MotionEvent ...)会缩短调用。
对于随机颜色,您将能够以编程方式生成一个颜色。
您可能希望使用此Color.rgb(int red, int green, int blue)
方法。
所以现在你要做的是,生成随机整数以生成颜色,就像这样
Random rnd = new Random();
Color rndCol = Color.rgb(rnd.nextInt(254), rnd.nextInt(254), rnd.nextInt(254));
现在你将应用这种颜色。 首先,它不鼓励在onDraw期间分配对象,因此将Paint的分配移动到onCreate / onResume并使其成为进程中的字段。然后你必须像这样调整你的onTouchMethod。
public boolean onTouch(View v, MotionEvent event) {
if (detectHit(event)) {
changeColor();
score++;
invalidate();
}
return false;
private void changeColor(){
Random rnd = new Random();
Color rndCol = Color.rgb(rnd.nextInt(254), rnd.nextInt(254), rnd.nextInt(254));
dotPaint.setColor(rndCol); // this should be a field by now and accessible from within this method
}
在将速度从1.5改为0.7的情况下,使时间成为类中的一个字段,并在某一点减少该值以减少计时器。
由于你没有显示你目前如何每1.5秒移动一个方格我不能为你调整代码。