Пересечение / столкновение с растровым изображением и прямоугольниками

Я пытался написать код, когда координаты cx/cy пересекаются с прямоугольником / с, прямоугольник меняет цвет. Это привело меня к стене. Вот мой код для прямоугольников.

for(int k = 0; k<=15; k++){
        k = k * 55;
        for(int i=0;i<=9;i++){
             i = i*55;  
             bounds.set(left+i,top+k,right+i,bottom+k);
             paint.setColor(Color.WHITE);
             canvas.drawRect(bounds, paint);
             if (cx == left || cx == right || cy==top|| cy == bottom){
                 paint.setColor(Color.DKGRAY);
                 canvas.drawRect(bounds, paint);
             }
             i=i/55;
            }    
        k = k/55;
    }   

2 ответа

Решение

Вы пытаетесь раздуть прямоугольник и изменить цвет, когда происходит пересечение?

Обратите внимание, что значения left, right, top а также bottom никогда не меняются, поэтому, если проверка не сработает в первой итерации цикла, она никогда не будет изменена.

Также обратите внимание, что в случае, когда он пересекается, он установит цвет на DKGRAY, но затем снова установит его обратно на WHITE в следующем цикле. Это то, что вы хотите?

Я думаю, что вы хотите сделать что-то подобное. Здесь мы сравниваем с фактическими меняющимися значениями.

for(int k = 0; k<=15; k++){
    k = k * 55;
    for(int i=0;i<=9;i++){
         i = i*55;  
         int boundsLeft = left + i;
         int boundsTop = top + k;
         int boundsRight = right + i;
         int boundsBottom = bottom + k;
         bounds.set(boundsLeft, boundsTop, boundsRight, boundsBottom);
         paint.setColor(Color.WHITE);
         canvas.drawRect(bounds, paint);
         if (cx == boundsLeft|| cx == boundsRight || cy==boundsTop || cy == boundsBottom ){
             paint.setColor(Color.DKGRAY);
             canvas.drawRect(bounds, paint);
         }
         i=i/55;
        }    
    k = k/55;
}   
             for(int i=0;i<=9;i++){
             i = i*55;  
             int boundsLeft = left + i;
             int boundsTop = top + k;
             int boundsRight = right + i;
             int boundsBottom = bottom + k;
             bounds.set(boundsLeft, boundsTop, boundsRight, boundsBottom);
             if(boxes[k][i]==0){
                 paint.setColor(Color.GREEN);
                 canvas.drawRect(bounds, paint);
             }
             else{
                 paint.setColor(Color.DKGRAY);
                 canvas.drawRect(bounds, paint);
             }
             if (cx >= boundsLeft && cx <= boundsRight && cy>=boundsTop && cy <= boundsBottom ){
                 plow.set(boundsLeft, boundsTop, boundsRight, boundsBottom);
                 paint.setColor(Color.DKGRAY);
                 canvas.drawRect(plow, paint);
                 boxes[k][i]=1;
             }
              i=i/55;

            } 
Другие вопросы по тегам