játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5455
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2521

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2189
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] > 4 < [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [46]
Parallax - Tag | 591 hsz       Online status #199049   2013.11.13 07:40 GMT+1 óra  
@Viperion: A nullable adatbázis kezeléshez való, mert ott lehet null egy szám is. Nem hiszem, hogy játéknál ennek van különösebb jelentősége az meg, hogy pontosan hogy működik a háttérben nem tudom mire kell neked. Ilyen mélyen egy scripteléshez szerintem fölösleges beleásni magad, inkább az erős alapokkal legyél tisztában.

   
Pixi - Tag | 206 hsz       Online status #199042   2013.11.12 21:43 GMT+1 óra  
Hali mindenkinek.

Kicsit belemélyedtem a hálózatkezelésbe. Fogalmam sincs, hogy nekem melyik lenne a legideálisabb és legkönnyebb megoldás/módszer. Igazából valamilyen szinten valós idejű adatátvitelre lenne szükségem, mivel kisebb 2D-s alapú játékhoz szeretném használni majd. Ezt még nem tudom előre hogyan fog kinézni, lehet hogy több player is játszhat benne (de ebben az esetben max olyan 10), vagy pedig egy szimpla 2-4 személyes mód lesz benne (talán ez a biztosabb).

Amit tudok biztosan (elméletben):

-nem high FPS-vel kell kommunikáljanak a kliensek egymással és/vagy a szerverrel
-az adatfrissítést/átvitelt mádospercenként elég lenne 5-10x elvégezni
-az üresjáratokat (amikor éppen nincs frissítés/adatátvitel) kliens oldalról vezérelném, tehát pl. ha valaki halad X koordinátán egy bizonyos tempóval, akkor 5 FPS-nél nem akadozva mutatná azt, hanem ha a kliensnél az volt az utolsó adat pl, hogy halad X-en 3F-el azzal a meghatározott képkockákkal + még ami statikusan meg van határozva, akkor a következő frissítésig ezt látja a kliens, hogyismondjam offline vezérelné azt az objektumot a saját programjában, és igy az összes kliens ezt tenné, és 5-10x küldene és kérne le adatot.

Nem tudom ezt mások hogyan szokták megoldani, és hogy az általam felvázolt módszer marhaságnak minősül-e, vagy pedig van valami haszna egyáltalán (sávszélesség kímélés céljából és hogy többen tudjanak kommunikálni a ritkább frissítési rátának köszönhetően).

Amit nem tudok, hogy pontosan mit és hogyan használjak, egyáltalán elég-e nekem a PeerToPeer (a mindenki mindenkinek egyenrangúan küld adatot módszer) vagy jobb a SzerverKliens? Eddig ezt az 1 darab példát tudtam úgy ahogy értelmezni és elsajátítani:

Kommunikáció TCP/IP-n keresztül

A legfőbb problémám ezzel, amikor ez a rész van, hogy:

"Indítás után, ha meghívjuk az AcceptSocket függvényt, akkor ezzel a programunk futása felfüggesztésre kerül, amíg nem érkezik kapcsolatfelvétel az adott porton keresztül. Ezért célszerűbb ilyen esetben egy külön szálon futtatni a TCP port figyelését és kiszolgálást, hogy alkalmazásunkat a felhasználó ettől függetlenül is használhassa."

1. Hogyan tudom én ezt külön szálon futtatni?

2. Egyidőben nem tudnak többen csatlakozni egy porthoz ez ok. Ezt eddig úgy tudtam megoldani, hogy a kliens minden pillanatban amikor csatlakozni szeretne új csatlakozást létesít és indít a szerverrel, megkapja a szükséges adatot Byte formában (ezt utána átalakítja), majd bezárja a csatlakozást. Ez így szép és jó, csak hát barbár megoldás gondolom, hogy mindig "ki-be" járkálni egy ajtón.

3. Maga az üzenet/adat felhasználása, vagyis ez az egész hálózatosdi rendszer tényleges felhasználása az elemeknél/objektumoknál. Hogy is van ez?

Én eddig ezt tudtam megcsinálni:
Van a szerver és a kliens. Mindkét oldalon van egy darab statikus label1, semmi több. A Form bal felső sarkában vannak startban. A kliens az egyszerűség kedvéért nem küld a label állapotáról semmit, csak fogad üzenetet a szervertől. A szerveren azt csinálja a program, hogy a label1 halad X koordinátán jobbra, majd ha eléri a Form szélét, akkor visszaugrik 0-ra. A szerver is és a kliens is használ az egyszerűség kedvéért most egy-egy Timer-t, ez tickel 100-as intervallumon (A fenti probléma adott, hogy nem külön szálon fut a port figyelése, ezért legalább egy darab kliens applikációt meg kell nyissak). Ezután ha kap lekérést a klienstől elküldi neki a label1 X koordinátáját üzenetben mint Byte. A kliens ezután a fent említett barbár módon mikor megkapta az adatot, azt átalakítja majd átadja a label1-nek mint X pozíció, majd ugyanezt az értéket átadja mint label1.Text. Ez így szépen működik, de édeskevés a boldogsághoz.

A kérdésem eléggé tág...ezen infók tudatában ti mit ajánlanátok a fent említett igényeknek megfelelően, és hogy lehetőleg könnyű is legyen megérteni/elsajátítani? Ez kicsit hosszúra sikeredett. Természetesen ha ez így 1x összejön, akkor XNA/MonoGame-ban szeretném alkalmazni.

   
Viperion - Tag | 540 hsz       Online status #199041   2013.11.12 20:56 GMT+1 óra  
pretender így már értem.
Egyébként tisztában vagyok az interface-kkel meg a többivel csak pár dolgot nem értek.
Ja igen még nem szoktam érteni a szándékosan csavaros magyarázatokat sem.

Már csak azt nem értem,hogy a nullable típus ami egy struct(értéktípus) miért lehet null.
Ha jól tudom,akkor az érték típusok nem lehetnek null-ok.

De viszont a nullable ami egy struktúra igen.
Miért?

int? i = null; Ez miért működik miért rendelhető hozzá a null ha a struct egy érték típus?

Szerintem:
Van neki egy olyan operator= metódusa ami bemenő paraméterként egy referenciát vár?Ez a megoldás?Vagy hogy van ez?

   
Parallax - Tag | 591 hsz       Online status #199033   2013.11.12 13:04 GMT+1 óra  
Idézet
Viperion :
A property-t értem már.

De ezt nem értem még mindig.
Nem lehetne még egyszerűbben?

"A T típus megszorítására szolgál."
Ennek semmi értelme.Mi az,hogy megszorítnai egy típust?


A típusok puhányok, addig kell szorongatni őket, amíg el nem kékülnek, vagy zöldülnek attól függően, hogy értékesek, vagy csak referálnak.
Egyébként itt érdemes szétnézni van sok okosság: C# pdf és videók

   
Pretender - Törzstag | 2498 hsz       Online status #199024   2013.11.12 06:03 GMT+1 óra  
Az a lényeg, ha azt mondod ott a T-re, hogy "where T : IComparable", akkor a T típus helyére nem írhatsz be olyan típust, ami nem valósítja meg az IComparable interfészt. Ennél egyszerűbben nem lehet elmondani... Tisztában kell lenni néhány alapfogalommal, pl. mi az, hogy típus, öröklés, interface megvalósítása, stb.

   
Viperion - Tag | 540 hsz       Online status #199020   2013.11.11 21:27 GMT+1 óra  
A property-t értem már.

De ezt nem értem még mindig.
Nem lehetne még egyszerűbben?

"A T típus megszorítására szolgál."
Ennek semmi értelme.Mi az,hogy megszorítnai egy típust?

Ezt a hozzászólást Viperion módosította (2013.11.11 21:33 GMT+1 óra, ---)

   
Pretender - Törzstag | 2498 hsz       Online status #199012   2013.11.11 05:50 GMT+1 óra  
A where egy minimális angol tudással és hozzáértéssel pedig kitalálható... A T típus megszorítására szolgál. Annyit mond, hogy a Stack olyan típusú elemeket tárol, amik IComparable-k (pontosabban ezt az interfészt megvalósítják).

A property meg lehet getter, vagy getter és setter. Nagyjából csak annyi, mintha lenne egy függvényed, amivel le tudod kérni az értékét / tudod módosítani. Annyival több a getter-setter property, mintha public lenne a változó, hogy (mivel a függvényekhez hasonlít a viselkedése) egyéb utasításokat is végre tudsz hajtani előtte.

Keress példákat a neten, rengeteg van, abból jól meg lehet érteni ezeket.

   
Viperion - Tag | 540 hsz       Online status #199011   2013.11.11 04:48 GMT+1 óra  
Eltudná nekem valaki hozzáértő magyarázni azt,hogy a "where" kulcsszót mire használják c# ben?
És azt is,hogy a propetyk azok micsodák?

Ebből nem sikerült megértenem,hogy mire van a where:
Alapértelmezésben a generic server kódjában csak az Object típuson való metódusok és property-k engedélyezettek. Ha más metódusokat is szeretnénk használni, akkor a generic fejlécében jeleznünk kell, hogy a paraméter típusnak milyen osztály vagy leszármazottja, esetleg milyen interfészek felelnek meg, ezt a where kulcsszó segítségével tehetjük meg.

pl: public class Stack<T> where T : IComparable

----
Ebből pedig az nem sikerült,hogy mi az a property:
A 'Property' egy komponens névvel ellátott értéke. Például, egy gomb rendelkezhet a „text” property-vel, ami a megjelenítendő szövegre utal.


Egyszerűbben megtudnátok őket fogalmazni?

   
Matzi - Szerkesztő | 2521 hsz       Online status #198729   2013.11.01 10:31 GMT+1 óra  
Olvasnivaló, avagy a string miért immutable.
Nem olyan nehéz megérteni. Referencia típus, mivel osztály, de írásvédett, mert az hasznos.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Pretender - Törzstag | 2498 hsz       Online status #198726   2013.11.01 08:24 GMT+1 óra  
Miért olyan nagy pain in the ass ez? Ha paraméterként kell átadni, és nem akarod, hogy copyzza, akkor megjelölöd referenciaként: (úgy rémlik, hogy lehet ilyet )
Kód:
void foo(ref string str);

   
Viperion - Tag | 540 hsz       Online status #198724   2013.10.31 19:31 GMT+1 óra  
m4 ha úgy van ahogy írtad akkor a string nem is referencia típus.
És mégis annak nevezik.Kezdem felhúzni magamat ezen.

Pretender:
Az érték szerintieknél az hiszem mindig copy constructor vagy ahhoz hasonló van mert egy másolatot mindenképp létre kell hozni ahhoz,hogy bele lehessen rakni az valamibe.
Úgyhogy ha a stringnél és az Object típusnál másoló konstruktor van ami egy másolatot ad vissza méghozzá az értékről az nem mondható ref típusnak.

Úgy,hogy hiába a bedobozolás is mert nem tudom másképp kezelni őt mint egy érték típust.
Csak class oknál működött nekem eddig többit még nem próbáltam az Object és a Stringen kívül.

Ezt a hozzászólást Viperion módosította (2013.10.31 20:21 GMT+1 óra, ---)

   
Pretender - Törzstag | 2498 hsz       Online status #198723   2013.10.31 19:22 GMT+1 óra  
Gondolom c#ban is van valamiféle copy-constructor. Gondolom a String a kevés olyan osztályok közé tartozik, amikor ha azt mondod, hogy a = b, akkor nem csak rámutat, hanem lemásolja az eddig b-ben lévő string tartalmát. De amúgy fogalmam sincs.
Itt beszélgetnek róla.

   
Viperion - Tag | 540 hsz       Online status #198720   2013.10.31 18:41 GMT+1 óra  
Ezt nem értem.
Ha a stringek referencia típúsok,akkor ebben az esetben:
string s1 = "QJ", s2 = "PL";
s1 = s2; //Ha referencia típús,akkor itt s1 nek ugyanarra a memóriaterületre kellene,hogy mutasson mint az s2.De nem ez történik,akkor most miért van az,hogy a stringet referencia típúsnak nevezik?
Akkor most mi a külömbség a érték típúsok és a referencia típúsok között?

   
M4 - Tag | 187 hsz       Online status #198701   2013.10.31 09:58 GMT+1 óra  
"most s1 nek arra a memóriaterületre kell,hogy mutasson amire s2 is mutat"
Nem, hanem a "ppppp" string memóriaterületére. A stringek amúgy sem változnak (az értékek), mert immutable-ek (megváltoztathatatlanok) javaban legalábbis. Szóval nem is lehetne gond ebből.
A "ppppp" azt jelenti, hogy létrejön egy string objektum ezzel az értékkel. És értékadáskor ennek a címét kapja meg az s1.

   
Viperion - Tag | 540 hsz       Online status #198696   2013.10.31 03:59 GMT+1 óra  
Van egy c# jegyzet azért tanulom a benne írtakat mert c++ ról át akarok szokni c# re az unity miatt.

Azt írta a jegyzet,hogy a referencia típúsok és az érték típúsok közti külömbség az,hogy ha egy érték típúshoz ha hozzárendelek egy másik érték típúst,akkor azok nem fognak egy memóriaterületre mutatni de referencia típúsok esetében igen.

Például:
Kód:
int x = 5, y = 10;
x = y;

Mivel ezek érték típúsok ezért nem lesz az,hogy x ugyanarra a memóriaterületre fog mutatni mint az y; Csak az értékük lesz ugyanannyi.

Példa2:
Kód:
using System;

class MyClass {
    public int x;
}

class Program {
    static void main(string[] args) {
        MyClass s, p;
        s.x = 5;
        p.x = 10;
       
        p = s;
        Console.WriteLine(p.x);
    }
}

Ebben a példában azért fog 5 lenni a kimenet mert a class-ok referencia típúsokat hoznak létre ez miatt az történik,hogy p arra a memóriaterületre fog mutatni amire s.A p egy alias lesz s re.

Amit én nem értek az az,hogy a jegyzet szerint a string típús is referencia típús de mégis úgy viselkedik mint egy érték típús.

Példa:
Kód:
String s1 = "kkkk", s2 = "qqqq";
s1 = s2;
s1 = "ppppp";                     
Console.WriteLine(s2);

most s1 nek arra a memóriaterületre kell,hogy mutasson amire s2 is mutat,
mert a string referencia típús.Ha most megváltoztatom s1-et,akkor s2 nek is változnia kell.

Ha a stringek referencia típúsok lennének,akkor most s2 nek egy alias-a kellene,hogy legyen s1.
De nem az mert s2 értéke nem változott s1 hatására.

Akkor most,hogy van ez?

Vagy itt van ez:
Kód:
using System;

namespace PracticeConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 5;
            int y = 10;
            object objx = x;
            object objy = y;
            objy = objx; //Itt objy ahelyett,hogy megkapná az objx referenciáját csak az értékét kapja meg.
            objy = 100;
            Console.WriteLine(objx); //Itt látszik a kimenetből ugyanis objx nem lett 100.
            Console.WriteLine(objy);
            Console.ReadKey();
        }
    }
}


A bedobozolás arra van,hogy megengedjük egy érték típúsnak,hogy referencia típúsként viselkedjen.
Ez hülyeség!Meg a stringeknél is.Ez csak class oknál működik.

Ezt a hozzászólást Viperion módosította (2013.10.31 04:45 GMT+1 óra, ---)

   
Pretender - Törzstag | 2498 hsz       Online status #198476   2013.10.21 18:42 GMT+1 óra  
Mégsem jó úgy, ahogy akartam... Adott egy c# control, annak van egy Handle property-je.
Ezt át akarom adni a c++ kódnak, és ott HWND-t csinálni belőle. Első körben úgy ellenőrzöm, hogy lekérem a méretét (GetClientRect), és kiírom egy file-ba.

Így próbálom az egészet:
Kód:
// c++
DllExport bool WrapperCall start(void* handle, void* graphicsHandle)
{
    HWND h1 = static_cast<HWND>(handle);
    HWND h2 = static_cast<HWND>(graphicsHandle);

    // get size
}

// c#
[DllImport("Editor.dll")]
private unsafe static extern bool start(void* handle, void* graphicsHandle);

// valahol a kódban
bool rc = start(this.Handle.ToPointer(), previewPanel.Handle.ToPointer());


szerk.:
Hmm, mégis csak működik.

Ezt a hozzászólást Pretender módosította (2013.10.21 20:25 GMT+1 óra, ---)

   
lackoatya - Tag | 3 hsz       Online status #195964   2013.07.09 05:54 GMT+1 óra  
Idézet
versio :
Pretender: kiprobalhatjuk ki a bena, irjal c++-ban egy olyan programot ami 10 millio floating szamot sorbarendez, en c#-vel leverlek 10-szeresen abban biztos vagyok



Programozási időben igen, viszont a programod futási ideje és általa lefoglalt memória méretét tekintve szerintem nem a ráfordított kódolási idő a lényeg! Persze megvannak mindkettőnek az előnyei és hátrányai is.

   
versio - Tag | 663 hsz       Online status #195869   2013.07.06 22:29 GMT+1 óra  
ha public a valtozo pl :

public alma = 10;

akkor unityban az inspector ablakban is megjelenik a script reszlegben, es jatek kozben is allitgathatod
   
Viperion - Tag | 540 hsz       Online status #195867   2013.07.06 20:52 GMT+1 óra  
A c++11 ben lehet.

   
Geri - Törzstag | 2189 hsz       Online status #195866   2013.07.06 20:39 GMT+1 óra  
mintha c++ban is lehetne

   
versio - Tag | 663 hsz       Online status #195865   2013.07.06 20:34 GMT+1 óra  
de c#-nel ilyen felesleges baromsagokra nincs szukseg, mert a valtozok deklaralasakor mar erteket lehet neki adni

class gyumulcs
{
int alma = 10;

public gyumulcs()
{
}
}
   
Pixi - Tag | 206 hsz       Online status #195863   2013.07.06 20:19 GMT+1 óra  
Ja akk sorry én nem C++ -zok.

   
Pretender - Törzstag | 2498 hsz       Online status #195860   2013.07.06 19:59 GMT+1 óra  
Itt azt mondják, hogy nem lehet.
Idézet
The first one is not legal in C#

   
Viperion - Tag | 540 hsz       Online status #195859   2013.07.06 19:54 GMT+1 óra  
Nem ez érdekelt.
Elmagyarázom.
A c++ ban ahogy c# ben is a típusoknak van konstruktoruk.
C++ ban a konstruktornak nincs visszatérési értéke csak neve és bemenő paraméterei,inicializáló listája és törzse.

Itt egy példa:
class myType {
public:
myType(int, bool);
private:
int itsX;
bool itsV;
};

/*Figyeld meg,kettőspontot tettem a bemenő paraméterei után.A kettőspont azt jelzi,hogy amit utána írok azt a konstruktor inicializáló listájába fogom írni.Oda csak értékadó műveletek mehetnek egyéb kifejezések nem.Legalább is c++ ban*/
myType::myType(int x, bool v):
this->itsX(x),
this->itsV(v)
{
//Ez pedig a konstruktor törzse ide jöhetnek mondjuk a számítások
}

int main() {
myType type(4444, true);
return 0;
}

Értitek már ugyanezt akarom c# ben.
Nem a konstruktor törzsében akarok a tagváltozóknak értéket adni hanem a konstruktor inicializáló listájában.

Pretender nem láttam a te hozzászólásodat csak miután ki írtam az enyémet bocsi de azért jöhetne részletesebb magyarázat erre.

Ez azt jelenti,hogy c# ben ez nem lehetséges?

   
Pretender - Törzstag | 2498 hsz       Online status #195858   2013.07.06 19:41 GMT+1 óra  
Ha jól tudom c#ban nincs initlist. Legalábbis nem valid.

@Pixi: nem listáról volt szó, hanem inicializáló listáról, ami c++ban egyszerűen használható:
Kód:
class Foo
{
public:
    Foo() : i(10) { }

private:
    int i;
};

   
Pixi - Tag | 206 hsz       Online status #195856   2013.07.06 19:39 GMT+1 óra  
Ezt nézted már?

msdn.microsoft.com/en-us/library/vstudio/bb397680(v=vs.100).aspx

// The default constructor has no parameters. - ebből azt veszem ki, hogy az alapnak nincs meghatározott paramétere, azt a példa legalul szintén úgy hozza létre egy Lista segítségével:

Kód:
The following example shows how to initialize a collection of StudentName types by using a collection initializer. Note that a collection initializer is a series of comma-separated object initializers.

List<StudentName> students = new List<StudentName>()
{
  new StudentName {FirstName="Craig", LastName="Playstead", ID=116},
  new StudentName {FirstName="Shu", LastName="Ito", ID=112},
  new StudentName {FirstName="Gretchen", LastName="Rivas", ID=113},
  new StudentName {FirstName="Rajesh", LastName="Rotti", ID=114}
};


Azért remélem ír valami hozzáértőbb személy is, mostmár én is kiváncsi lettem mit szeretnél pontosan.

   
Viperion - Tag | 540 hsz       Online status #195854   2013.07.06 19:21 GMT+1 óra  
Én csak azt akarom megtudni,hogy egy c# osztály konstruktorának az inicializáló listájában(Nem a törzsében),hogyan inicializálunk változókat. Erre választ nem találok sehol .

   
Pixi - Tag | 206 hsz       Online status #195852   2013.07.06 18:57 GMT+1 óra  
Lehet, hogy nem teljesen értem amit akarsz. Szóval te példányostani szeretnéd magát az osztályt, méghozzá úgy, hogy egy listában is számon tartod az elemeket? Én most XNA-s projektból másolok egy egyszerű példát, ugye ez is C#:

Kód:
    public class Weapon
    {
        public Vector2 poz;
        public Rectangle alap_negyzet,
                                    kirajzolo_negyzet;
        public int kepkocka_szamlalo;
        public SpriteEffects irany;

        public static List<Weapon> lovedekek = new List<Weapon>();

        public Weapon(Vector2 poz,
                                 Rectangle alap_negyzet,
                                 Rectangle kirajzolo_negyzet,
                                 int kepkocka_szamlalo,
                                 SpriteEffects irany)
        {
            this.poz = poz;
            this.alap_negyzet = alap_negyzet;
            this.kirajzolo_negyzet = kirajzolo_negyzet;
            this.kepkocka_szamlalo = kepkocka_szamlalo;
            this.irany = irany;
        }

        ///...ciklusban (pl. for, mert az indexel is ellátja)
       
        public static void Update()
        {
            //létrehozni egy példányt belőle egyéni paraméterekkel:
           
            //pl. if(...//lenyomok egy gombot pl.//...)
            lovedekek.Add(new Weapon(new Vector2(Player.poz.X + 40, Player.poz.Y + 40), new Rectangle(), new Rectangle(0, 0, 56, 34), 0, SpriteEffects.None));

            for (int i = 0; i < lovedekek.Count; i++)
            {
                //törölni egyet
                if (lovedekek[i].alap_negyzet.Intersects(...///valamivel ütközik...///))
                {
                    lovedekek.RemoveAt(i);
                    i--;
                }

            // törölni az egész elemet

            lovedekek.Clear();
            }
        }
}


ui: ja most látom nem a listába helyezés volt a kérdés Én publikáláskor a zárójelben is ugyanazt a nevet használom, mint az adattagoknál, de ettől még ugyanúgy működik ez ne zavarjon össze.

Ezt a hozzászólást Pixi módosította (2013.07.06 19:05 GMT+1 óra, ---)

   
Viperion - Tag | 540 hsz       Online status #195850   2013.07.06 16:54 GMT+1 óra  
C# nek,hogyan kell használni a konstruktor inicializáló listáját?
C++ így jó volna de itt c# ben nem akar működni.Meg oldható ez valahogy az inicializáló listában ha igen,hogyan?
public EszrevetelClass(Transform _otherTrans, Transform _originalTrans, float _speed = 4.0f):
this.other ( _otherTrans),
this.original ( _originalTrans),
this.speed = (_speed)
{}

   
Parallax - Tag | 591 hsz       Online status #195847   2013.07.06 15:28 GMT+1 óra  
Idézet
versio :
meg jo hogy nem kell destructor, kit erdekel mikor torlodik a memoriabol az legyen a rendszer dolga, pont ezert jo a c# , nem tudsz torolni valamit ami meg kellhet, vagy nem hagysz benne valamit ami mar nem kell, c++-ban az idod felet ezeknek a faszsagoknak a debuggolasaval toltod , a produktivitas meg zero


Ez hülyeség. Megísz magadnak egy memória management-et és az központilag megoldja a memória kezelést, figyelmeztet, ha nem volt törlés stb. Többszörösen öröklést meg nem muszáj használni csak azért mert a nyelvben ott van és feltétlenül el kell gáncsolnia magát a fejlesztőnek, tervezni kell úgy, hogy ne legyen rá szükség.

   
versio - Tag | 663 hsz       Online status #195846   2013.07.06 14:23 GMT+1 óra  
Pretender: kiprobalhatjuk ki a bena, irjal c++-ban egy olyan programot ami 10 millio floating szamot sorbarendez, en c#-vel leverlek 10-szeresen abban biztos vagyok
   
Pretender - Törzstag | 2498 hsz       Online status #195841   2013.07.06 07:39 GMT+1 óra  
Idézet
versio :
c++-ban az idod felet ezeknek a faszsagoknak a debuggolasaval toltod , a produktivitas meg zero


Hát, ha valaki béna...

@Viperion:
Csak egy konkrét implementációt tartalmazó osztályból tudsz öröklődni, a többi legfeljebb interface lehet. Hogy miért? Mert hülyék, és azt mondták, hogy nincs rá szükség. Túl sokszor valóban nincs, de néha nem ártana, ha lenne...

Amit versio linkelt, az meg nem igazi öröklődés, hanem generices trükközgetés. De hát ilyen egy hatékony nyelv...

   
Viperion - Tag | 540 hsz       Online status #195839   2013.07.06 00:54 GMT+1 óra  
versio én nem értem,hogy hogyan gondolja a megvalósítást azon a linken. De amúgy kösz.

   
versio - Tag | 663 hsz       Online status #195838   2013.07.06 00:16 GMT+1 óra  
Viperion - Tag | 540 hsz       Online status #195837   2013.07.05 23:54 GMT+1 óra  
Miért nincs a c# ben többszörös öröklődés?

   
versio - Tag | 663 hsz       Online status #195836   2013.07.05 23:10 GMT+1 óra  
meg jo hogy nem kell destructor, kit erdekel mikor torlodik a memoriabol az legyen a rendszer dolga, pont ezert jo a c# , nem tudsz torolni valamit ami meg kellhet, vagy nem hagysz benne valamit ami mar nem kell, c++-ban az idod felet ezeknek a faszsagoknak a debuggolasaval toltod , a produktivitas meg zero
   
lackoatya - Tag | 3 hsz       Online status #195835   2013.07.05 21:06 GMT+1 óra  
Tévedés, hogy ne lenne destruktor, szintaxisa:

Kód:
class MyClass
{
        ~MyClass()
        {
                //Például a Dispose meghívása, ha IDisposable
        }
}


Az egyetlen gond vele, hogy nem igazán jó semmire, nem determinisztikus, hogy mikor hívódik meg a függvény, mivel a GC (GarbageCollection) saját maga kezeli a memóriát, nem igazán érdemes beleszólni, hogy kit mikor dobjon ki, annyit kell tudni erről, hogy különböző generációkba osztja az egyes objektumokat, és ennek megfelelő sorrendben szabadul meg tőlük, amikor helyre van szükség, pontosan ezért nem lehet megmondani mikor fut le a destruktor, így nem igazán szokás használni, egyszerűen felesleges.

   
Viperion - Tag | 540 hsz       Online status #195833   2013.07.05 19:18 GMT+1 óra  
Már nem lényeges a kérdés megoldottam a problémát ha akarjátok törölhetitek.
Amúgy köszi mindent.

Egyébként az volt a baj,hogy amelyik osztály örökli a MonoBehaviourt abban nem használható a konstruktor.

   
Viperion - Tag | 540 hsz       Online status #195832   2013.07.05 18:12 GMT+1 óra  
Itt miért kapom ezt a hibakódot: CS1729

Kód:
//EszrevetelClass.cs tartalma
using UnityEngine;
using System.Collections;

public class EszrevetelClass: MonoBehaviour
{

private Transform other;
    private Quaternion toRotate;
private Vector3 distance;
private float degres, speed;


public EszrevetelClass(Transform _transform, float _speed = 4.0f) {
this.other = _transform;
this.speed = _speed;
}


public void setDegres() {
float cos, rad;
distance = this.other.transform.position - transform.position;
distance.Normalize();
cos = Vector3.Dot(Vector3.forward, distance);
cos = Mathf.Clamp(cos, -1.0f, 1.0f);
rad = Mathf.Acos(cos);
this.degres = Mathf.Rad2Deg * rad;
if(other.transform.position.x < transform.position.x)
this.degres = -this.degres;
}

public float getDegres() {
return this.degres;
}

public void setToRotate() {
this.toRotate = Quaternion.Euler(0f, this.degres, 0f);
}

public Quaternion getToRotate() {
return this.toRotate;
}

public void setSpeed(float _speed = 4.0f) {
this.speed = _speed;
}

public float getSpeed() {
return this.speed;
}

}


Kód:
//EszrevetelScript.cs tartalma
using UnityEngine;
using System.Collections;

public class EszrevetelScript: EszrevetelClass
{

private EszrevetelClass rotateOtherObj;
private float time;

// Use this for initialization
void Awake()
{
rotateOtherObj = new EszrevetelClass(GameObject.Find("CylinderTwo").transform);
}


void Update()
{
if(Input.GetKeyDown(KeyCode.A))
{
rotateOtherObj.setDegres();
rotateOtherObj.setToRotate();
time = Time.time + 5f;
}

if(Time.time < time)
    transform.rotation = Quaternion.Lerp(transform.rotation ,rotateOtherObj.getToRotate(), rotateOtherObj.getSpeed() * Time.deltaTime);
}

}


Tudom mit jelent ez a hibaüzi de nem értem miért kapom hisz át adok neki én egy transform objektet és mégis.

   
Parallax - Tag | 591 hsz       Online status #195831   2013.07.05 18:10 GMT+1 óra  
.NET-ben nincs destruktor, illetve managed objektomoknál nincs is értelme, mert a GC felszabadítja, ha nem hivatkozik rá senki. 1-1 managed objektumra, ha nem hivatkozik semmi, akkor halottnak nyílvánítja a rendszer és onnan vagy feltámad, vagy a GC kinyírja egyszer, ha úgy tartja kedve.

Nem managed objektumoknál van értelme a "destruktornak", itt az ún dispose pattern-t lehet használni. Ennek lényege, ha a coder elfelejti meghívni a Dispose-t, akkor kinyírás előtt a rendszer megteszi.

A fentieknek semmi köze a C++ féle destruktor fogalmához, teljesen más a kettő memória kezelési mechanizmusa.

   
Pretender - Törzstag | 2498 hsz       Online status #195828   2013.07.05 15:38 GMT+1 óra  
Semmi köze nincs ahhoz, hogy inline, vagy sem.

szerk.:
Na jó, kicsit konstruktívabb is legyek... c++ban az az alapvető szabály, hogy a header nem tartalmaz implementációt, egyfajta interfaceként szolgál csak. Egyéb nyelvekben (pl. c# és java) ez nem így működik, ott egyetlen fájl tartalmazza a deklarálást és a definiálást (tudjuk a különbséget!)

Attól, hogy a deklarálás és a definiálás egyetlen helyen van, még nem lesz inline, szimplán más elvet követ a két nyelv. És nagyon fontos, hogy ne akarjuk az egyiket úgy használni, mint a másikat.

C#-ban pedig nincs destruktor, csak valami dicső függvény (finalize talán? vagy az java?)

   
Viperion - Tag | 540 hsz       Online status #195827   2013.07.05 15:27 GMT+1 óra  
A c# nek van szemétgyűjtője,akkor én mire használjam benne a destruktort?
És miért kell az osztályon belül létrehozni a metódusok törzsét.Nekem c++ után ez úgy tűnik,hogy c# ben csak is inline módon létezhetnek az osztályokban a metódusok.
Példa:
public class Xy
{
private Xy(); //Így nem jó
public float getXyValue(); /*Nem jó nem lehet később megírni benne a metódus megvalósítását mint a c++ ban. Ugy akarnám mint a c++ ban:
visszatérési_értéke osztálynév::metódusa() {törzs} Így nem inline c++ ban.
}

Csak így jó, de ez C++ ban inline, C# ben is?Mert ha ige akkor nagy kóddal rendelkező metódus esetén ez fos módszer az tuti.
public class Xy
{
private Xy() {}
public float getXyValue() { /*Ngayon sok kód*/ }
}

   
Asylum - Törzstag | 5455 hsz       Online status #193891   2013.05.07 20:10 GMT+1 óra  
Megoldodott, a projekt fájlban a IncludeAssemblyInVSIXContainer-t át kellett állíteni true-ra.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Asylum - Törzstag | 5455 hsz       Online status #193869   2013.05.06 19:30 GMT+1 óra  
Valaki írt már visual studiohoz plugint? (konkréten MEF komponenst).
Az a bajom, hogy k*rvára nem töltödik be, a log viszont azt mondja, hogy igen...debugolni sem tudom mert "no symbols loaded".

Amugy csak azért kéne hogy az UML editorban úgy tudjam kiexportálni a xaros képet hogy átlátszó legyen a háttér...
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Bukta - Tag | 308 hsz       Online status #191505   2013.02.23 16:45 GMT+1 óra  
A Skynet jo példa, de most már nem mondok semmit. Majd megcsinálom és akkor rájöttök (meg én is) mi motoszkál bennem. (lehet hogy csak valami betegség, de legalább megpróbálom)

Ezt a hozzászólást Bukta módosította (2013.02.23 16:53 GMT+1 óra, ---)
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
   
DMG - Szerkesztő | 3172 hsz       Online status #191484   2013.02.22 21:36 GMT+1 óra  
Idézet
(A jelszós példányosítás meg egy nagyon programozó szinten lévő biztonsági mech szerintem így első ránézésre. Jelszóval védjük fájljainkat, adatainkat a neten, mért ne lehetne egy objektumot is védeni. Lehet, hogy nagyságrenddel biztonságosabb programokat lehetne csinálni...)




Ez fájt, de nagyon. Ezek szerint azért van az a sok sechole egyes programokban, mert valami galád eljárásban galád módon példányosítanak egy osztályt? Ki, vagy mi ellen védenénk jelszóval az objektumokat? A Skynet ellen?
-----------------------------------------
Dont Listen to the Naysayers
   
Matzi - Szerkesztő | 2521 hsz       Online status #191465   2013.02.22 13:46 GMT+1 óra  
Bukta:
Azért negatív mindenki, mert olyan felütéssel kezdted, hogy minden nyelv szar, mert vannak benne korlátok. Erre nehéz sok jót mondani.
Amúgy meg ha már olyan régóta használják olyan sokan, és még jön is ki belőle új változat, akkor nem lehet, hogy amire tényleg szükség van az belekerült? Pl magadnak definiálható hozzáférés módosító nem kell, de lambda kifejezés meg igen.

Persze ha valami világrengetőt kitalálsz, az oké, ha hiányolod. De néhány nagyon gyenge hasraütésszerű példával bizonyítani, hogy szar minden.
"Azért szart a gazdaság, mert nincs ingyen sör meg ingyen internet"
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Asylum - Törzstag | 5455 hsz       Online status #191462   2013.02.22 12:51 GMT+1 óra  
Idézet

Honnét tudod minek mi értelme van?



Mondjuk onnan h 8 eve aktivan programozok?
A legjobb pelda a C++0x bol kivett conceptek. Baromi jo otlet, baromi hasznos lett volna, de a kutya nem hasznalta/nem ertette.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Parallax - Tag | 591 hsz       Online status #191461   2013.02.22 12:46 GMT+1 óra  
Bukta: Te szerintem kevered az adatbázis kezelést a programozással, vagy csak nagyon unatkozol. Egyébként vicces lenne jelszóval levédeni osztályokat, biztosan örülnének neki az adott libet használók.

   
mandyedi - Tag | 32 hsz       Online status #191460   2013.02.22 12:44 GMT+1 óra  
Hasra ütés helyett szerintem többet ér ha nekiállsz kódolni, megpróbálod megvalósítani amiket szerinted nem lehet. És ha tényleg nem lehet, akkor posztolod a problémát, esetleg a kódot ami már majdnem tudja amit kellene, de mégse.
Szerintem sokkal értelmesebb és szakmaibb viták lennének belőle, minthogy leállsz szidni egy olyan nyelvet amit milliók használnak és még mindig nem váltotta fel más az adott területen és amit nem csak úgy hasra ütés szerűen építettek fel.

   
Frissebbek | Korábbi postok
[1] [2] [3] > 4 < [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [46]