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

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2188
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]
Pixi - Tag | 206 hsz       Online status #204087   2014.07.08 09:43 GMT+1 óra  
Viperion: Próbáld meg, hogy mindent törölsz a gépről, ami ezzel kapcsolatban áll, tehát a programok telepítésénél és hozzáadásánál abból a szép listából (a VS-t is). Nem tudom hogyan próbáltad telepíteni a VS-t, de ajánlatos akkor a teljes telepítőt leszedni (valszeg ISO-ban lesz, ez tartalmazza az általad leírtakat is, .NET meg minden egyéb ami a VS futtatásához kell). Érdekes én is utána néztem, és a Microsoft Visual C++ Redistributable Package-ra hivatkoznak, de nálad ugye ez nem segít. Azt sajnos nem tudom, ha mindent törölsz az később milyen problémákat okozhat pl. MonoDevelop-ban. Hanyas VS-t próbálltad feltenni? Én azt ajánlom 2012-től ne legyen újabb (én most is 2010-et használok). Legrosszabb esetben meg ugye ott van az op reinstall. Habár olvasom sokaknál az sem oldotta meg a problémát.

   
MaNiAc - Szerkesztő | 1735 hsz       Online status #204086   2014.07.08 08:12 GMT+1 óra  
Viperion - mit is akarsz pontosan? C#-ban kódolni? Akkor miért a Visual C++t telepíted?

Ha C#-ról van szó, amit Geri írt, az nem segít, a C::B egy C++ IDE...
Dare to imagine!
http://www.insaneidea.hu
   
Geri - Törzstag | 2188 hsz       Online status #204083   2014.07.08 02:59 GMT+1 óra  
viperion: http://www.codeblocks.org/

ez nem a kérdésedre válasz, hanem a problémádra.

   
Viperion - Tag | 540 hsz       Online status #204082   2014.07.07 22:05 GMT+1 óra  
Nem tudna segíteni rajtam valaki mert már 2 napja szenvedek a visual studio express elindításával.
A probléma az,hogy amikor elindítom akkor kapok egy olyan hibaüzenetet,hogy "Az alkalmazást nem sikerült elindítani, mert párhuzamos konfigurációja helytelen. A problémáról részletesebben az alkalmazás eseménynaplójában, vagy az sxstrace. Exe parancssori eszköz elindításával olvashat." mindig ezt kapom.
Kerestem a fórumokon megoldásokért de kipróbálásuk után nem oldódott meg a probléma.
Felraktam a visual c++ 2005,2008 verziókat is sőt az összeset amit csak találtam de akkor sem volt jó nem indul el bármit csinálok nem jó.

Miket telepítsek fel,hogy jó legyen?
mincrosoft.net keretrendszer verziók közül hányas verziókat?
És a visual c++ ból hányas verziókat?

Egyébként felraktam én már az összeset de nem jó.
Amúgy nem kell minden verziót telepíteni ugye?

Ezt a hozzászólást Viperion módosította (2014.07.07 22:10 GMT+1 óra, ---)

   
Pixi - Tag | 206 hsz       Online status #202369   2014.04.08 13:24 GMT+1 óra  
Na Kipróbáltam ezt Console (szerver) + XNA/MonoGame-val (kliens), és amitől tartottam, hogy esetleg nem fog működni, az működik szerencsére.

Viszont olyan problémám van, hogy időnként nem megfelelően működik, az "add", "remove" üzenet feldolgozása. Pontosabban két féle hiba szokott jelentkezni véletlen időközönként, persze tutira nálam van a hiba.

A helyzet úgy áll, hogy a saját gépemen ki van nyitva a szerver mellett akár 8-10 kliens is (320x240 méretű kis game amennyi kb. kifér), majd amilyen gyorsan csak tudom megpróbálok egyszerre csatlakozni mindegyikkel (váltogatok az ablakok között), valamint ugyanezt megkísérlem a lecsatlakozáskor is:

1. Egyes kliensek időnként nem érzékelnek minden csatlakozni kívánó Playert, vagy pedig pont az ellenkezője, ugyanazt a játékost többször is addolják.
2. Lecsatlakozáskor előfordul, hogy egyes klienseknél ott marad a már offline játékos, ilyenkor a többi online még aktív marad és érzékelhető.

A hiba előfordulásának aránya úgy vettem észre csökkenthető, ha a "System.Threading.Thread.Sleep()"-et is beiktatom szerver és/vagy kliens oldalon is megfelelő értékkel.

A már csatlakozott játékosok mozgatásával ("move" parancsával) nincs semmilyen gond, pedig azt küldik egyszerre valós időben szinte minden pillanatban (nem iktattam be még FPS korlátot), ettől nem akad ki a szerver. Gondolom én valamilyen ellenőrzést kéne bevezetni a szerver-kliens között az új vagy éppen eltávolítandó elemek érzékeltetésére. Csak azt nem tudom, mikor az említett problémák egyike bekövetkezik, akkor szerver vagy kliens oldalon lehet-e a probléma? Mintha szerver odalon beragadna az üzenet időnként, és többször küldené el a kliensek egy részének, vagy pedig kliens oldalon nem frissül a beérkező üzenet, és többször addol...Nem tudom jobban elmagyarázi. Már arra is gondoltam ha online történne mindez 10 vagy 10+ playerrel, akkor nem fordulna elő a hiba, mert az a bizonyos szintű lagg megakadályozná hogy mindenki egy pillanatban küldjön üzenetet. Milyen technikák vannak erre?

ui: A legmegbízhatatlanabb metódust csak mozgatásnál használom (Unreliable), a hozzáadás, eltávolítás vagy fontosabb infó az mindig legmegbízhatóbb (ReliableOrdered).

   
Pretender - Törzstag | 2498 hsz       Online status #202284   2014.03.31 08:30 GMT+1 óra  
Konkrét indokot nem tudok mondani, hogy miért nem így szokták csinálni. Talán csak annyi, hogy megnövekedik az adatforgalom, illetve a szerializálás is sokkal lassabb. Míg integer számok esetén csak little-endian <-> big-endian konverzióra kell figyelni, stringek esetén először szerializálni kell, majd deszerializálni a szöveget. Néhány playerig valószínűleg nem vesz észre különbséget az ember egyébként, szóval még akár működhet is. Nyilván ilyenkor azért tudni kell, hogy ha pl. floatokat küld az ember, akkor lesznek a küldő és fogadó oldalon eltérések. Ugyan nem túl nagyok, szóval, ha nem számít, akkor jó.

   
Pixi - Tag | 206 hsz       Online status #202280   2014.03.30 22:58 GMT+1 óra  
Ti mennyire tartjátok jónak a string splittelését hálózati értékek átadására? Mondjuk egy kisebb, de mozgalmasabb játék esetében? Több helyen a byte-os, azon belül enumerátoros megoldásokat láthatom a különböző adatcsomagok küldésére, fogadására és értelmezésére, valamint érték átadására...de mi van akkor, ha átküldök egy komplett stringet (hosszabb sor), majd ott szóközzel el van választva minden? Az első szó mindig megmondja mit kell csinálni, a második pedig hivatkozna az aktív elemek megfelelő index jelöltjére vagy nevére, vagy egyből adattagra...a többi az érték átadás...azon kívül, hogy ez nagyobb adatforgalmat generálhat így, van más rossz mellékhatása? Én most konkrétan a LidgrenNetwork.dll -t használom, ez UDP-s és ez tűnik legjobb megoldásnak .NET -es környezetben...

Csak egy nagyon egyszerű példa (most tanulgatom), legyen szerver oldali kódrészlet:

Kód:
using Lidgren.Network;
using .......
.....
..
if ((incmsg = Server.ReadMessage()) != null)
{
    switch (incmsg.MessageType)
    {
        case NetIncomingMessageType.ConnectionApproval:
        case NetIncomingMessageType.Data:
            {
                string[] pieces = incmsg.ReadString().Split(' ');
                if (pieces[0] == "connect")
                {
                    incmsg.SenderConnection.Approve();
                    ...
                    ...
                    ...
                    label2.Text = Server.ConnectionsCount.ToString();
                }
                else if (pieces[0] == "disconnect")
                {
                    incmsg.SenderConnection.Disconnect("bye");
                    ...
                    ...
                    ...
                    label2.Text = Server.ConnectionsCount.ToString();
                }
                else
                {
                    if (pieces[0] == "add"..."remove"..."move")
                    {
                       for (int i = 0; i < p.Count; i++)
                       {
                           if (p[i].con == incmsg.SenderConnection)
                           {
                            ......akármi......
                            p[i].adattag_a = pieces[1];
                            p[i].adattag_b = pieces[2];
                            .....
                            ..
                           }
                       }
                    }
                 } 
              }
            break;
        case NetIncomingMessageType.StatusChanged:
        default:
            break;
    }
    Server.Recycle(incmsg);
}


public class Player
{
    public NetConnection con;
    public Label l;
    public string name;
    public int x, y;

    .....
    ...
    .


(Tudom itt a Connect meg a Disconnect is a "Data"-ban lett megoldva az egyszerűség kedvéért)

   
Pretender - Törzstag | 2498 hsz       Online status #200991   2014.02.11 07:02 GMT+1 óra  
Más elven működik a c# meg a c++, nem biztos, hogy érdemes összehasonlítani.

   
Viperion - Tag | 540 hsz       Online status #200977   2014.02.10 21:39 GMT+1 óra  
Itt van ez a kód:
Script1
class Program {
private static void Main() {
Other x = new Other();
}
}

Script2
class Other { }

Ez c++ ban csak úgy működne,ha a script2 be volna includelve a script1 be.
De ebben a c# kódban ez nem történik meg és mégis működik,lefordul?

Csharp ban automatikusan betöltődik az egyik fájl a másikba?

   
Parallax - Tag | 581 hsz       Online status #200249   2014.01.09 11:37 GMT+1 óra  
Kód:
foreach (int value in arr)
    ...;


Működik de két egymásba ágyazott for ciklus olvashatóbb.
Kód:
for (int x=0; x < arr.GetLength(0); x++)
{
    for (int y=0; y < arr.GetLength(1); y++)
    {
        int value = arr[x, y];
    }
}


Persze akkor, ha erre gondoltál "2D tömb" alatt:
Kód:
int[,] arr = new int[2, 5];

Ezt a hozzászólást Parallax módosította (2014.01.09 11:47 GMT+1 óra, ---)

   
Viperion - Tag | 540 hsz       Online status #200238   2014.01.08 19:37 GMT+1 óra  
A gyakorikerdesek.hu weboldalon nem kapok korrekt választ arra,hogy eggyetlen egy foreach ciklussal,hogyan lehet végigmenni egy egész 2D tömmbön.Egyébként szerintem sehogy.

Ilyen tömbön:
Int[][] arr = new int[2][5];
Egyenetlen(jagged) tömb.

Ezt a hozzászólást Matzi módosította (2014.01.08 20:22 GMT+1 óra, ---)

   
Parallax - Tag | 581 hsz       Online status #200132   2014.01.01 17:43 GMT+1 óra  
Idézet
Viperion :
De parallax ha a GC.SuppressFinalize(this) törli a managed erőforrásokat a Dispose() metódusban,akkor miért van szükség erre a kódrészletre a CleanUp()-ban?
If(disposing) { felügyelt erőforrások törlése }


Például írhatok egy ilyet is:
Kód:
If(disposing)
{
    base.Dispose();
}


Idézet
Viperion :
Én úgy tudom,hogy a suppressfinalize csak annyit csinál,hogy megmondja a gc nek azt hogy erre az objektumra már nem kell destruktort hívnia.Tehát managed memóriát ez nem szanadítt fel vagy mégis?
Nem kell az oda ha a suppressfinalize felszabadítja a managed memóriát.


A suppressfinalize-nál megjelölődik szemétnek az objektum és amikor sorra kerül nem hívódik meg a "desktruktor". Managed memóriát sehogy nem lehet felszabadítani, ezt a .NET kezeli.

   
Viperion - Tag | 540 hsz       Online status #200127   2014.01.01 15:54 GMT+1 óra  
De parallax ha a GC.SuppressFinalize(this) törli a managed erőforrásokat a Dispose() metódusban,akkor miért van szükség erre a kódrészletre a CleanUp()-ban?
If(disposing) { felügyelt erőforrások törlése }

Én úgy tudom,hogy a suppressfinalize csak annyit csinál,hogy megmondja a gc nek azt hogy erre az objektumra már nem kell destruktort hívnia.Tehát managed memóriát ez nem szanadítt fel vagy mégis?
Nem kell az oda ha a suppressfinalize felszabadítja a managed memóriát.

   
Parallax - Tag | 581 hsz       Online status #200124   2014.01.01 14:36 GMT+1 óra  
Viperion: Azt írtad már több C++ könyvet is kitanulmányoztál. Akkor biztosan tudod hogyan kell dinamikusan memóriát foglalni és mi az a pointer és, hogy valahol a lefoglalt területet kézzel fel kell szabadítani a delete-el. Ez a natív, vagy .NET-es szóhasználattal unmanaged futtatás.

Mivel .NET-nél nincs delete, de előfordulhat, hogy natív objektum keletkezik egy managed objektumban natív DLL-es hívás segítségével azt kézzel fel kell szabadítani ezért van ez a dispose patternes dolog. Ezúttal a delete utasítást a Dispose()-al tudjuk szimulálni, ahol a managed objektumot a GC.SuppressFinalize(this);-el "töröljük", a natív objektumot pedig a megfelelő natív DLL-ben lévő hívás segítségével. A "destruktor" mindeképpen lefut .NET-nél, de fel kell készíteni arra, hogyha a Dispose()-t nem hívjuk meg, akkor is törlődjön a natív objektum.

A különbség az, hogy a "destruktor" lefutása .NET esetében nem determinisztikus, vagyis mivel nincs delete utasítás a GC egyszer csak kitörli azokat objektumokat, amik szemétnek vannak megjelölve valamilyen szisztéma alapján, amit az aktuális .NET verzió algoritmusai döntenek el. Ennélfogva a hozzá tartozó unmanaged/natív objektum élettartama is "véletlenszerű" lesz.
A közvetlen Dispose() hívással annyit lehet elérni, hogy legalább az unmanaged objektum azonnal felszabadul a .NET-es objektumot pedig megjelöljük szemétnek és majd egyszer csak törlődik. Ez csak a natív objektumok kezelését teszi természetesebbé, hiszen ott megszoktuk, hogy akkor törlődik valami, amikor a programozó akarja és nem csak úgy találomra.

Ezt a hozzászólást Parallax módosította (2014.01.01 14:42 GMT+1 óra, ---)

   
Matzi - Szerkesztő | 2520 hsz       Online status #200122   2014.01.01 11:54 GMT+1 óra  
Viperion:
Unmanaged objektum például az, ha meghívsz egy C++ban írt dll-ben lévő kódot. Arról semmit nem tud C#, szóval nem managelt.Az általa lefoglalt memóriát ha nem szabadítja fel automatikusan, akkor neked kell gondoskodnod róla.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Viperion - Tag | 540 hsz       Online status #200116   2014.01.01 02:22 GMT+1 óra  
Mi az ami unmanaged ezt nem tudom.
Itt arra gondolsz,hogy egy managed objektumnak(milyen egy nem managed objektum? ) ha van txt dokumentumra hivatkozó referenciája akkor ezt a fájl már nekem kell törölni?

Nem értem.

Milyen egy unmanaged objekt és hogy lehet managed objektnek unmanaged függősége?



Azt sem értem.
Miért van szükség erre a függvényhívásra abban az esetben ha csinálok egy destruktort?
GC.SuppressFinalize(this);
Azért mert ha lefuttatod a Dispose függvént,akkor már nincs szükség arra a destruktorra amit te írtál ugye?

De a háttérben valamilyen destruktornak akkor is meg kell hívódnia,hogy törölje azt amire már nincs érvényes referencia nem?

Ezt a hozzászólást Viperion módosította (2014.01.01 02:37 GMT+1 óra, ---)

   
Parallax - Tag | 581 hsz       Online status #200111   2013.12.31 20:42 GMT+1 óra  
Igazi destruktor nincs C#-ban. Igazából mivel minden törlődik automatikusan így nem is lenne értelme destruktorozni,

Unmanaged környezetben viszont fontos tudni, hogy adott objektum mikor szűnik meg, mert a függőségeit is meg kell szüntetni, azok maguktól nem szűnnek meg, ha már nem hivatkozik rájuk senki.

Managed környezetben a dispose azért kell, mert előfordul, hogy van egy managed objektumnak unmanaged függősége és azt valahogy meg kell szüntetni, mivel ez már nem a .NET hatókörébe tartozik. Ehhez az ún. dispose patter-t szoktam használni. Ennek lényege kettős. Egyrészt direktben lehet hívni az objektumon a Dispose()-t ami meghívja az unmanaged rész törlését és megjelöli szemétnek a managed objektumot, másrészt, ha ezt elfelejtem, akkor van egy védelem, ami az objektum megszűnésekor aktivizálja a megfelelő unmanaged rész törlését, ez a "destruktor".

Kód:
sealed class MyObject : IDisposable
{
    bool disposed = false;

    ~MyObject()
    {
        Console.WriteLine("Finalize.MyObject");
        CleanUp(false);
    }

    void CleanUp(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                //felügyelt erőforrások takarítása
            }

            //nem felügyelt erőforrások takarítása
        }

        disposed = true;
    }

    public void Dispose()
    {
        CleanUp(true);
        GC.SuppressFinalize(this);
    }
}
.

   
Viperion - Tag | 540 hsz       Online status #200110   2013.12.31 19:50 GMT+1 óra  
Parallax így már szuperül értem. :-)
C# ben mennyire gyakran írtok destruktort vagy valósítjátok meg az IDispossable interfrészt?
És a managed és az unmanaged erőforrások közt mi a külömbség.

Ezt a hozzászólást Viperion módosította (2013.12.31 19:57 GMT+1 óra, ---)

   
Parallax - Tag | 581 hsz       Online status #200064   2013.12.29 15:33 GMT+1 óra  
Viperion, megpróbálom röviden:
Kovariancia: nem más, mint a konvertálhatóság, vagyis, adott kifejezés akkor kovariáns, ha az adott típus helyébe be lehet helyettesíteni annak a típusnak a leszármazottját

Kontravariancia: pont az ellentéte a kovarianciának, vagyis az adott kifejezés akkor kontravariáns, ha adott típus helyébe be lehet helyettesíteni annak ősét.

Én mondjuk már azon is elfilóznék, hogy egyáltalán egy script nyelvnél van e értelme statikusan tipizálni, mert ilyen célokra inkább a lua-t, vagy javascript-et szokták használni és akkor nem magával a nyelvi elemekkel kell küzdeni, hanem a magasabb szintű script feladatokkal lehet foglalkozni.

   
Tunyu - Tag | 448 hsz       Online status #200040   2013.12.26 18:49 GMT+1 óra  
Viperion ne haragudj , de szerintem te olyan ember lehetsz mint a Csodabogár című filmben John Travolta akit játsz ha első olvasatra mindent megértesz egy programozásról írt szakkönyvben ami valószínűleg elég szárazan írja le a dolgokat. Ha ilyen ember vagy akkor viszont nagyon irigyellek!

   
Viperion - Tag | 540 hsz       Online status #200039   2013.12.26 17:56 GMT+1 óra  
Nemértelek Pretender.
Egyébként próbálgatom de nem veszem észre a külömbséget a sima és az out,in közt.

   
Pretender - Törzstag | 2498 hsz       Online status #200038   2013.12.26 17:41 GMT+1 óra  
Ilyen ez, ha az ember segíteni akar... :/

   
Viperion - Tag | 540 hsz       Online status #200037   2013.12.26 17:32 GMT+1 óra  
Tunyu
Viperion szerintem ezt így nem fogod megérteni,nem véletlenül jártak / járnak évekig egyetemre.

Szerintem nagyon eltúlzod amit írtál.Én már túl vagyok 2 nagy c++ szakkönyvön úgy,hogy minden benne leírtat megértettem és alkalmazni is tudom és nem kellett hozzá egyetem.

De ebben a c# nyelvben vannak olyan nyelvi fogalmak amikre nem találok könnyen érthető magyarázatot.

Ennyi az egész nem kell ezt eltúlozni.Én csak egyszerűem nem értem azt a pár dolgot amit lentebb írtam.És ahhoz hogy ezt megértsem nem kell hozzá egyetem meg évek sem.
Inkább segítsetek.Ha ti értitek ezt akkor inkább elmagyarázni próbáljátok ne pedig lebeszélni róla.


   
Pretender - Törzstag | 2498 hsz       Online status #200035   2013.12.26 15:38 GMT+1 óra  
Mellesleg szerintem jól bevált taktika, hogy próbálgatod... Kit érdekel, hogy hogy működik legbelül, ha tudod, hogy mire kell / lehet használni. De szerintem sem érdemes foglalkozni ilyenekkel addig, amíg nem jön elő. És jó eséllyel nem is fog.

   
Tunyu - Tag | 448 hsz       Online status #200032   2013.12.26 15:10 GMT+1 óra  
Viperion szerintem ezt így nem fogod megérteni,nem véletlenül jártak / járnak évekig egyetemre. Itt szerintem több olyan dologgal kéne tisztában lenned amit se általános se középiskolában nem sajátítasz el túlzottan nagy mértékben.Legalább is én nem emlékszem hogy nagyon sokat foglalkoztunk volna statisztikai vagy valószínűség számítással.De egyébként sem hiszem hogy valaha is írnál olyan scriptet amihez ilyesfajta számítás szükséges és ezt a lehető legjobb indulatból írom. Felesleges olyan dolgon agyalnod aminek soha nem fogod hasznát venni.

   
Viperion - Tag | 540 hsz       Online status #200030   2013.12.26 13:54 GMT+1 óra  
Nem értem.
Elmagyarázná valaki hozzáértő. Pls.

   
Pretender - Törzstag | 2498 hsz       Online status #200029   2013.12.26 13:45 GMT+1 óra  
Google első találat a kovarianciára

   
Viperion - Tag | 540 hsz       Online status #200028   2013.12.26 13:33 GMT+1 óra  
Parallax a te magyarázatodat nem értem mert nem találom a kovariáns és kontravariáns szavak jelentését sehol.

Szerintem érthetőbben is meg lehete fogalmazni azt amit leírtál.

:-)

   
Viperion - Tag | 540 hsz       Online status #200027   2013.12.26 13:33 GMT+1 óra  
Parallax a te magyarázatodat nem értem mert nem találom a kovariáns és kontravariáns szavak jelentését sehol.

Szerintem érthetőbben is meg lehete fogalmazni azt amit leírtál.

:-)

   
Parallax - Tag | 581 hsz       Online status #199985   2013.12.19 11:29 GMT+1 óra  
Értem, akkor tessék:
public delegate TResult myDel<out T1,TResult>(T1 obj);
T1 típus kovariánssá tétele

public delegate TResult myDel<ref T1,TResult>(T1 obj);
ilyen nincs

public delegate TResult myDel<in T1,TResult>(T1 obj);
T1 típus kontravariánssá tétele


   
Viperion - Tag | 540 hsz       Online status #199972   2013.12.18 19:03 GMT+1 óra  
Idézet

Jó, de most ha megkérdezem mi az class, meg interface azt, hogyan válaszolod meg egy mondattal?

Interfészek metódusok és property-k implementálását írhatja elő az őket megvalósító osztályoknak.Ez teljesen érthető.
A class az egy új típus definíciója.Ez is érthető és rövid voltam.:-)

   
Parallax - Tag | 581 hsz       Online status #199968   2013.12.18 17:48 GMT+1 óra  
Idézet
Viperion :
Azért mert vagy megtanulok rendesen valamit vagy sehogy.
Képzeld el hogy pl mondtad valakinek,hogy programozol c# ben már egy jó ideje aztán ha rákérdez egy bizonyos dologra ami a c# ről szól aztán nem tudod megválaszolni neki.


Jó, de most ha megkérdezem mi az class, meg interface azt, hogyan válaszolod meg egy mondattal? Ilyen mélyebb elméleti kérdéshez inkább csak az utat lehet és érdemes megmutatni. Amúgy eddig nekem még éles céges munka során nem jött elő az in meg out a generikusoknál valószínűleg nem lesz annak se álmatlan éjszakája, aki egy unity script-hez ezt még nem tudja.

   
Matzi - Szerkesztő | 2520 hsz       Online status #199962   2013.12.18 16:14 GMT+1 óra  
Viperion:
Ez egy teljesen természetes dolog. Senki sem tud mindent. Pláne hogy a programnyelvek nem csak hogy bonyolultak, de még folyamatosan fejlődnek is, így nem lehet elvárás, hogy minden apró nüansszal előre tisztában legyél.

Ahogy az ősi kínai közmondás is tartja:
"Ezt a hidat majd csak akkor gyújtjuk fel, ha majd odaértünk."
Vagy ilyesmi.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Viperion - Tag | 540 hsz       Online status #199960   2013.12.18 15:49 GMT+1 óra  
Azért mert vagy megtanulok rendesen valamit vagy sehogy.
Képzeld el hogy pl mondtad valakinek,hogy programozol c# ben már egy jó ideje aztán ha rákérdez egy bizonyos dologra ami a c# ről szól aztán nem tudod megválaszolni neki.

   
Parallax - Tag | 581 hsz       Online status #199956   2013.12.17 23:13 GMT+1 óra  
Olyan dolgokat feszegetsz, amit nem lehet egy félmondattal elintézni. Megint felmerül a kérdés, hogy miért kell ez neked?

   
Viperion - Tag | 540 hsz       Online status #199954   2013.12.17 20:27 GMT+1 óra  
Nem értem Parallax.
Nekem nem több oldalas irományokra van szükségem hanem egy jól megfogalmazott válaszra,hogy mik ezek a módosítók a sablonparaméterekben: in, out, ref.
De amúgy kösz a linket.Átnéztem de túl van ott bonyolítva az egész.

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

   
Parallax - Tag | 581 hsz       Online status #199946   2013.12.17 10:46 GMT+1 óra  
Ez talán megvilágít 1-2 dolgot.

   
Viperion - Tag | 540 hsz       Online status #199904   2013.12.14 20:35 GMT+1 óra  
Eltudná magyarázni nekem valaki,hogy ha ezeket a kulcsszavakat ha generikusokban használom akkor mit jelentenek mire jók mivel lesz másabb ha használom ezeket a kulcsszavakat a sablon paraméterekben.
Például:
public delegate TResult myDel<T1,TResult>(T1 obj); Ez a normális.

Ezek pedig mivel külömböznek tőle?
public delegate TResult myDel<out T1,TResult>(T1 obj);
public delegate TResult myDel<ref T1,TResult>(T1 obj);
public delegate TResult myDel<in T1,TResult>(T1 obj);

   
Viperion - Tag | 540 hsz       Online status #199719   2013.12.04 10:20 GMT+1 óra  
Csak érdekelt,hogy lehetséges e megcsinálni.
De utánnanéztem és nem lehet.

   
Parallax - Tag | 581 hsz       Online status #199715   2013.12.04 09:49 GMT+1 óra  
Ilyet még C++ nál se lehet, talán nem véletlenül. De ha már felhoztad neked ez mire is kell?

   
Viperion - Tag | 540 hsz       Online status #199713   2013.12.04 08:44 GMT+1 óra  
Nem találok rá példát.
A feltételes operatort ami három operandús azt,hogyan kell túlterhelni?
Public static string operator ? ()

Rájöttem nem lehet.

   
Parallax - Tag | 581 hsz       Online status #199700   2013.12.03 10:39 GMT+1 óra  
Viperion - Tag | 540 hsz       Online status #199699   2013.12.03 10:28 GMT+1 óra  
Az,hogyan lehet,hogy az indexbe egy stringet adnak meg és nem számot?Ugy tudtam,hogy oda csak numerikus értékek kerülhetnek.
Példa:
http://docs.unity3d.com/Documentation/ScriptReference/Animation.Index_operator.html
Nem értem,hogy hogyan van ez megvalósítva mert ha rámegyek az Animation típusra és leglent az operátoroknál nem látok olyan indexelő operátort ami stringet várna.
Hogyan van ez?

   
Pixi - Tag | 206 hsz       Online status #199222   2013.11.18 12:08 GMT+1 óra  
Találtam egy nagyon egyszerűen használható "NetworksApi.dll"-t. Szó szerint üzenetet kell küldeni, a Server oldalon használva a "using NetworksApi.TCP.SERVER;"-t, Kliens oldalon pedig a "using NetworksApi.TCP.CLIENT;"-t. Már csak arról nem találok semmi infót, hogy kell-e hozzá külön licensz (ha 1x komolyabban fel szeretném majd használni):

A kész sablon Server/Client projekt (mivel az nem volt feltöltve készen):
Networking_Chat_Example.zip

Videó ezekről:
Kliens: C# Multi Threaded Networks Api Library Client Implementation Tutorial
Szerver: C# Multi Threaded Networks Api Library Server Implementation Tutorial

Az API forrása:
C# Networks Api Library

Ha valaki tud bármit is arról, hogy ingyenes-e vagy sem, az jelezzen felém.

   
Parallax - Tag | 581 hsz       Online status #199176   2013.11.16 18:30 GMT+1 óra  
Idézet
Viperion :
Es igaz az,hogy a statikus osztalyok nem lehetnek bazis es gyerek osztalyok?


Gyakorlatilag egyik következik a másikból. Ha a statikus osztály őse lenne mondjuk egy másik statikus osztály, akkor lehetne örökölni tulajdonképpen a semmit, mert példányt úgyse lehet belőlük létrehozni. Ha pedig nem statikus az ős, akkor meg méginkább értelmetlen lenne az egész.

   
Pixi - Tag | 206 hsz       Online status #199170   2013.11.16 17:55 GMT+1 óra  
Matzi:
Köszönöm a kimerítő választ és a linkeket is Hát így elolvasva az írásod eléggé összetettnek tűnik a dolog egyelőre (nekem), szóval majd ezzel is szép lassan haladok mint minden mással. A linkeknek köszönhetően, ami így hirtelen ránézésre nekem hasznosnak tűnik, talán ez:

C# Tutorial - Simple Threaded TCP Server

Még annyit szeretnek tudni, hogy mit gondoltok a lidgren network-ról? Miért jó ez? Valaki próbálta már?

lidgren network gen3

Ez egy egyszerűsített forma az üzenetek küldésére és fogadására? Természetesen kipróbálgatom ezeket a sablonokat, csak szeretném tudni meg éri-e foglalkozni vele.

   
Viperion - Tag | 540 hsz       Online status #199134   2013.11.15 16:35 GMT+1 óra  
Bocs az ekezetekert maserol irok es nem tudom hogyan kell ekezeteket irni.
Igen koszi a valaszodat.
Engem az erdekelne a leginkabb,hogy ez,hogyan valosul meg a hatterben a static konstruktor.

Es igaz az,hogy a statikus osztalyok nem lehetnek bazis es gyerek osztalyok?

   
Matzi - Szerkesztő | 2520 hsz       Online status #199124   2013.11.15 13:34 GMT+1 óra  
Viperion:
A statikus konstruktor egyszer fut le, és nem is kell többször lefusson. Nem az a célja. Ha ilyet szeretnél, akkor minden funkcionalitást rakj be egy statikus függvénybe, és azt hívd meg a statikus konstruktorból is és onnan is ahonnan még akarod. Az nem egy valódi konstruktor, ne próbáld úgy kezelni.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Viperion - Tag | 540 hsz       Online status #199116   2013.11.15 04:59 GMT+1 óra  
Kössz a segítséget már értem.
De lenne még 2 kérdésem amire szerintem tudom a választ de megerősítésre van szükségem tapasztaltabbaktól.

Egyik dolog:
A statikus osztályok nem örökölhetnek adatokat más osztályoktól kivéve System.Object-ből és más nem statikus osztályok sem örökölhetnek adatokat a statikus osztályoktól.Ezt jól mondtam?

Másik dolog:
A statikus konstruktor nem része az osztálynak ugye?

A this-el nem tudtam meghívni azt.
Példa:
Kód:
using System;

class A {
    static void Main()
    {
        System.Console.WriteLine(B.i);
    }
}

public class B {
    public static readonly B b = new B(10);
    public static int i;
   
    static B()
    { i=5; }
   
    B(int s): this() // Itt a hiba(nem hívja meg a static konstruktort).
    {i+=s;}
}


A hibaüzenet az,hogy nem talál olyan konstruktort ami nem várna egy paramétert sem.
Akkor a statikus konstruktor nem része az osztálynak?Ha igen,akkor hogyan működik ez valójában?

A static konstruktor csak egyszer fut le a legelején legelső konstruktorként.
Később miért nem tudom meghívni ezt a static konstruktort úgy mint pl. egy privátot?

Ha nem része az osztálynak,akkor minek a része?
Ha pedig az osztály része,akkor miért nem tudom azt meghívni még egyszer?

Köszi szépen a segítségeket.

   
Matzi - Szerkesztő | 2520 hsz       Online status #199060   2013.11.13 10:46 GMT+1 óra  
A nullable egy olyan struktúra, ami a becsomagolt értékén túl tartalmaz egy flaget arra vonatkozóan, hogy null e. Ennek akkor van szerepe, ha valamilyen különleges esetben nem tudod megoldani, hogy egy értéktartományt külön kezelj. Például egy dátum típus ha jól rémlik nem lehet null, így viszont tudod jelezni, hogy az értéke lényegtelen. Vagy ha van egy számod, akkor annak is minden értéke érvényes, de így jelezheted, hogy ez mégsem.

Pixi:
No, a peer-to-peer megoldásnak van pár komoly korlátja. Például sosem lehet az összes gép állapota azonos, gyakorlatilag kizárt a teljes szinkron, szóval erőteljesen dolgoznod kell azon, hogy ez ne okozzon gondot. Meg ha kiesik egy node, akkor mindegyiknek detektálnia kell, illetve bárki nyugodtan csalhat, mert nem tudod felügyelni rendesen. Persze megoldható, de rettentő sok munka. Ráadásul peer-to-peer esetén mindenkinek kell legyen forwardolt portja ha router mögött van, különben két ilyen rejtőzködő játékos között sosem jön létre kapcsolat.

Ha meg tudod oldani, akkor sokkal egyszerűbb a szerver, ami mondjuk nagyobb teljesítményt és sávszélet igényel.

A külön szálon futtatásra vannak egyéb tutorialok, mert az teljesen más téma. Amúgy ez az egyik gyengesége a TCP-nek, hogy blokkol, szóval külön szálon kell futtatni gyakorlatilag az összes adatfogadást és küldést. Meg persze a streameléssel is lehetnek gondok, illetve könnyen elévülhet az adat, mire megkapod. Ennek ellenére lehet használni, vannak játékok, amik csak TCP-t használnak, de az UDP némileg fájdalommentesebb. Vagyis annak is vannak trükkjei, de talán kicsit könnyebben kezelhetőek.

TCP-nél amúgy külön futni kell egy kört, szóval a csatlakozás úgy megy, hogy egy ismert portra csatlakozol, és utána elkéred hogy hová tudsz csatlakozni rendesen, onnantól az eredetit bontod, amit meg megkaptál használhatod akármeddig. Csak ugye minden portot ki kell forwardolni, amin kommunikációt szeretnél fogadni, ami egy szervernél nem olyan fájó, de p2p esetben akadnak ezzel problémák.

Az üzenetküldősdi meg úgy van, hogy van két postafiókod, egy kimenő és egy bemenő (mindez persze minden aktív kapcsolatra). A worker threadek szépen feldolgozzák a bemenőt, és aszinkron fogadod a bejövő és küldöd a kimenő üzeneteket mindenfelé. Innentől mindent neked kell megcsinálnod. Tipikusan lesz valami sajátos protokollod, amiben megmondod mi mit jelent. Pl egy üzenet struktúra, id-vel, és azzal, hogy mit csináljon. C#ban amúgy van elvileg lehetőség RPC-re, de az elég veszélyes, és lassúcska is. Illetve lehet szerializálni automatikusan, ami kissé bőbeszédű lesz, de legalább tuti működik. Ez alatt értsd, hogy egy 50 byteos structból bármikor generál neked 250byteos csomagot, ami sokat ront a kommunikáció sebességén. Jobban jársz, ha magadnak optimalizálod, legalábbis amikor már a sebesség a kérdés, addig jó az automatikus is.

No szóval lesz egy struktúrád, valami amivel le tudod írni, hogy mit szeretnél. Például: akció kód (pl: mozgass egységet), azonosítók (pl: mi az egység id-ja), meg egyéb paraméterek (pl honnan hová), ezen felül idő bélyegek (pl ha két másodperce küldted el a csomagot, az egység a másik gépen már rég elindult, ezért korrigálni kell a pozícióját). A legtöbbször lehet inkrementálisan küldeni az adatokat (pl: az egység elindult vagy megállt), de időről időre érdemes teljes szinkront is bevetni (pl: az egység pont itt van), különben elmásznak a gépeken az állapotok az időbeli eltolódások miatt.

Ez az általam látott eddigi egyik legjobb tutorial és magyarázat a témában. Igaz nem C#, de az elmélet jó benne.
Egy kis C# multithreading. (Csak átfutottam, de kb jónak tűnik.)
Stackoverflow kérdés és válaszok a témában.

Remélem sikerül elindulnod.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Frissebbek | Korábbi postok
[1] [2] > 3 < [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [46]