Kezdőoldal » Számítástechnika » Programozás » XNA Game Studio 2D-s környezet...

XNA Game Studio 2D-s környezetben osztály klónozása, hogyan?

Figyelt kérdés
Képzeljetek el egy kódot, amiben van egy osztály, abban van több minden, bool, int, a különböző Rectangle-k, meg miegymás, ami kell hozzá. Logika is meg van írva már benne. És akkor ez egy példány, tegyük fel egy mellék ellenség a pályán. Ami a környezettől függően máshogy viselkedik. Tudom ez most így lényegtelen, a problémám az, hogy nem tudok klónozni :( Igen ez az 1 dolog, ami nagyon akadályoz a fejlesztésben. Tudom hogy List()-be lehet helyezni a már kész osztályt, de mégis hogyan? Az ok, hogy List-be helyezem, de aztán nem tudom példányosítani már, ellenseg.Add() na és nem tudom mit s hogyan kel la zárójelben megadni. Valójában konkrétan, nekem az lenne a problémám az egésszel, hogy 1 darab ellenséget akár 100x is betölteni ugyanazon a pályán, csak a Vector2 vagyis a pozíciókban különbözzenek, de a viselkedésük mindig ugyanaz legyen. Tehát ha valamire ráesik ne zuhanjon tovább, ha közelít felém, akkor lőjön, vagy ugráljon, meg ilyesmi, de ezt úgy gondoltam ,hogy 1x megírom, és utána csak több sorban betölteni, annyi hogy a pozíciójuk különbözik csak. És akkor valahogyan le kéne ezt kezelni, hogy működjön is, tudom kell hozzá a for, foreach is, de lassan 1 éve próbálgatom (igen azóta több mindent megtanultam a programozásról, csak pont ezt az egyet nem). Már megvan a Sprite kirajzolás, a logika felállítása, ütközés detektálás, platform jellegű ütközések, hang, zene, scroll a 2D-s kamerával, csak éppen nem sikerül semmit klónoznom, vagyis sikerül, de nagyon alap szinten, az csak olyan szintű, hogy 1 helyben álló tárgyak, amiknek nincs különösebb tulajdonsága, ha hozzáérek eltűnik, meg ilyesmi megy csak.
2011. aug. 9. 13:47
 1/7 anonim ***** válasza:

"csak a Vector2 vagyis a pozíciókban különbözzenek"

Szerintem neked konstruktor kell.

class Ellenség

{

public Vector2 vektor

public Ellenség(Vector2 vektor) // Konstruktor

{

this.vektor = vektor;

}

}

2011. aug. 9. 15:54
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Köszönöm a válaszod! Ok ezt idáig így meg tudtam csinálni, le is fut hiba nélkül, de nem tudom aztán hogyan tovább, hogy adogathatom meg a betölteni kívánt ellenségeket? Tudom List-nél pl.


ellenseg.pontok.Add(new Vector2(44, 556));


Amit te írtál tudnád picit részletezni? Nagyon megköszönném. Sorry ha hülyeségeket kérdek, de mint mondtam nekem ez a rész nagyon de nagyon nem megy :/

2011. aug. 11. 03:19
 3/7 anonim ***** válasza:
Nem értem mit szeretnél. Van egy listát, belerakosgatod az ellenfeleket, mindegyiknek saját pozíciója van. ÉS akkor mit szeretnél ezekkel csinálni?
2011. aug. 16. 11:01
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

Csinálsz egy ellenség osztályt ugye. CSinálsz neki vmi Udate fgvt amit te mindig meghívsz pl a Game Update jében

Vagyis szépen végigmész midnen ellenségen és meghívod az ő saját updatejét, ő ekkor szépen megnézi hogy hol is van merre megy mi történik, és ezek alapján teszi a dolgát.

2011. aug. 16. 11:13
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:

Szóval ha idáig megcsináltam hogy:


class ellenseg

{

public Texture2D kep;

public Vector2 pont;

public Rectangle forras;

public Rectangle rendeltetes;

public int szamlalo;

public bool kapcsolo;


public ellenseg(Texture2D kep, Vector2 pont, Rectangle forras, Rectangle rendeltetes, int szamlalo, bool kapcsolo)

{

this.kep = kep;

this.pont = pont;

this.forras = forras;

this.rendeltetes = rendeltetes;

this.szamlalo = szamlalo;

this.kapcsolo = kapcsolo;

}

}


akkor lefut hiba nélkül persze. No de nekem pon az a kód kell, amivel aztán ezt létre tudom hozni, vagyis példányosítani, addig megy, hogy:


static List<ellenseg> ellensegek = new List<ellenseg>();


és akkor:


ellensegek.Add(new ellenseg...); na és itt pontosan hogyan adom meg amit kell?


No meg aztán egy Update-n belül a foreach-ban hogy kezelem le? Gondolom olyasmi hogy:


foreach(ell in ellensegek) (esetleg kell for is???)

{

}


És ugye ott van még a kirajzolás is persze. Ezeket nem tudom.

2011. aug. 25. 04:29
 6/7 A kérdező kommentje:

08-16 11:01


"Nem értem mit szeretnél. Van egy listát, belerakosgatod az ellenfeleket, mindegyiknek saját pozíciója van. ÉS akkor mit szeretnél ezekkel csinálni?"



Szóval maga a kód megvalósítása. Az hogy mit szeretnék vele csinálni az már részlet kérdése, kb. annyit, hogy amit 1x megadok feltételt az ellenségre, akkor az összesre ugyanaz legyen érvényes, vagyis mindegyikre amit létrehoztam, csak éppen külön pozíciókban. Tehát ne legyen az, hogyha az egyik példánnyal ütközök vagy megváltozik a képkockája, akkor ő miatta a többi összes példányé is ugyanúgy megváltozzon. Ha közelébe ér a játékosom, akkor ne kezdjen el az egész támadni felém, csak az amelyik xy centire van hozzám közel. Vagy ha kinyírom az egyiket, akkor csak az az egy példány nyiffanjon ki, és ne az összes társával együtt. Ha simán csak a Vector2-őt rakom List-be, akkor valami nagyon alapvető szinten működik ez az egész, vagyis amiket most leírtam ezzel a módszerrel nem valósítható meg, max annyi ha neki mék tűnjön el onnét és adjon érte pl valamennyi pontot, vagy hogy tudjam scrool-ozni. De nekem ennél több kell, a logika felépítésével nem is lenne gondom, csak maga a kód nem világos, nem tudom leprogramozni. És akkor gondolom ha 1 példányra megadok egy feltételt, akkor az az összes példányra majd érvényes, és rögtön könnyítettem magamon is. Valahogy úgy képzeltem el, hogy egy külön void Valami()-n belül, vagyis ne éppen a LoadContent()-ban adjam meg ezeket a sorokat, mert akk nagy lenne a káosz ha mindent ott adok meg, és úgy, hogy mindegyiket külön sorban, annyi hogy a Vector2 résznél mindegyik példány más értéket kap majd.

2011. aug. 26. 07:21
 7/7 A kérdező kommentje:
Oké közben sikerült a konstruktor használata, a foreach-ba helyezése, meg egy kis trükközéssel a törlése is. :) Amúgy meg kösz mindenkinek. (20/F voltam)
2011. szept. 3. 19:40

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!