publicstaticbooleanisFree(intxnext,intynext){intx1=xnext/TILE_SIZE;inty1=ynext/TILE_SIZE;intx2=(xnext+TILE_SIZE-1)/TILE_SIZE;inty2=ynext/TILE_SIZE;intx3=xnext/TILE_SIZE;inty3=(ynext+TILE_SIZE-1)/TILE_SIZE;intx4=(xnext+TILE_SIZE-1)/TILE_SIZE;inty4=(ynext+TILE_SIZE-1)/TILE_SIZE;// ou seja ele esta perguntando se e uma instancia de waal taile // se for e true, se nao e false return(tiles[x1+(y1*Word.WIDTH)]instanceofWallTile)||(tiles[x2+(y2*Word.WIDTH)]instanceofWallTile)||(tiles[x3+(y3*Word.WIDTH)]instanceofWallTile)||(tiles[x4+(y4*Word.WIDTH)]instanceofWallTile);}publicvoidrender(Graphicsg){// 30 por que e o tamanho de cada taile!intxstart=(Camera.x/30);intystart=(Camera.y/30);// intxfinal=xstart+(Game.WIDTH/30);intyfinal=ystart+(Game.HEIGHT/30);for(intxx=xstart;xx<=xfinal;xx++){for(intyy=ystart;yy<=yfinal;yy++){// vamos usar um if caso der valores negativos em algumas das direçoesif(xx<0||yy<0||xx>=WIDTH||yy>=HEIGHT){continue;}Tailetaile=tiles[xx+(yy*WIDTH)];taile.render(g);}}
=====================================================================publicvoidtick(){muved=false;// aqui ele vai verificar se ele pode avançar antes mesmo de avança!// assim da para saber se ele vai colidir ou nao antes de avançar!if(right&&Word.isFree((int)(x+speed),this.getY())){muved=true;dir=right_dir;x+=speed;
tipo não mostra erro o jogo abre mas o play não anda mais, antes do código de colisão ele andava, (acho q o código ta funcionando mas devo ter erado em algum calculo e ele ta considerando tudo ao redor como obstáculo por isso não se move)
RoinujNosde
Não deveria retornar false aqui caso seja WallTile?
Pantrol
Não. achei um erro faltou o "! "de return !(tiles[x1… ainda sim ele ta colidindo nos locais errados.
intx2=(xnext+TILE_SIZE-1)/TILE_SIZE;inty2=ynext/TILE_SIZE;intx3=xnext/TILE_SIZE;inty3=(ynext+TILE_SIZE-1)/TILE_SIZE;intx4=(xnext+TILE_SIZE-1)/TILE_SIZE;inty4=(ynext+TILE_SIZE-1)/TILE_SIZE;// ou seja ele esta perguntando se e uma instancia de waal taile // se for e true, se nao e false return!(tiles[x1+(y1*Word.WIDTH)]instanceofWallTile)||(tiles[x2+(y2*Word.WIDTH)]instanceofWallTile)||(tiles[x3+(y3*Word.WIDTH)]instanceofWallTile)||(tiles[x4+(y4*Word.WIDTH)]instanceofWallTile);}publicvoidrender(Graphicsg){// 30 por que e o tamanho de cada taile!intxstart=Camera.x>>4;intystart=Camera.y>>4;// intxfinal=xstart+(Game.WIDTH>>4);intyfinal=ystart+(Game.HEIGHT>>4);for(intxx=xstart;xx<=xfinal;xx++){for(intyy=ystart;yy<=yfinal;yy++){// vamos usar um if caso der valores negativos em algumas das direçoesif(xx<0||yy<0||xx>=WIDTH||yy>=HEIGHT){continue;}Tailetaile=tiles[xx+(yy*WIDTH)];taile.render(g);}
intx2=(xnext+TILE_SIZE-1)/TILE_SIZE;inty2=ynext/TILE_SIZE;intx3=xnext/TILE_SIZE;inty3=(ynext+TILE_SIZE-1)/TILE_SIZE;intx4=(xnext+TILE_SIZE-1)/TILE_SIZE;inty4=(ynext+TILE_SIZE-1)/TILE_SIZE;// ou seja ele esta perguntando se e uma instancia de waal taile // se for e true, se nao e false return!(tiles[x1+(y1*Word.WIDTH)]instanceofWallTile)||(tiles[x2+(y2*Word.WIDTH)]instanceofWallTile)||(tiles[x3+(y3*Word.WIDTH)]instanceofWallTile)||(tiles[x4+(y4*Word.WIDTH)]instanceofWallTile);}publicvoidrender(Graphicsg){// 30 por que e o tamanho de cada taile!intxstart=Camera.x>>4;intystart=Camera.y>>4;// intxfinal=xstart+(Game.WIDTH>>4);intyfinal=ystart+(Game.HEIGHT>>4);for(intxx=xstart;xx<=xfinal;xx++){for(intyy=ystart;yy<=yfinal;yy++){// vamos usar um if caso der valores negativos em algumas das direçoesif(xx<0||yy<0||xx>=WIDTH||yy>=HEIGHT){continue;}Tailetaile=tiles[xx+(yy*WIDTH)];taile.render(g);}