Пересечение / столкновение с растровым изображением и прямоугольниками
Я пытался написать код, когда координаты 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;
}