跳跃时矩形相交不起作用

时间:2017-08-21 10:28:33

标签: java android

我正在用android做游戏。玩家是一个必须跳过障碍物的矩形。当我跳跃时,我减少高度和y坐标。当我运行游戏时,矩形正在跳跃,但是当我试图跳过一个障碍时,它仍在击中它。所以我想我忘记改变一个值,但我不知道什么价值。抱歉我的英语不好,我是编码的初学者。

这是我的Player类:

package com.example.niek.speelveld;

import android.graphics.Canvas;
import android.graphics.Paint;
/**
 * Created by Niek on 15-8-2017.
 */

public class Player extends GameObject {
    private int score;
    private boolean up;
    private boolean playing;
    private long startTime;
    private int h = 0;
    private boolean jump;
    public Player(int x , int y){
        super.x = x;
        super.y = y;

        width = 100;
        height = GamePanel.HEIGHT;

        score = 0;
        startTime = System.nanoTime();
    }
    public void setUp(boolean b){up = b;}

    public void update(){
        long elapsed = (System.nanoTime()-startTime)/1000000;
        if(elapsed>100){
            score++;
            startTime = System.nanoTime();
        }
        if(up && h == 0){
            jump = true;
            up = false;
        }
        if (jump) {
            if (h < 120) {
                h = h + 7;
                height = height - 7;
                y = y - 7;
            } else {
                jump = false;
            }
        } else {
            if (h > 0) {
                h = h - 7;
                height = height + 7;
                y = y + 7;
            }
        }
    }

    public void draw(Canvas canvas){
        Paint myPaint = new Paint();
        myPaint.setStyle(Paint.Style.STROKE);
        myPaint.setStrokeWidth(7);
        canvas.drawRect(x, y, width + x, height, myPaint );
        myPaint.setStrokeWidth(1);
        canvas.drawText("HIGHSCORE  " + score, GamePanel.WIDTH - 100 , 0+myPaint.getTextSize(), myPaint);
    }
    public int getScore(){return score;}
    public boolean getPlaying(){return playing;}
    public void setPlaying(boolean b){playing = b;}

    //public void resetScore(){score = 0;}

    public boolean getJump() {
        return jump;
    }
}

在我的Gamepanel课程中,我使用了这两种方法。当我打电话给类障碍时.get(i).update();它只更新x值,以便向玩家移动。

 public void update(){
        if(player.getPlaying()) {
            bg.update();
            player.update();

            //Add obstacles with timer
            long obstacleElapsed = (System.nanoTime()-obstacleStartTime)/1000000;

            if(obstacleElapsed >(2000 - player.getScore()/4)){
                obstacles.add(new Obstacle(BitmapFactory.decodeResource(getResources(), R.drawable.rsz_spike1), WIDTH + 10, HEIGHT - 51, 14, 51, player.getScore()));

                //reset timer
                obstacleStartTime = System.nanoTime();
            }


        }
        //Loop through every obstacle and check collision
        for(int i = 0; i<obstacles.size(); i++){
            obstacles.get(i).update();

            if (collision(obstacles.get(i), player)) {
                 obstacles.remove(i);
                 player.setPlaying(false);

                 Intent intent = new Intent(c, Result.class);
                 intent.putExtra("SCORE", player.getScore());
                 c.startActivity(intent);
                 break;
             }
             //Remove obstacles that are out of the screen
             if (obstacles.get(i).getX() < -100) {
                 obstacles.remove(i);
                 break;
             }
         }
    }

    public boolean collision(GameObject o, GameObject p){
        if(Rect.intersects(o.getRectangle(), p.getRectangle())){
            return true;
        }
        return false;
    }
 @Override
    public void draw(Canvas canvas){
        //Get Width and Height from screen
        final float scaleFactorX = (float)getWidth()/WIDTH;
        final float scaleFactorY = (float)getHeight()/HEIGHT;
        if(canvas!=null) {
            final int savedState = canvas.save();
            canvas.scale(scaleFactorX, scaleFactorY);
            bg.draw(canvas);
            player.draw(canvas);
            //Draw obstacles
            for(Obstacle o : obstacles ){
                o.draw(canvas);
            }
            canvas.restoreToCount(savedState);
        }
    }

最后,Player和Obstacle类扩展了Gameobject,其中我有getRectangle方法。

 public Rect getRectangle(){
        return new Rect(x, y, x+width, y+height);
    }

0 个答案:

没有答案