dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Delphi, sienu(textuuru) necaurejamiiba!!

 
dev.gamez.lv Forum Index -> OpenGL
View previous topic :: View next topic  
Author Message
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: Fri Feb 01, 2008 7:07 pm    Post subject: Delphi, sienu(textuuru) necaurejamiiba!!

Tātad, Man ir vajadzīga palīdzība ar Delphi(OpenGL). Mums tika uzdots uzdevums uztaisīt sienas necaurejamas (pielikšu failu ar sourci), kā to vislabāk izdarīt????
Code:

if X>2 then X:=X-0.01;
if Z>2 then Z:=Z-0.01;

Labāku par šito sūdu neēsmu izdomājis!

http://yy.lv/download.php?f=101449

Paldies! :)

P.S atvainojos ka rakstu par ātru un nesakarīgi, jo es to daru tur ko man to uzdeva Very Happy
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Feb 01, 2008 7:24 pm    Post subject:

Un kas tieši tev nestrādā vai nesanāk kā gribi?
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Feb 01, 2008 7:29 pm    Post subject:

stabils variants ir pāriet uz iepriekšējo pozīciju pie sadursmes ar sienu..

daudz labāks variants ir atsevišķi testēt x un y ātrumus -
ja (x+x_ātrums,y+y_ātrums) neatrodas sienā, tad x = x+x_ātrums;y = y+y_ātrums
ja nē, tad līdzīgi testēt:
(x+x_ātrums,y) un (x,y+y_ātrums), un, ja visi saduras, tad nekustēties!

btw, y asi pamaini ar z manos tekstos, ja tā esi pieradis strādāt..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: Fri Feb 01, 2008 7:44 pm    Post subject:

bubu protams ka nesanāk kā gribu, man vajag, lai apstājas pie sienas, nevis kad es eju kilometru no sienas un vēlāk apstājos viņš mani pa 0.01 punktiņam lēnām noliktu mani pie sienas Laughing
snake5 izklausās lādzīgi, tikai man smadzenes par mazu, lai izdomātu kodu. Varu izdomāt kaut ko līdzīgu tikai ar kļūdām :/, ja nebūtu par grūtu varētu vienu piemēriņu uz 1 sienas Razz
Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Fri Feb 01, 2008 7:53 pm    Post subject:

Nē, stabils variants būtu:
ja pozīcija+ātrums iet cauri sienai, tad aprēķināt tuvāko distanci līdz sienai un nolikt tur objektu, citādi parvietoties par ātrums vienībām.
P.S. ātrums un pozīcija ir vektori.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Feb 01, 2008 8:29 pm    Post subject:

nu tur viss kods bija paskaidrots vārdiski..
bet kodu es pateikt nevarēšu priekš delphi..
nezinu, kas tev tur kā glabājas..
vienīgi paskaidrot..
x - pozīcijas vektora x koordināte
y(z) - ... y(z) koordināte
x_ātrums - ātruma vektora x
y_ātrums(z_ātrums) - ātruma vektora y(z)
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: Fri Feb 01, 2008 8:58 pm    Post subject:

Tagad tik pamanīju, ka tas fails neiet tāka vajag, atveriet to ar WinRAR Smile
Back to top
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Feb 01, 2008 9:16 pm    Post subject:

^suny^ wrote:
Tagad tik pamanīju, ka tas fails neiet tāka vajag, atveriet to ar WinRAR Smile

viņš tāpat neies..
tas exe fails saka, ka trūkst kautkādu failu un galā - black screen..
gadījumā neesi failu nosaukumus piesaistījis konkrētai mapei? (pilnie, ne relatīvie failu nosaukumi, piemēram "tex.bmp" vietā ieliki "C:/MyProjects/WallGo/tex.bmp")
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: Fri Feb 01, 2008 9:25 pm    Post subject:

snake5 viss ir daudz grūtāk nekā tu domāji Smile
parasti vienu no tiem .txt failiem , viņu vārdu, no°maini un map.txt
vienkārši es tur biju mēģinājis likt visādus vertices un faces agrāk, vnk samaini nmap2.txt uz map.txt un viss aizies
Back to top
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Feb 01, 2008 9:50 pm    Post subject:

nu jā, tagad viss ok..
hmm, 16 fps.. daudz.. tāds ir limits?
nu anyway, tu pats gan jau proti delphi labāk kā es, tā kā atļauju to manu ideju ielikt tev! Very Happy
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: Fri Feb 01, 2008 9:52 pm    Post subject:

snake5 wrote:

ja (x+x_ātrums,y+y_ātrums) neatrodas sienā, tad x = x+x_ātrums;y = y+y_ātrums
ja nē, tad līdzīgi testēt


Emmm, es nevaru saprast ko tas līdzīgi testēt nozīmē ?

Code:

if (X+Hand.Pos.X, Z+Hand.Pos.Z) not Face then
      X := X+Hand.Pos.X;
      Z := Z+Hand.Pos.Z;
        else
 // ...



Vai pareizi uzrakstīju?? Embarassed un ko tas par testēšanu nozīmē :/
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Feb 01, 2008 10:05 pm    Post subject:

Tev tas vispār kompilējas, ko pats uzrakstīji?

Vienkāršākajā gadījumā raksti aptuveni šādi:
Code:
next_pozīcija_x := x + ātrums_x;
next_pozīcija_y := y + ātrums_y;
if next_pozīcija NEATRODAS sienā then
begin
    x := next_pozīcija_x;
    y := next_pozīcija_y;
end;

To ko rakstīt if izteiksmē, zini tikai tu. Man nav ne jausmas kā tu nosaki kolīziju ar sienu.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Feb 01, 2008 10:27 pm    Post subject:

šeit prasās pēc bboxiem..
ray - plane collision ir kas grūtāks..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: Tue Feb 05, 2008 10:32 pm    Post subject:

Hmm, man nesanāknemaz tā kā tu teici, visu laiku prasīja BOOLEAN, bet es nesaprotu kāpēc, jo piemērā kādu mums tur iedeva nebija BOOLEAN tipa.
Biju pamēģinājis nedaudz savādāk pārveidot šo te, un sanāca tā
Code:

procedure TfrmGL.Collision;
var
  NextXPos : glFloat;
  NextZPos : glFloat;

  I : integer;
begin
  NextXPos := X+MoveSpeed;
  NextZPos := Z+Movespeed;

    if NextXPos <= Face[i].V1 or Face[i].V2 or Face[i].V3 or Face[i].V4
    if NextZPos <= Face[i].V1 or Face[i].V2 or Face[i].V3 or Face[i].V4
        then
          begin
            X := X+NextXPos;
            Z := Z+NextZPos;
          end;
end;


Tā rāda vienu kļūdu ka vajadzētu būt THEN, pirmā if'a rindas beigās.
Sākumārakstīju and, bet kad ierakstu tur and vienalga prasa THEN, jau bija apriebies. NU ieliku es tur to THEN, sapriecājos, kļūdu nebija, palaižu programmu, !neiet, rakstu šeit forumā postu.
Ko darīt?

Ā, un vēl man ir 1 unikālais veids kā aizsmērēt tās sienas, vēlāk, rīt, iepostošu to veidu! Bet jāizdomā pašam savs veids.

Gaidu racionālus risinājumus Smile
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Tue Feb 05, 2008 10:59 pm    Post subject:

Racionāls risinājums būtu sākt ar paskāla pamatiem un iemācīties paskāla sintaksi.
if izteiksme pierakstās šādā veidā:
Code:
if X then Y [else Z];

X ir izteiksme, kas dod boolean tipa vērtību, Y un Z ir patvaļīgas komandas. else Z daļa ir opcionāla.

boolean tipa vērtību, piemēram, dod izteiksmes, kurās ir salīdzināšanas: A > B vai A != B, utt... A un B šeit var būt, piemēram, jebkādas skaitliskas vērtības.

Paskālā vēl ir dažādi operatori - and, or, not. Ar tiem var apvienot vairākas loģiskās izteiksmes:
A and B - rezultāts būs true tad un tikai tad, ja gan A, gan B būs true
A or B - rezultāts būs false tad un tikai tad, ja gan A, gan B būs false
not A - rezultāts būs pretējs A vērtībai (true->false, false->true)

Tagad par tavu mega if izteiksmi:
1) pirmām kārtām if izteiksmē ir sintaktiska kļūda. Ja raksta divus if pēc kārtas (kā tev īsti neisaku rakstīt, jo viegli saputroties), tad sintakse ir šāda:
Code:
if X1 then if X2 then Y;

2) otrām kārtām tev tur ir bezjēdzīga loģiskā izteiksme (tas X manā piemērā): A <= B or C or D .. - izteiksme būs true, ja A būs mazāks/vienāds par B VAI C būs true (jeb nenulle vērtība) VAI D būs true (nenulle).
Tātad, ja Face[i].V3 saturēs skaitli 4, tad if izpildīsies, jo izteiksmes vērtība būs true - neatkarīgi no citiem mainīgajiem.

Ja tu gribi vienu skaitli salīdzināt ar daudziem citiem skaitļiem, tad tev tie visi būs jāsalīdzina ar to konkrēto, nevis tikai vienu reizi. Skat: A < B and/or A < C and/or A < D ... and/or ir jāliek atkarībā, kā vajag izpildīties šiem nosacījumiem - vai nu visiem jābūt patiesiem vienlaicīgi, vai arī vismaz vienam no tiem.

Palasi paskāla pamatus. Delphi helps arī ir laba vieta, kur lasīt tos.
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> OpenGL All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group