Tur ir visvisādi varianti.
Vienkāršotā gadījumā, ja tev karte ir kā rūtiņas, tad var vilkt staru no savas pozīcijas uz mērķi, un skatīties, vai stars krusto sienu, vai nē. Ja nekrusto, un staru var aizvilkt līdz tavam objektam, tad tas nozīmē, ka objekts ir redzams.
Efektīvi to var darīt ar
raycasting'u kā darīja Wolfenstein 3D:
http://www.permadi.com/tutorial/raycast/
Nevajag sabīties no 3D. Pats algoritms darbojas divās dimensijās. Wolfenstein 3D iegūto rezultātu izmantoja, lai renderētu 3D telpu.
Visa sāls ir
Figure 14 bildē. Raycastings pēc būtības ir Bresanhēma līnijas zīmēšanas algoritms (rūtiņu apstaigšana, velkot līniju aiz sevis - tb tavā gadījumā stars no acs līdz objektam):
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
Šeit kautkāds piemērs, kas sadursmes ar šķēršļiem meklē pikseļu līmenī (būs ļoti neefektīvi un dārgi, ja liela karte):
http://www.codeproject.com/KB/GDI-plus/ ... ing2D.aspx Šo vispārinot - pārtaisot pikseļus par lielākām rūtiņām - dabūsi augstāk minēto Wolfenstein 3d stila raycasting'u. W3D katra rūtiņa, caurstaigājama vai necaurstaigājama, bija viens bloks - sienas klucītis, durvis, galds, utml.
Ja karte nav pa rūtiņām, un šķēršļi var būt patvaļīgi, tad ir sarežģītāk. Vienkāršākais variants būtu izmantot kādu 2d fizikas bibliotēku, kas tev kolīzijas pati sameklēs. Domāju, ka Box2D vai Chipmunk to vajadzētu mācēt.
Ja gribi pats rakstīt, tad vajadzēs ņemt palīgā ģeometriju un mācēt atrast taisnes/nogriežņa krustpuntu ar tavu šķēršļu objekta formām (kvadrāti/sfēras/nogriežņi/utt). Un lai to visu darītu efektīvāk nāksies izmantot kādu telpas dalīšanas algoritmu pa daļām. Tur visādi BSP, QuadTree, utml.