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

ložu sistēma šaušanas spēlē - kā?
Goto page Previous  1, 2, 3, 4, 5  Next
 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Tue Nov 13, 2007 10:16 pm    Post subject:

Debugo, neko citu tev nevar pateikt. Debugerim ir jābūt programmētāja labākajam draugam.

Kur tev tajā kodā it iterators palielina vertību? (tipa for (int i=0; i<N; ...) - ... daļa).
Nedrīkst salīdzināt jau no vektora izņemta iteratora vērtību ar dajebko citu (tb notiek tas Bullet.erase(it) un tu salīdzini while (it != itend).

Kā arī ņem vērā Storm pseidokodu. Sadali savu to ciklu divās daļās - updeitā un zīmēšanā - citādi tu esi piesaistījis updeitu programmas freimreitam. Un tas, kā tika izlemts tai citā topikā, nav labi.

Nav jēgas programmēt C++, ja neizmanto klases un to iespējas. Klase nav tikai dati. Klase ir arī metodes kā operēt ar datiem. Padari tos datus privātus un atļauj ar tiem operēt tikai caur klases metodēm (getteri/setteri neskaitās).

Kā arī izskatās, ka tu tur atmiņu līko - bēc Bullet.erase(it) izsaukšanas, kurš atbrīvos it atrodošos Bullet* pointeri?
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Tue Nov 13, 2007 10:27 pm    Post subject:

ok, mēģināšu veidot mūsdienīgu dzini un atdalīt zīmēšanu no updeita..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Tue Nov 13, 2007 10:32 pm    Post subject:

Taadaa gadiijumaa, ja nav nosleepums, kad tad taa iztiiriishana notiks? kaa tu zinaasi ka jaaiztiira? Razz Paarbaudiisi katru gaames updeitu vai visas lodes beigtas? XD
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 Nov 13, 2007 10:36 pm    Post subject:

Kur nu mūsdienīgu.. Pat vecajam 92.gada Wolfenstein 3D updeits ir atdalīts no zīmēšanas.

Tas ir jebkuras programmas pamatā, ne tikai spēļu - katram koda fragmentam vajadzētu būt pēc iespējas vienkāršam (iespēju robežās). Tam būtu jādara tikai viena konkrēta lieta. Nevajag visu samest vienā katlā (ciklā/funkcijā/klasē). Tādējādi pašam tikai vieglāk būs labot konkrētas lietas (tb gribēsi labot updeita kodu, nevajadzēs aizdomāties par to, lai nesalauztu renderēšanas kodu), kā arī mazāk iespēju ielaist bugus.

Taču diemžēl reāli tas ne vienmēr ir tik vienkārši un skaisti... Taču to paturēt prātā un censties tādu kodu rakstīt nenāk par ļaunu.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Tue Nov 13, 2007 10:40 pm    Post subject:

Storm: iztīrīšana būs starp līmeņiem Smile easy, eh?
bubu: man spēlētāja klases viena funkcija (OnFrameMove) ir vienā bleķī, bet tāpat viss diezgan normāli saprotams Very Happy
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Tue Nov 13, 2007 11:13 pm    Post subject:

Nebuus saprotams ja buus piemeeram 8000 rindinjas gaamee Razz
Par atminju... Ok, buleti, bet tev taks veel buus kaadi objekti ko lietosi? tos arii, piekaast, liimenja beigaas? Very Happy
Back to top
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Tue Nov 13, 2007 11:16 pm    Post subject:

nu ložu skaits jau bieži var mainīties, citi objekti jau tā nemainās!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Tue Nov 13, 2007 11:24 pm    Post subject:

Pretinieki saus lodes? Tu sausi lodes. Partiklju effekti? Kad pataisi par beigtu kaadu nabagu un aizskrien taalaak vai tev veel vajag glabaat to objektu? Un padomaa cik taadu objektu buus... un visi saus, duumii kuupees, etc un memorys tik pildiisies... nu nezinu gan kas taa par speeli tad Very Happy Ok, platformers, bet taalaak? Nebuus vieglaak ja tas viss jau buus iegaajies un automaatiski domaasi uz prieksu un rakstiisi kodu saprotamu, komenteetu(loti silti iesaku... laikam kad tev buus vairaak nekaa tie paaris k rindinju...), un taadu kas netaisa bardaku atminjaa?

P.S Cik es zinu (kaut kaa fenomenaali arii par c++ Very Happy) tad Vectori ir vairaak domaati prieks random piekljuusanas, ar leenaaku izniicinaasanu un ievietosanu, kameer lists vairaak domaats prieks aatras lineaaras piekjuves un aatraakas ievietosanas un elemenu izniicinaasanas... Pie kuriem tu pieskaiti lodes? Razz
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 Nov 13, 2007 11:41 pm    Post subject:

lists toties ir drausmīgi nedraudzīgs pret procesora kešatmiņu, kurai savukārt patīk lineārs piekļuves veids (vektors). lists arī šausmīgi fragmentē heap-atmiņu, ja bieži liek iekšā/ārā elementus. Uz katru ielikšanu - new izsaukums, uz katru izņemšanu - delete izsaukums.

Ja lodes ir jāvāc ārā/iekšā no tā vektora, tad kā es darītu - izdalītu atmiņu noteikta daudzuma elementiem vektorā ar reserve (piemēram 1000). Tad kad vajag ielikt elementu vektorā, tad vienkārši push_back taisītu. Un ja elementi paliks vairak par 1000, tad vektors pats automātiski visai jaukā veidā resaizosies divreiz lielāks. Un ja vajadzetu izņemt i-to elementu, tad paņemtu pēdējo elementu, ieliktu i-tā vietā, un izmestu pēdējo vektora elementu ārā (pop_back).

Tādējādi saglabātos visas jaukās īpašības:
1) lineārs piekļuves veids iterējot visam cauri.
2) gandrīz O(1) ielikšana, paretam palielinot vektora izmēru (bet tas notiksies visai ātri, ja vien nebūs miljons lodes)
3) O(1) elementa izņemšana.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Wed Nov 14, 2007 3:45 pm    Post subject:

hmm...
šis..
Quote:
Un ja vajadzetu izņemt i-to elementu, tad paņemtu pēdējo elementu, ieliktu i-tā vietā, un izmestu pēdējo vektora elementu ārā (pop_back).
ir ideāls variants Smile
BET.. ja man būs tikai 1 lode, un tā būs jādzēš? tai lodei būs jāgaida?
un jāņem vērā tas, ka izšautā lode nākamajā updeitā jau ir jādzēš! ko gan tad?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Nov 14, 2007 4:59 pm    Post subject:

Ja i == masīva_garums, tad nevajag darīt to ņemšanu ārā un likšanu i-tā vietā. Pietiks tikai ar pop_back, lai izvāktu no masīva.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Wed Nov 14, 2007 5:36 pm    Post subject:

oh.. kā es pats to neiedomājos Very Happy
nu ok, tas izskatās normāli :)

bet.. kādu laiku pamocījies, tā arī nesapratu, kas ir masīva_garums starp iterator'iem? ja i ir tagadējās atrašanās vietas iterators...
ar it == Bullets.end() nesanāk...
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Tenjou



Joined: 22 Nov 2005
Posts: 275

PostPosted: Wed Nov 14, 2007 6:14 pm    Post subject:

.capacity()

kautgan...
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: Wed Nov 14, 2007 6:14 pm    Post subject:

masīva garums ir elementu skaits tavā vektorā. Vektoram ir size() metode, kas atgriež šo skaitli.

Īstenībā tur vajadzēja i == pēdējā_elementa_indekss, jo pēdējā_elementa_indekss = masīva_garums-1.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Wed Nov 14, 2007 7:34 pm    Post subject:

em... nu ok, izveidoju tur kkā... izskatās, ka darbojas varen labi Cool
Code:

std::vector<Bullet*>::iterator it = Bullets.begin();
std::vector<Bullet*>::iterator itend = Bullets.end();
while (it != itend)
{
   Bullet* bb = *it;
   bb->Position+=bb->Velocity;
   if (bb->TimeLeft > 0)
   {
      bb->TimeLeft -= 1;
      for (int i = 0;i<SceneBoxCnt;i++)
      {
         bool bcol = PointBoxCollision(&SceneBoxes[i],bb->Position.x,bb->Position.y);
         if (bcol){bb->Active = false;}   
      }
   }
   else
   {
      bb->Active = false;
   }
   if (it == itend)
   {
      Bullets.pop_back();
      break;
   }
   Bullet* bbb = Bullets.back();
   if (bbb->Active == false)
   {
      *it = bb;
      Bullets.pop_back();
      return;
   }
   it++;
}

ja kkas lieks kodā, tad sakiet droši Wink
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Goto page Previous  1, 2, 3, 4, 5  Next
Page 3 of 5

 
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