2016-11-15 4 views
0

Итак, я создал игру, в которой вы можете переместить своего персонажа, и вам нужно передать строки с этим персонажем, но у меня есть 1 проблема. Когда первая линия достигает нижней части моего экрана, тогда счет начинает отсчет. Я хочу сделать так, чтобы, когда мой персонаж пропустил пробел в строках, счет будет +1. Что мне делать? РЕДАКТИРОВАТЬ: Также счет подсчитывается, когда последняя линия достигает дна!Я хочу создать систему счисления +

if (obstacles.get(obstacles.size()-1).getRectangle().top >= Constants.SCREEN_HEIGHT){ 
     int xStart = (int) (Math.random()*(Constants.SCREEN_WIDTH- playerGap)); 
     obstacles.add(0, new Obstacle(obstacleHeight, color, xStart, obstacles.get(0).getRectangle().top - obstacleHeight - obstacleGap, playerGap)); 
     obstacles.remove(obstacles.size()-1); 

     score++; 

    } 

} 

public void draw(Canvas canvas){ 
    for(Obstacle ob : obstacles) 
     ob.draw(canvas); 
    Paint paint = new Paint(); 
    paint.setTextSize(100); 
    paint.setColor(Color.GREEN); 
    canvas.drawText("" + score, 50, 100 + paint.descent()- paint.descent(), paint); 

РЕДАКТИРОВАТЬ:

int currY = -5*Constants.SCREEN_HEIGHT/4, rect; 
    while(currY < 0){ 
     int xStart = (int) (Math.random()*(Constants.SCREEN_WIDTH-  playerGap)); 
     obstacles.add(new Obstacle(obstacleHeight, color, xStart, currY, playerGap)); 
     currY += obstacleHeight + obstacleGap; 
    } 
    if (obstacles.get(obstacles.size() - 1).getRectangle().top >= currY) { 
     score++; 
    } 

EDIT2:

private void populateObatacles(){ 
    int currY = -5*Constants.SCREEN_HEIGHT/4; 
    while(currY < 0){ 
     int xStart = (int) (Math.random()*(Constants.SCREEN_WIDTH- playerGap)); 
     obstacles.add(new Obstacle(obstacleHeight, color, xStart, currY, playerGap)); 
     currY += obstacleHeight + obstacleGap; 
    } 
} 

EDIT3:

if (obstacles.get(lastLineScored-1).getRectangle().top >= currY) { 
      score++; 
      lastLineScored--; 
     } 

     if (obstacles.get(obstacles.size()-1).getRectangle().top >= Constants.SCREEN_HEIGHT){ 
      int xStart = (int) (Math.random()*(Constants.SCREEN_WIDTH- playerGap)); 
      obstacles.add(0, new Obstacle(obstacleHeight, color, xStart, obstacles.get(0).getRectangle().top - obstacleHeight - obstacleGap, playerGap)); 
      obstacles.remove(obstacles.size()-1); 
      lastLineScored++; 
     } 
     } 
    } 

public void draw(Canvas canvas){ 
    for(Obstacle ob : obstacles) 
     ob.draw(canvas); 
    Paint paint = new Paint(); 
    paint.setTextSize(100); 
    paint.setColor(Color.GREEN); 
    canvas.drawText("" + score , 50, 100 + paint.descent()- paint.descent(), paint); 

EDIT4: менеджер препятствие http://pastebin.com/6E77QtHj вывода bstacle http://pastebin.com/p33mPrat

ответ

0

Измените свой тест. Вместо того, чтобы проверять, превышает ли верхняя часть строки значение SCREEN_HEIGHT, проверьте, больше ли она, чем координата Y символа. Кроме того, вы должны проверить с каждым

if (obstacles.get(obstacles.size()-1).getRectangle().top >= /** character Y coordinate */) { 
    score++; 
} 

if (obstacles.get(obstacles.size()-1).getRectangle().top >= Constants.SCREEN_HEIGHT){ 
    int xStart = (int) (Math.random()*(Constants.SCREEN_WIDTH- playerGap)); 
    obstacles.add(0, new Obstacle(obstacleHeight, color, xStart, obstacles.get(0).getRectangle().top - obstacleHeight - obstacleGap, playerGap)); 
    obstacles.remove(obstacles.size()-1); 
} 

EDIT: Вы должны следить за тем, какие строки уже находятся в прошлом характера и только до партитуры, когда идет новая линия мимо. Вам нужно будет сохранить индекс, строки которого уже были забиты. Поэтому создайте поле для хранения этого индекса; назовем это lastScoredLine. Он должен быть инициализирован до obstacles.size(). Вы должны будете отрегулировать это поле всякий раз, когда линия падает с экрана.

if (obstacles.get(lastLineScored-1).getRectangle().top >= /** character Y coordinate */) { 
    score++; 
    lastLineScored--; 
} 

if (obstacles.get(obstacles.size()-1).getRectangle().top >= Constants.SCREEN_HEIGHT){ 
    int xStart = (int) (Math.random()*(Constants.SCREEN_WIDTH- playerGap)); 
    obstacles.add(0, new Obstacle(obstacleHeight, color, xStart, obstacles.get(0).getRectangle().top - obstacleHeight - obstacleGap, playerGap)); 
    obstacles.remove(obstacles.size()-1); 
    lastLineScored++; 
} 
+0

Я отредактировал это сообщение. Это должны быть координаты Y? –

+0

@nilsllucans - Если это координата Y символа, тогда да. Однако мой ответ неверен, потому что он проверяет только последнюю строку. (Мой ответ предполагает, что когда вы ссылались на «строки», это то же самое, что и элементы массива «препятствия».) –

+0

@nilsllucans - я обновил свой ответ, чтобы исправить ошибку. –

Смежные вопросы