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

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

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;
    }   

person Mag    schedule 30.11.2014    source источник
comment
Вы можете использовать класс Rectangle следующим образом: Rectangle r1 = new Rectangle(x, y, width, height); ... если (r1.intersects (r2))....   -  person Bene    schedule 01.12.2014


Ответы (1)


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

Обратите внимание, что значения 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;
}   
person Andrew Shepherd    schedule 30.11.2014
comment
Я хотел бы, чтобы это был постоянный прямоугольник за изменением прямоугольника. Это отличный ввод, теперь он выполняется строка за строкой или столбец за столбцом. Если он движется влево или вправо, он меняет цвет на весь столбец, если он идет сверху вниз, он меняет цвет строки на темно-серый. - person Mag; 01.12.2014