mboost-dp1
C#/DirectX - Kan ikke finde Device-class!
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hej,
Jeg er helt ny i C# og DirectX programmering. Jeg er igang med at tage et spilprogrammerings-fag og her skal vi lave nogle visuelle ting som disse.
Jeg prøver at følge denne guide: http://gregs-blog.com/2008/02/26/managed-directx-c...
Jeg har gjort følgende for at komme igang med projektet:
Installeret: DirectX SDK, Visual C# Express 2010, .NET Framework
I Visual C# Express opretter jeg et nyt tomt projekt.
For at få DirectX library med, henter jeg referencen manuelt fra "C:\\Windows\Microsoft.NET\DirectX for managed code\1.0.2902".
Jeg går så i gang med at følge guiden, og det går fint.
Men så kommer jeg til Step 3 i guiden: "Create the Device Object"
Og her kommer mit problem så. Når jeg prøver at deklarere et Device objekt kan den ikke finde den tilhørende klasse.
Har i nogen ideer? [ Kunne virkelig godt bruge noget hjælp her. :) ]
Jeg er helt ny i C# og DirectX programmering. Jeg er igang med at tage et spilprogrammerings-fag og her skal vi lave nogle visuelle ting som disse.
Jeg prøver at følge denne guide: http://gregs-blog.com/2008/02/26/managed-directx-c...
Jeg har gjort følgende for at komme igang med projektet:
Installeret: DirectX SDK, Visual C# Express 2010, .NET Framework
I Visual C# Express opretter jeg et nyt tomt projekt.
For at få DirectX library med, henter jeg referencen manuelt fra "C:\\Windows\Microsoft.NET\DirectX for managed code\1.0.2902".
Jeg går så i gang med at følge guiden, og det går fint.
Men så kommer jeg til Step 3 i guiden: "Create the Device Object"
Og her kommer mit problem så. Når jeg prøver at deklarere et Device objekt kan den ikke finde den tilhørende klasse.
Har i nogen ideer? [ Kunne virkelig godt bruge noget hjælp her. :) ]
Hvis du har fået installeret SDK'et korrekt burde du kunne skrive følgende kode uden fejl fra compileren:
Og så burde du også kunne oprette et Device objekt.
Edit: Hvis #4 har ret, så prøv at fjerne den manuelle reference og prøv igen. Dobbelte libraries kan give det problem som du har. :)
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
Og så burde du også kunne oprette et Device objekt.
Edit: Hvis #4 har ret, så prøv at fjerne den manuelle reference og prøv igen. Dobbelte libraries kan give det problem som du har. :)
Mange tak for jeres svar.
#2 Jeg har inkluderet alle namespaces.
#4 Jeg kan ikke finde referencerne til "Microsoft.DirectX" i listen, når jeg prøver at importere dem.
#5 Det kan jeg ikke, så det kan godt være du har ret.
Lige nu prøver jeg at geninstallere SDK'et og så prøve at fjerne de manuelle referencer og så prøver at finde dem i listen.
#5 Til din edit: Jeg får fejl ved "using"-delen hvis jeg fjerne den manuelle.
Måske hedder det ikke helt det samme. Hedder referencen ikke bare "Microsoft.DirectX"?
Mange tak for jeres svar indtil videre, btw. ^^
#2 Jeg har inkluderet alle namespaces.
#4 Jeg kan ikke finde referencerne til "Microsoft.DirectX" i listen, når jeg prøver at importere dem.
#5 Det kan jeg ikke, så det kan godt være du har ret.
Lige nu prøver jeg at geninstallere SDK'et og så prøve at fjerne de manuelle referencer og så prøver at finde dem i listen.
#5 Til din edit: Jeg får fejl ved "using"-delen hvis jeg fjerne den manuelle.
Måske hedder det ikke helt det samme. Hedder referencen ikke bare "Microsoft.DirectX"?
Mange tak for jeres svar indtil videre, btw. ^^
Hmm, hvordan erklærer du dit Device? Smid noget kode herind, så kan vi måske spotte noget og hjælpe bedre. Og også gerne fejl-meddelelsen :)
Her, jeg har taget et screen dump af det hele, i kan se fejlmeddelsen i bunden, og erklæringen i venstre side.
I midten kan i se at jeg ikke kan se noget der hedder "Microsoft.DirectX":
C# Fejl 1200x800
(btw, har lige geninstalleret SDK'et igen og det gjorde ingen forskel :/ )
I midten kan i se at jeg ikke kan se noget der hedder "Microsoft.DirectX":
C# Fejl 1200x800
(btw, har lige geninstalleret SDK'et igen og det gjorde ingen forskel :/ )
Wow, ser lige du har smidt din erklæring før MainClass funktionen! Du skal rykke den ned i næste segment. :)
Prøv dette:
Prøv dette:
namespace MDX_Tutorial1
{
class MainClass:Form
{
MainClass()
{
this.Text = “Managed DirectX Tutorial 1″;
private Device m_device = null;
}
}
}
#10 Her har jeg så prøvet at tilføje referencen manuelt. Jeg får ikke fejlen oppe i "using"-delen mere.
#11 jeg har lige prøvet det, men det giver da ikke så meget mening at have private inde i en metode? private fortæller da bare at det kun er klassen selv der kan bruge det. Og det var vidst også meningen, at det skulle kunne bruges udenfor:
Men jeg har tilføjet billedet her: billede 2
#11 jeg har lige prøvet det, men det giver da ikke så meget mening at have private inde i en metode? private fortæller da bare at det kun er klassen selv der kan bruge det. Og det var vidst også meningen, at det skulle kunne bruges udenfor:
http://gregs-blog.com/2008/02/26/managed-directx-c-graphics-tutorial-1-getting-started/ skrev:Since we’ll be accessing this object in multiple functions, it must be a class member variable. Add the following declaration inside “MainClass”
Men jeg har tilføjet billedet her: billede 2
Her har jeg så gjort det uden "private" før: Device virker stadig ikke
Men nu viser den at jeg nok mangler referencen?
Men nu viser den at jeg nok mangler referencen?
Undskyld mit indlæg #11 - ved ikke hvor mit hovede fik den ide fra. Sorry, er helt flov over den :).
Men jeg lægger mærke til at du kun har tilføjet den dybe reference (den til Direct3D - hvad med den til DirectX). Med andre ord, kan du skrive:
Jeg kan ikke helt google hvilken klasse Device tilhører, men hvad sker der ved ovenstående?
Ps. Dine links til billede 2 og 3 er gået i kuk. 2'eren linker til 1'eren og 3 linker til intet, men jeg fandt billedet ved at rette i url'en :)
Edit:
Et andet eksempel siger du skal add'e tre referencer:
Men jeg lægger mærke til at du kun har tilføjet den dybe reference (den til Direct3D - hvad med den til DirectX). Med andre ord, kan du skrive:
private Microsoft.DirectX.Device m_device = null;
eller
private Microsoft.DirectX.Direct3D.Device m_device = null;
Jeg kan ikke helt google hvilken klasse Device tilhører, men hvad sker der ved ovenstående?
Ps. Dine links til billede 2 og 3 er gået i kuk. 2'eren linker til 1'eren og 3 linker til intet, men jeg fandt billedet ved at rette i url'en :)
Edit:
Et andet eksempel siger du skal add'e tre referencer:
Google skrev:Select the
Microsoft.DirectX.Direct3D.DLL,
Microsoft.DirectX.Direct3DX.DLL and
Microsoft.DirectX.DLL references and click ok
Ja, jeg ved ikke hvad der er gået galt der.
Linket til billede 2
Hvor ligger de her .DLL'er så? Synes ikke jeg kan finde dem.
Linket til billede 2
Hvor ligger de her .DLL'er så? Synes ikke jeg kan finde dem.
Iflg. den kilde jeg fandt:
Kilde skrev:Now go to the add reference dialog and click browse. Go to the directory you installed the DXSDK into and go to the "developer runtime" folder then go to x86 folder then go to the "DirectX for Managed Code" folder
Kilde
Jah, den kilde har jeg også kigget på. Men problemet er at der ikke findes den mappe i x86-mappen.
Jeg har til gengæld fundet ud af at DirectX SDK'et ikke kan bruges med C# VS2010: http://forums.xna.com/forums/t/52339.aspx
Og så har jeg fundet et alternativ til MS DirectX, det hedder SlimDX: http://slimdx.org/
Jeg har nu testet det med deres SDK, som bare er en redistribuering af MS versionen, og det virker! :)
Jeg har til gengæld fundet ud af at DirectX SDK'et ikke kan bruges med C# VS2010: http://forums.xna.com/forums/t/52339.aspx
Og så har jeg fundet et alternativ til MS DirectX, det hedder SlimDX: http://slimdx.org/
Jeg har nu testet det med deres SDK, som bare er en redistribuering af MS versionen, og det virker! :)
SlimDX kan klart anbefales, men det er godt nok at have fingerne i jorden til de første par timers tutorial.
Du kan også vælge at kigge på XNA, det er i samme stil, men omend noget bedre supportet, har mere dokumentation, og bedre værktøjer.
XNA kan også bruges til PC spil, samt XBOX :)
Du kan også vælge at kigge på XNA, det er i samme stil, men omend noget bedre supportet, har mere dokumentation, og bedre værktøjer.
XNA kan også bruges til PC spil, samt XBOX :)
SlimDX hvis du vil gøre tingene fra bunden, XNA hvis du vil lave spil. Længere er den sådan set ikke. ;)
Hvis du vil bruge SlimDX, så skal du bare referere til dll filen: C:\Program Files (x86)\SlimDX SDK (June 2010)\Bin\net20\x86\SlimDX.dll
Der følger også nogle samples med (tegne trekant på skærm osv..) med tilhørende kode.
DirectX har en rimelig stejl indlæringskurve, men hvis man bare er stædig nok, så begynder tingene langsomt at give mening. :)
Hvis du vil bruge SlimDX, så skal du bare referere til dll filen: C:\Program Files (x86)\SlimDX SDK (June 2010)\Bin\net20\x86\SlimDX.dll
Der følger også nogle samples med (tegne trekant på skærm osv..) med tilhørende kode.
DirectX har en rimelig stejl indlæringskurve, men hvis man bare er stædig nok, så begynder tingene langsomt at give mening. :)
Fordelen ved at bruge GAC er er ens msbuild script (.csproj filerne) bruger ens valgte assemblys qualified name, og ikke en static path til filen.
Det gør distribution af ens kode meget nemmere. Det er ikke så vigtigt hvis man kun arbejder én person på én pc, men ellers kan det være supertræls for "alle de andre", hvis man bruger refferencer til libs i f.eks "\Program Files\".
Det gør distribution af ens kode meget nemmere. Det er ikke så vigtigt hvis man kun arbejder én person på én pc, men ellers kan det være supertræls for "alle de andre", hvis man bruger refferencer til libs i f.eks "\Program Files\".
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.