Tommalla2 Napisano Sierpień 29, 2006 Zgłoś Share Napisano Sierpień 29, 2006 Witam. Wyświetlam świat złożony z TSprite'ów([b]ort! 2 warstwy + gracz pomiedzy nimi). Gdy wszystko zaczęło działać, pora była wprowadzić test kolizjii, aby gracz nie przechodził pod drzewami . Jednak używając takiego kodu: [code=Delphi] var Form1: TForm1; mapa: array[0..119,0..119]of TKosNBX[N^VLNKLNW[[NBEC\"#ŚFVvW#w&7ŁDw&7ŁŚĆVVFF4)H4(źŃ4(4)Q55ĄąŃger); var x,y:integer; begin for x:=0 to 119 do fNLLNHBY[BXVWK[XVWK ^Łś&6ĆŁąmąt`4(ąmątąmąt+ay; end; end; constructor TKostka.Create(const A[YYT]NB[XYĆ7DFVÓDvTĆ7DFVÓ 67B-ąŃ%Ń4(4)4(ĄŃ Create(AParent); Image := ImageListItem; ImageIndex:=Id]NBYR[XYK[UYBZYR[XYK[RZYŚVćC&6VGW&RDś7FśfR67BfT6VC6ćvĆRŚ&4(ĄŃ5Ą5 4(4(4) //koniec kostek //rosliny constructor TRoslina. Create(conT[YYT]NBvTĆ7DFVÓDvTĆ7DFVÓ 6%-ąŃ%Ń4(4)4(Ąited Create(AParent,ImageListItem,IdKlatka); Image := ImagS][NB[XYR[^RY]NBYR[XYK[UYVvCŁvRFĆTVvCŚVćC &6VGW&RE&6Ććć6ąĄMŃQŃą`ąądŃ4) if (Sprite is TGracz)then begin TGracz(Sprite).fKo^N]YNB[B[BYX[BXBBGW&RDw&7G&sŚ&VvćW&FVBG&sGRŚć&VGŚ4(4(4)ŃŃQ ŃĄA: TOmegaSprite; const ImageListIt[N[XYS][NBY]FVvW Ś&VvćW&FVB7&VFĄA4(%%1Ń%Ń4(%%idKlatka; width :=Image.TileWidth; height :R[XYK[RZYB[]YNB^[X]VSć3ŁÓć6VCŁÓSć 7VVCŁÓ#ćĆŃ4(ŃџџQMmpleAnimSprite end; //koniec gracza procedure TFoLKPX]J[X NBBZ^[NBNćs'FSŚĆ7Ś&FVvW#Ś&VvVv67&VV6WDĄĄą4)4)4)4)4)=%.Initialize; OmegaScreen1.Initialize; OmegaImageList1.InitBYYR[XYS[]BXUXX]JYYT]LKVvvTĆ7C2vTĆ7BFV5łw&7ŁG'Vć2Vv6]Ńź4)``Ą=%1%1Items[1].TileWidth/2); Gracz.Y:=trunc(OmegaScreen1.Height/2NBXNQXKJYYR[XYSK[XYS][WK[VvBó\"w&7F6ĆĆ6ŁG'VSw&7FV6V6łŁG'4)4(ąĄAąŹŃ4(IĄąŹ for x:=0 to 119 do for y:=0 to 119 do begin readln(pZJNB[JJNBXVWNUKX]JYYT]LVvvTĆ7CvTĆ7BFV5&ćF\"&ćFŚSmąt=%1%1%ŃltQą]dth; mapa[x,y].y:=y*OmegaImageList1.ImageList.Items[0][RZYBXVWK[Y[NBXVFV6V6łŁf6SĆ7Ś&Ł7G'FBbĆ7ŚąŃĄ4(ąmątQIą ŃĄ=egaSprite1, OmegaImageList2.ImageList.Items[liczba],0); X[VWK^ YYR[XY[K[XYS][KĆUvGF&6ĆŁVvvTĆ7C\"vTĆ%ŃmątQą!Ą=%ą%1%Ńl].TileHeight); maparosliny[x,y].DoCollision:=true; X[VWK^[X]YNBX[VsŁVvvVĆ7C\"vTĆ7BFV5śĆ7Ś&FĆTVvBÓ4(ąmątŹ=%1%1%ems[0].TileWidth; maparosliny[x,y].fPusta:=false; eB[HY[BX[VWNU[KX]JYYT&FSVvvTĆ7C\"vTĆ7BFV5śĆ7Ś&ąmątAŃŃ4(4(4(ąąĄąŹ omegaTimer1.Enabled:=true; end; procedure TForm1.Omega[YU[Y[X NBBN]NBY[BYYR[WCWFFSVv67&VV&Vv&VćFW#Vv67&VV6ĆV%64)ŃALŃŃŃĄŃ); if oisdown in OmegaInput1.Keyboard.States then MoveMa CB[HY[YYR[]K^X][[fTÓ3\"ŚV6Rb7&vBVvWCśW&&B7FFWŃĄ554)ąą=%-States then MoveMap(-32,0); OmegaSprite1.Collision;//z tyH[[Y[[H[HHHYHHYHX[HXBÓFFŚf\"ŁÓFFŚ&VvbfĄmątą]ŃĄmą.y>-32) and (mapa[x,y].y<omegascreen1.height) then Y[BXVWK]B[B[BX]BŁÓFFŚf\"ŁÓFFŚ&Vvb&6ĆątĄąmątą]Ń and (maparosliny[x,y].y>-48) and (maparosliny[x,y].y<YYY[KZY ][BY[BYX[VWKW7Ff6RFV&6ĆG&sVćCŚbw&-ąŃŃĄ Ń ŃŹ-ą end; OmegaScreen1.EndRender; end; [/code]Jak już wcześniej wspomniałem w src- przy wywołaniu testu kolizji w TSprite, program się przywiesza, a potem działa z fps 1 . To samo jest przy swiecie 3x3(sprawdzalem, czy to nie zalezy od ilosci kratek) oraz przy probie przeniesienia OnCollision do klasy TGracz. Ja sam dopiero się uczę, więc nie bądźcie zbyt srodzy, bo możliwe, że popełanima jakiś podstawowy bład . Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.