JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Metal Wars
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.12.2005, 13:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 30.12.2005, 13:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.12.2005, 14:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
C++progging
Senior JLI'ler


Alter: 30
Anmeldedatum: 03.10.2005
Beiträge: 244
Wohnort: Sauerland
Medaillen: Keine

BeitragVerfasst am: 30.12.2005, 14:30    Titel: Antworten mit Zitat

C++progging hat Folgendes geschrieben:
@ Clythoss:
wie lang kanns bis zur fertigstellung noch dauern?

Ich denk dass es so lang net mehr dauert,
weil die aktuelle Version besser is als die ältere
_________________
http://gtsp.gt.funpic.de
NEU: http://gtspforum.gt.funpic.de - das dazugehörige board
ProjectX for PSP - Jetzt runterladen!!
unter http://www.pspsource.de/news.php?extend.4537
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sandmanyous
Mini JLI'ler


Alter: 36
Anmeldedatum: 30.12.2005
Beiträge: 5
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 30.12.2005, 14:36    Titel: Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Clythoss
Junior JLI'ler


Alter: 43
Anmeldedatum: 04.05.2005
Beiträge: 64
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 02.01.2006, 01:49    Titel: Antworten mit Zitat

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 Smile )

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
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 02.01.2006, 12:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Clythoss
Junior JLI'ler


Alter: 43
Anmeldedatum: 04.05.2005
Beiträge: 64
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 03.01.2006, 04:18    Titel: Antworten mit Zitat

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 Smile 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 Smile
_________________
Derzeitiges Projekt : Wing Fusion
Status: Es geht vorwärts...

-------------------------------------------------------
E=MC²+1W6
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 11.01.2006, 19:04    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Clythoss
Junior JLI'ler


Alter: 43
Anmeldedatum: 04.05.2005
Beiträge: 64
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 15:47    Titel: Antworten mit Zitat

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 Shocked Shocked Shocked 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 Wink ?

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 16:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.01.2006, 16:15    Titel: Antworten mit Zitat

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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dragon
Super JLI'ler


Alter: 37
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 17:16    Titel: Antworten mit Zitat

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 Wink

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*>(&current));
   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*>(&current));
               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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 13.01.2006, 20:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Clythoss
Junior JLI'ler


Alter: 43
Anmeldedatum: 04.05.2005
Beiträge: 64
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 14.01.2006, 06:20    Titel: Antworten mit Zitat

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 Smile ):

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter
Seite 4 von 6

 
Gehe zu:  
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

Impressum