Mikä olisi yksinkertaisin tapa tarkistaa pallon säteellä olevat pikselit,siis että ovatko ne osuneet palikkaan?
Kokeilin tälläistä ja ei tunnu oikein toimivan.
Function CheckUpHits(b%) ox%=-1 oy%=-1 bx%=BallX(b) by%=BallY(b) Color 255,255,255 If OSUMA=False For paikka%=0 To paikka<7 bax%=bx+uphitx(paikka) bay%=by+uphity(paikka) ;Plot bax,bay For y%=0 To 14 For x%=0 To 10 If BrickOn(y,x)=1 Then If (bax>BrickLx(y,x)-1 And bax<BrickLx(y,x)+47 And bay>BrickLy(y,x)-1 And bay<BrickLy(y,x)+1) Then OSUMA=True If ox=-1 Then ox=x If oy=-1 Then oy=y If (ox>-1 And ox<11 And oy>-1 And oy<15) Then BrickOn(oy,ox)=0 If (HEAVYBALL=False) Then BallDir(b)=360-BallDir(b); BallX(b)=BallEX(b) BallY(b)=BallEY(b) End If End If End If End If Next Next Next End If End Function
Siis tein noita funktioita neljä,joka suuntaan yhden.
Banaani sille joka kertoo järkevämmän tavan....:)
Asiassa voinee helpottaa Pythagoraan lause.
Voisitko selostaa ideaasi hieman tarkemmin?
Pythagoraan lauseen avulla saat selvitettyä karteesisissa koordinaateissa kahden pisteen välisen etäisyyden. Kaikki pisteet joiden etäisyys ympyrän keskipisteestä on ympyrän sädettä pienempi, ovat ympyrän sisällä ja siten törmänneet ympyrään.
On hölmöä tarkistaa jokainen pikseli erikseen, kun voi yksinkertaisella matematiikalla laskea, onko ympyrä osunut vaakasuorassa olevaan suorakulmioon. Olkoot laatikon kulmat (x0, y0) ja (x1, y1) ja ympyrän keskipiste (xk, yk) ja säde r. Jos keskipiste on x-akselilla laatikon reunojen välissä (x0 <= xk <= x1), tarkistetaan törmäys y-akselilla helposti katsomalla, onko y-koordinaatti reunojen välissä tai enintään säteen mitan päässä (y0 - r < yk < y1 + r). Sama toimii tietenkin myös toisin päin. Jos taas ympyrä on laatikkoon nähden kulmittain, tarkistetaan Pythagoraan lauseen avulla, onko ympyrän keskipiste alle säteen päässä laatikon kulmasta.
Function Lahempana(dx, dy, r) Return dx * dx + dy * dy < r * r End Function Function Osuma(x0, y0, x1, y1, xk, yk, r) ; Sivujen suuntaiset tilanteet: If x0 <= xk And xk <= x1 Then Return y0 - r < yk And yk < y1 + r If y0 <= yk And yk <= y1 Then Return x0 - r < xk And xk < x1 + r ; Kulmittaiset tilanteet: If xk < x0 And yk < y0 Then Return Lahempana(x0 - xk, y0 - yk, r) If xk > x1 And yk < y0 Then Return Lahempana(x1 - xk, y0 - yk, r) If xk > x1 And yk > y1 Then Return Lahempana(x1 - xk, y1 - yk, r) If xk < x0 And yk > y1 Then Return Lahempana(x0 - xk, y1 - yk, r) End Function
Ymmärrän kyllä tuon periaatteen mutta mitä tuo funktio osuma palauttaa?
Lisäys: Palauttaako se true vai false?
Lisäys:
Sain toimimaan niin että pallo syö nyt palikoita käyttäen metabolixin funktioita.
Nyt pitäs varmaan luoda pari globaalia muuttujaa jotka kertoo törmäyksen että onko se ylös/alas vai vasen/oikea törmäys?
No kokeilen tässä intoa täynnä.....:)
Lisäys: Sain toimimaan täydellisesti. Kiitos kaviaari ja Metabolix!:)
Aihe on jo aika vanha, joten et voi enää vastata siihen.