Dalej na tym stoję.. Spróbujmy krok po kroku.
Tak wygląda moja klasa z pociskami:
public class Bullet extends GameObject{
class Point2d{
int x,y;
public Point2d(int x, int y)
{
this.x=x;
this.y=y;
}
}
private int targetX,targetY; //Współrzędne kursora myszki
private double a,b; // Współczynniki prostej
public Bullet(int x, int y, ID id, Game game, int targetX, int targetY, double accuracy) { //x,y współrzędne lufy broni, accuracy to ma być maksymalna wartość kąta rozrzutu broni.
super(x, y, id, game);
this.targetX=targetX;
this.targetY=targetY;
LinearFunction();
}
public void tick(Game g) {
g.handler.removeBullet(this); // handler przechowuje obiekty gry i je wszystkie updatuje, strzal ma zniknac po narysowaniu wiec jest odrazu usuwany
}
public void LinearFunction() // wyznaczenie wspolczynnikow prostej
{
this.a = (double)(targetY-y)/(targetX-x);
this.b =(double)(y - (this.a * x));
}
}
Mapa jest zapisana w pliku tekstowym, obecnie mamy tylko 2 pola - albo ściany albo podłogę.
Przykładowy plik z mapą:
1;1;1;1;1
1;2;2;2;1
1;2;2;2;1
1;2;2;2;1
1;1;1;1;1
1 - ściany
2 - pola po których można chodzić
Każde pole jest kwadratem o wielkości 32x32.
Po wczytaniu takiego pliku rysuję go w następujący sposób:
public void Draw(Graphics g)
{
for(int i=0; i<VerticalTiles; ++i)
{
{
for(int j=0; j<HorizontalTiles; ++j)
{
current = mapTiles.grabImage(map[j][i], 1, 32, 32); // Wycinam odpowiedni obrazek z BufferedImage i go rysuje. map[j][i] to tablica dwuwymiarowa przechowująca wyżej wypisaną mapę, tylko bez ";".
g.drawImage(current, j*32, i*32, null);
}
}
}
}
Sporo tego kodu jest, ale chyba tyle wystarczy do tego problemu.
Czyli jak już wyznaczyłem równanie prostej, jak dalej mogę sprawdzić czy koliduje ze ścianą, mam przelecieć pętlą przez wszystkie ściany i sprawdzać, czy wartość tej funkcji liniowej się w niej zawiera dla wszystkich trzydziestu dwóch x? Nie widzę tego.