|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.12.2005, 12:31 Titel: |
|
|
ey, wenns bei dir ruckelig ist, wirds daran leigen das dien spiel zu langsam läuft. Ich gehe mal davon aus, das du immer wenn du das Bild renderst guckst, wo der Mauszeiger ist und das entsprechende Tile dann umrandest ( so würd ichs machen). Wenn das Programm jetzt so langsam läuft, das die Maus quasi gar nicht auf den Mittleren postiotionen war, sieht man da natürlich auch keinen Rahmen.
Wenns daran net liegt, solltest du am besten mal Code posten, wie dus realisiert hast. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Vane Junior JLI'ler
Anmeldedatum: 03.11.2005 Beiträge: 70
Medaillen: Keine
|
Verfasst am: 30.12.2005, 12:44 Titel: |
|
|
Also hier mal mein code:
CPP: | void CheckMouse()
{
POINT point;
int tile = 7;
GetCursorPos(&point);
ScreenToClient(hWnd,&point);
if(point.x <= g_x && point.y <= g_y && point.x >= g_X && point.y >= g_Y)
{
rSource = MakeRect((tile - 1)* TILE_SIZE, tile * TILE_SIZE, 0, TILE_SIZE);
rDest = MakeRect ( x * 32 , 32, y * 32, 32);
AddQuad(&rSource, &rDest, 0xFFFFFFFF);
}
else
{
if(point.x > g_x)
{
x++;
g_x = g_x + 32;
g_X = g_X + 32;
}
else if (point.y > g_y)
{
y++;
g_y = g_y + 32;
g_Y = g_Y + 32;
}
else if(point.x < g_x && point.x < g_X) //PROBLEM!!!!!!!!!!!!!!!!
{
x--;
g_x = g_x - 32;
g_X = g_X - 32;
}
else if (point.y < g_y && point.y < g_Y)
{
y--;
g_y = g_y - 32;
g_Y = g_Y - 32;
}
}
}
|
wenn fragen sind zur erläuterung bitte stellen.....
CPP: | rSource = MakeRect((tile - 1)* TILE_SIZE, tile * TILE_SIZE, 0, TILE_SIZE);
rDest = MakeRect ( x * 32 , 32, y * 32, 32);
AddQuad(&rSource, &rDest, 0xFFFFFFFF);
|
Dieser code nimmt den rahmen und zeichnet ihn an die stelle wo ich oder der mauszeiger habenmöchte. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.12.2005, 13:00 Titel: |
|
|
es wäre net gewesen, das alles mal zu kommentiern, was was ist^^
ich blick zwar net so ganz durhc, wie dus gemacht hast, aber so hätte ichs gemacht:
CPP: | const TileSizeX=32, TileSizeY=32;
Point MausPos=GetMausPos(irgendwas);
int TileNumX=static_cast<int>(MausPos.x/TieSizeX)//zum runden casten
int TileNumY=static_cast<int>(MausPos.y/TileSizeY)//s.o.
Rect={TileNumX*TielSizeX, TileNumY*TileSizeY, TileNumX*TielSizeX+TilesizeX, TileNumY*TileSizeY+TileSizeY}
|
_________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
C++progging Senior JLI'ler
Alter: 31 Anmeldedatum: 03.10.2005 Beiträge: 244 Wohnort: Sauerland Medaillen: Keine
|
|
Nach oben |
|
|
Sandmanyous Mini JLI'ler
Alter: 36 Anmeldedatum: 30.12.2005 Beiträge: 5 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 30.12.2005, 13:36 Titel: |
|
|
ich stell mir das ganz cool vor, was du da machst, aber ich hab nur nen schwarzen bildschirm und hör deine start musik...
win xp sp0, radeon 9800pro, 2gb ddr ram, 3,2 ghz prozessor...
hab des andere zeug schonma gepostet, weil vielleicht gehts ja irgendwann bei mir ^^ und dann kannste hier wieder raufgucken |
|
Nach oben |
|
|
Clythoss Junior JLI'ler
Alter: 44 Anmeldedatum: 04.05.2005 Beiträge: 64 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 02.01.2006, 00:49 Titel: |
|
|
Ja also Die Verstärkung ist jetzt offiziell. GDN-Chef hilft mir jetzt und arbeitet schon fleissig an tiles und animationen. Neues Background-Bild ist auch schon da.(Woran es wohl liegt das er DAS zuerst machen wollte )
Der Release wird noch ne Weile dauern. Der Mangel an Erfahrung nimmt mir die Möglichkeit einen Termin zu nennen, da ich nicht weiss wie lange die einzelnen Punkte brauchen. ( Man denke nur an die Ki, dauert das bei mir eine woche oder 3 monate, keine Ahnung)
@Vane
Hör auf Jonathan_Klein er machts genauso wie ich, nur ne Ecke raffinierter und kompakter.
Aber hier meine Methode
Schritt 1 Mausposition scannen.
Schritt 2 Mauscursor Koordinaten durch Tilegrösse teilen und um eins erhöhen um zu erfahren auf welchem Tile sich der Mauscursor befindet
wenn du also Tiles von 32x32 hast und der Cursor auf 40,40 steht dann weisst du 40/32=1+1=2 er steht in 2,2 . Ich weise diesen Wert zur weiteren Verwendung Variabelen zu. Sagen wir hier mal maustile.x und maustile.y das sieht dann so aus.
---------------------------------
maustile.x=maus.x/32+1;
maustile.y=maus.y/32+1;
---------------------------------
Schritt 3 Rechteck zeichnen, das geht nun am einfachsten.
rechteck(x,y,x2,y2);
rechteck (maustile.x*32,maustile.y*32,maustile.x*32+32,maustile.y*32+32);
Und fertig
BTW: Wie postet ihr immer diese schönen Quellcode-Fenster?
@Sandmanyous
Das verwundert mich. Ich kann mir nur vorstellen das eine der Bibliotheks-Funktionen von Allegro bei deinem Computer nicht laufen.
Das kann eine von 2 Ursachen haben.
1.) Du hast eine neuere oder ältere Version von Allegro installiert. Genauer gesagt du hast eine andere allegxx.dll in deinem windowsordner als ich mitliefere.
2.) Irgend ein Befehl will nicht mit deiner Hardware zusammenarbeiten. Ich muss gestehen das ich im Schlechten Stil die Rückgabewerte nich überprüfe, das heisst du nicht weiss ob der grafik-modus nicht gesetzt werden kann oder die Bitmaps nicht erstellt werden können oder er mein Datafile nicht lädt. Aber das ändert sich beim nächsten mal.
--Cly _________________ Derzeitiges Projekt : Wing Fusion
Status: Es geht vorwärts...
-------------------------------------------------------
E=MC²+1W6 |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.01.2006, 11:03 Titel: |
|
|
Clythoss hat Folgendes geschrieben: |
BTW: Wie postet ihr immer diese schönen Quellcode-Fenster?
|
beim Posten oben in der Zeile unter "Titel" stehen versch. Optionen, darunter auch CPP. Entweder klickst du dann einmal dadrauf und am Ende des Codes nochmal, oder du fügst einfach so(manuell) deinen Code ein: Code: | [cpp] hier kommt dein Code hin [/cpp] |
Is aber das gleiche.
Gruß DirectXer |
|
Nach oben |
|
|
Clythoss Junior JLI'ler
Alter: 44 Anmeldedatum: 04.05.2005 Beiträge: 64 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 03.01.2006, 03:18 Titel: |
|
|
ALTER MEINE FRESSE.............
Gott bin ich fertig. Ich dachte ich setz mich heute mal hin und programier mal eben ne routine die Meine Karte verschönert indem sie einen Strandübergang zwischen Wasser und Land-Feldern malt. Kann ja nicht so das Problem sein. --- DENKSTE!
Ich dachte man macht
schau ob wasserfeld, wenn ja dann
wenn links land dann links strand
wenn rechts land dann rechts strand
wenn oben land dann oben strand
wenn unten land dann unten strand
Als ich mir das Ergebnis dieser routine anschaute wurde mir plötzlich das aussmaß des Problems klar Gott sah das S****** aus.
Ich hätt nie gedacht wie schwer das ist ne allgemeingültige Routine für alle Felder zu schreiben. Jedesmal wenn ich versucht hab das Problem im Kopf zu erfassen ist er fast geplatzt. Jaja als Neuling hat mans nicht leicht, ich wünschte ich würde seit 4 jahren und nicht seit 4 Monaten coden.
Warum ich all das schreibe? Wir habens 4:20 morgens und ich habs geschafft *freu* und geh jetzt erst mal pennen _________________ Derzeitiges Projekt : Wing Fusion
Status: Es geht vorwärts...
-------------------------------------------------------
E=MC²+1W6 |
|
Nach oben |
|
|
Vane Junior JLI'ler
Anmeldedatum: 03.11.2005 Beiträge: 70
Medaillen: Keine
|
Verfasst am: 11.01.2006, 18:04 Titel: |
|
|
@Clythoss
Danke für deine Routine, die ist viel besser und dynamischer als meine Routine. Danke danke
Wie siehts mit deinem Spiel aus?
Ich bin gerade in einer entwickler krisse, ich wollte ja vorher ein strategie spiel programmieren, jetzt aber kann ich mich nicht entscheiden zwischen einem Rollenspiel und einem strategie spiel..... so eine schande.... |
|
Nach oben |
|
|
Clythoss Junior JLI'ler
Alter: 44 Anmeldedatum: 04.05.2005 Beiträge: 64 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 13.01.2006, 14:47 Titel: |
|
|
Bin wieder ein Stück weiter.
Hab dank GDN-Chef neues Titelbild. Hab eigene Musik drin. Die erste Gebäudegrafik integriert. und TADAA animiertes Wasser.
Hab jetzt nur ein Problem Meine Geschwindigkeit hab ich bisher mit Vsync realisiert. Was auf meinem Pc 3.2 GHZ kein problem war.
Aber auf meinem 2.6 Ghz Rechner ist das Speed auf 40 Frames abgesackt. Ich dachte ich schau nicht richtig. Bin grad dabei die Engine umzuschreiben.
1.) Gleichbleibende Geschwindigkeit anders realisieren als mit Vsync
2.) Leistung sparen, kann nich sein das mein Spiel in den Leistunshunger eines Half life 2 rutscht oder ?
Zu deiner letzten Frage. Mach lieber ein Strategie-Spiel. Treu bleiben heisst die Devise. _________________ Derzeitiges Projekt : Wing Fusion
Status: Es geht vorwärts...
-------------------------------------------------------
E=MC²+1W6 |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 13.01.2006, 15:08 Titel: |
|
|
Heißt das du warst davon ausgegangen, das der Bidlshcirm dank VSync immer 60 Frames hat, und jetzt, wo es nur noch 40 Frames sind alles quasi in Zeitlupe abläuft?
Also, das ist af jeden Fall nciht optimal, da VSync ja je nach Bildwiederholrate desMonitors ist, also auch schon mal bei 100 oder eben bei 60 liegen kann.
Du solltest ieber einfach gucken, wie vielZeit seit der letzen Sxene abgelafuen ist, und dann danach Objekte bewegen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 13.01.2006, 15:15 Titel: |
|
|
Jupp Jonathan spricht wahr, versuche etweder deine Spielgeschwindigkeit auf einen festen wert auszulegen (30-40fps) das wäre am einfachsten oder du versuchst es mit deltaTime:
deltaTime = FrameZeit/1000; <- sehr billig ich weiss
oder du nutzt halt die vergangenen Ticks. Wirst unter deltaTime aber das meiste finden können einfach mal googlen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Dragon Super JLI'ler
Alter: 38 Anmeldedatum: 24.05.2004 Beiträge: 340 Wohnort: Sachsen Medaillen: Keine
|
Verfasst am: 13.01.2006, 16:16 Titel: |
|
|
Fallen hat Folgendes geschrieben: | Jupp Jonathan spricht wahr, versuche etweder deine Spielgeschwindigkeit auf einen festen wert auszulegen (30-40fps) das wäre am einfachsten oder du versuchst es mit deltaTime:
deltaTime = FrameZeit/1000; <- sehr billig ich weiss
oder du nutzt halt die vergangenen Ticks. Wirst unter deltaTime aber das meiste finden können einfach mal googlen. |
so mach ich das:
CPP: | // Performancecounter initialisieren
LONGLONG freq, last, current;
QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER*>(&freq));
QueryPerformanceCounter(reinterpret_cast<LARGE_INTEGER*>(¤t));
last = current;
// Nachrichtenschleife
MSG msg;
memset(&msg, 0, sizeof(MSG));
try
{
while( msg.message != WM_QUIT)
{
if(active)
{
if(scene)
{
// Zeit zwischen dem letzem Frame berechnen
QueryPerformanceCounter(reinterpret_cast<LARGE_INTEGER*>(¤t));
float delta = static_cast<float>(current - last) / static_cast<float>(freq);
last = current;
// Szene bewegen
scene->move(delta);
// Szene rendern
scene->render();
}
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
if(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
SwapBuffers(hDC);
}
}
catch(Exception& excp)
{
MessageBox(NULL, excp.what(), TEXT("EXCEPTION"), MB_OK);
}
|
vieleicht bringt es dir etwas.
In render einfach sowas schreiben
CPP: | void Lighting::move(float delta)
{
float speed = 10.0f;
if(inputs & UP)
{
camera.z -= cosf(camera.yaw / 360.0f * 6.282f) * speed * delta;
camera.x += sinf(camera.yaw / 360.0f * 6.282f) * speed * delta;
}
if(inputs & DOWN)
{
camera.z += cosf(camera.yaw / 360.0f * 6.282f) * speed * delta;
camera.x -= sinf(camera.yaw / 360.0f * 6.282f) * speed * delta;
}
if(inputs & LEFT) camera.yaw -= 30.0f * delta;
if(inputs & RIGHT) camera.yaw += 30.0f * delta;
rotation += 0.01f * delta;
terrain.move(delta);
} |
eigentlich ganz einfach. Wenn man weiß wie es geht ^^ _________________ Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 13.01.2006, 19:56 Titel: |
|
|
CPP: | float fTime=1.0f, fStartTime=0.0f;
...
while(Message.message!=WM_QUIT)
{
fStartTime=static_cast<float>(timeGetTime());
if(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
fTime=(timeGetTime()-fStartTime)/1000;
//eine grenze für minimale frames, damit es nicht zu zu großen verschiebungen kommt:
if(fTime>0.1f)
fTime=0.1f;
}
|
So machs ichs immer, auch ganz ok. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Clythoss Junior JLI'ler
Alter: 44 Anmeldedatum: 04.05.2005 Beiträge: 64 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 14.01.2006, 05:20 Titel: |
|
|
Ich hab bisher Vsync benutzt weil ich ein problem meist immer erst behandel wenns da ist. Solange nix animiert wurde war die Framezahl uninteressant. Das ist jetzt anders. Einige hier Vorgestellte Konzepte übersteigen aber meine Fähigkeiten. Etwa das Bewegen der Objekte anhand der Berechnung der Vergangenen Zeit. Ich denke am ehesten kann ich gleichbleibende Spielgeschwindigkeit Anhand einer festen Framezahl realisieren. Da ich keine C++ Kentnisse habe verstehe ich auch größtenteils eure Quellcodes nicht. Mir wäre Lieber ihr Fasst die Schritte in Worte und ich versuch sie dann umzusetzen
Ich hab mir das jetzt so gedacht um das Spiel auf 25 frames zu halten (wie in diablo 2 ):
Zuerst bastel ich mir nen Timer der 25 mal pro Sekunde tickt (Geht leicht mit Allegro)
Dann vergleiche ich am Ende einer gameloop vor dem Rendern den Timerwert mit dem des letzten Durchlauf. Wenn dieser gleich ist wird mit dem rendern gewartet bis zum nächsten Tick. Wenn +1 dann wird gleich gerendert, und wenn +2 oder mehr wird das Rendern übersprungen.
Das müsste so funktionieren oder? _________________ Derzeitiges Projekt : Wing Fusion
Status: Es geht vorwärts...
-------------------------------------------------------
E=MC²+1W6 |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|