Map wird gestreckt[Erledigt]
Übersicht

AffenmannBetreff: Map wird gestreckt[Erledigt] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Habe folgendes Problem: Ich habe einen Mapeditor geschrieben und kann die maps auch laden / speichern. Jedoch ist seitdem ich Charakter Speichern / Laden eingebaut habe meine Map immer so komisch gestreckt. Ich Speicher die Map im Mapeditor normal ab. Dann kann ich sie laden mit dem Mapeditor ohne Probleme. Aber im Spiel Lade ich die Map mit genau den gleichen Befehlen und nun wird sie abergestreckt.... Hoffe konnte klar machen was ich meine. Da der Code inzwischen recht langgeworden ist mache ich nur ein paar code schnippsel. Speichern im Mapeditor: Code: [AUSKLAPPEN] If KeyHit(60) Then dateiname$=Input$("Speichernamen angeben: ") speichern=WriteFile(Dateiname) WriteByte speichern,mapx WriteByte speichern,mapy For y=0 To mapy For x=0 To mapx For z=0 To event WriteByte speichern,map(x,y,z) Next Next Next CloseFile speichern End If Laden im Mapeditor: Code: [AUSKLAPPEN] If KeyHit(61) Then dateiname$=Input$("Ladenamen angeben: ") If FileType(dateiname)=1 Then laden=ReadFile(dateiname) mapx=ReadByte(laden) mapy=ReadByte(laden) For y=0 To mapy For x=0 To mapx For z=0 To event map(x,y,z)=ReadByte(laden) Next Next Next CloseFile laden End If End If Laden im Spiel: Code: [AUSKLAPPEN] dateiname$="Startdorf.map" If FileType(dateiname)=1 Then laden=ReadFile(dateiname) mapx=ReadByte(laden) mapy=ReadByte(laden) For y=0 To mapy For x=0 To mapx For z=0 To event map1(x,y,z)=ReadByte(laden) Next Next Next CloseFile laden End If Map zeichnen im Spiel: Code: [AUSKLAPPEN] For y = 0 To mapy For x = 0 To mapx DrawBlock Boden1,x*16-scrollx,y*16-scrolly,Map1(x,y,0) Next Next MfG Affenmann |
||
- Zuletzt bearbeitet von Affenmann am Fr, Jul 21, 2006 23:46, insgesamt 2-mal bearbeitet
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
sind die Werte für mapy, mapx und event im Spiel die gleichen, wie im Mapeditor?
Werden sie auch in die .map-Datei gespeichert? |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
Affenmann |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jap sind die gleichen und werden auch abgespeichert | ||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo!
Bei Mapx und Mapy ist das richtig, aber event wird nicht ausgelesen und gespeichert! Du müsstest sonst beim schreiben : Code: [AUSKLAPPEN] WriteByte speichern,mapx WriteByte speichern,mapy [b]WriteByte speichern,event[/b] For y=0 To mapy For x=0 To mapx For z=0 To event WriteByte speichern,map(x,y,z) das und beim lesen: Code: [AUSKLAPPEN] mapx=ReadByte(laden) mapy=ReadByte(laden) [b]event=ReadByte(laden)[/b] For y=0 To mapy For x=0 To mapx For z=0 To event schreiben... ansonsten fällt mir grad nix auf... MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Affenmann |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm
Ne das is richtig so wie es da steht... Die map wird ja gespeichert... MapX und MapY sind einzelnde Variablen. Event wird mit im Dim feld gespeichert. Das Problem ist ja, dass es am anfang perfekt geklappt hat. Als ich dann bischen am Menü rumgefummelt hab dass man Charakter erstellen und speichern kann lief plötzlich die Map nich mehr richtig. Und wie du siehst wird im Mapeditor und im Spiel die Map auf die gleiche weise gestartet. Und im Mapeditor wird alles richtig dargestellt und auch die events sind da : / Naja danke das du dir das mal angeschaut hast ![]() Ich guck mal weiter ob ich das Problem entdecke.. sitze jetzt schon über einer Stunde dran ; ( MfG |
||
Affenmann |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
puh habs hinbekommen.
Nun steh ich vor einem weiteren Problem (hehe keine sorge habe jetzt nich über 3 stunden nach dem fehler gesucht... konnte nur nich schlafen weils so warm ist :/ ) Und zwar werden meine Ratten nur angezeigt wenn ich das in jedem schleifen durchlauf testen lasse ob sie da sind. Doch das möchte ich garnicht.... funktioniert nicht... Code: [AUSKLAPPEN] Dim Ratte.Monster(zahlen) For s = 1 To zahlen Ratte(s)=New Monster Next For y=0 To mapy For x=0 To mapx For s=1 To zahlen If map1(x,y,1)=2 Then ratte(s)\locx=x*16 ratte(s)\locy=y*16 End If Color 255,255,255 Next Next Next Repeat .... For s=1 To zahlen DrawImage Ratteset,Ratte(s)\Locx-scrollx,Ratte(s)\Locy-scrolly,0 Next .... klappt:... Code: [AUSKLAPPEN] Dim Ratte.Monster(zahlen) For s = 1 To zahlen Ratte(s)=New Monster Next Repeat For y=0 To mapy For x=0 To mapx For s=1 To zahlen If map1(x,y,1)=2 Then ratte(s)\locx=x*16 ratte(s)\locy=y*16 DrawImage Ratteset,Ratte(s)\Locx-scrollx,Ratte(s)\Locy-scrolly,0 End If Color 255,255,255 Next Next Next Kann mir bitte jemand erklären warum das obere nicht funktioniert ? ;( MfG Affenmann |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Prinzipiell würde ich die Ratten nicht in einem Dim speichern denn Du verschenkst einen der Hauptvorteile von Types: Die Flexibilität der Anzahl.
Anstatt also Code: [AUSKLAPPEN] dim ratte.monster (zahlen) zu machen würde ich ein Code: [AUSKLAPPEN] if map(x,y) =2 then
ratte.monster=new monster ratte\x = x*16 ratte\y = y^*16 next und später ein: Code: [AUSKLAPPEN] for ratte.monster = each monster
machen.
if ratte\typ = 1 ;nur ein Beispiel, Ratten wären also typ 1, Spinnen typ2 etc.. drawimage rattenimage,ratte\x,ratte\y endif next Damit ist es egal wieviel ratten du erstellst, sie werden alle eingetragen. Ab davon kannst du mit field typ im typoe monster die voraussetzungen für beliebige Kreaturen schaffen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Affenmann |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja ehrlich gesagt verstehe ich nich ganz was du meinst dass ich die flexibilität verschenke ![]() Code: [AUSKLAPPEN] For y = 0 To mapy For x = 0 To mapx If map1(x,y,1)=2 Then Rattenzahl=Rattenzahl+1 Next Next so wird am anfang ausserhalb der repeat schleife gelesen wieviel ratten es sind... Die Variable is nun schon ein wenig anders als vohin da ich inzwischen mehrere Monster habe ![]() Aber ich änder das mal so wie du das gemacht hast. Vielleicht funktioniert es dann besser. : ) |
||
Affenmann |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok läuft nach Wunderbar : )
Doch wie steuer ich den jetzt ein Monster an ? Bei dem Dim feld hatte ich ja Ratte(1)\locx usw Da habe ich ja nix :/ Denke mal dass da dann halt dieses first last usw. Ist dass nicht viel komplizierter als mit Dim-Felder. Hab mich bis jetzt eigentlich nur mit DimType-Feldern beschäftigt da Dynamische Type-Listen sehr kompliziert aussehen :/ Durch die Berechnung am Anfang weiß ich ja wieviel Ratten auf der Karte sind und somit stimmt die Anzahl der Ratten ![]() Also würde eher lieber das Dim Feld nehmen. Nur bekomme ich dass halt nicht hin dass die Locx und Locy abgespeichert werden ohne dass die Positionen jeden Schleifen durchlauf aktualisiert werden... |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau, mit dem first und after geht das, und es ist wenn man sich ein wenig daran gewöhnt hat wesentlich besser als mit Dims.
Der Punkt ist dass Du einfach alle Ratten durchlaufen kannst ohne Dir Gedanken darüber zu machen wieviele es gibt. Es ist also unnötig sie zu zählen. Du lässt einfach mit for each jede Ratte durchlaufen, bewegst sie und zeichnest sie, prüfst auf Kollision etc. Da die Ratten "ihre" Daten ja immer mit dabei haben ist es unnötig sie nochmal in einem Dimfeld 'einzusperren'. Spart zudem noch Speicherplatz. zur absoluten Not könntest Du noch mit ql:Handle und ql:Object arbeiten wenn Du bestimmte Ratten ansprechen willst. Aber überleg mal: Du machst doch die Ratten mit dem Type weil sie uniform sind, d.h. untereinander austauschbar. (Es gibt ja keine Ratten die sich anders verhalten, sie sind eben alle Ratten. Gäbe es noch Superratten definierst du einfach nur nen neuen Typ und schwupp ist der Käse fertig. Noch besser, Du kannst in deinen Functionen nach der "Gattung" deines Monsters einfach verschiedene Vorgehensweisen definieren und diese werden dann für alle Exemplare durchgeführt. Oder, wenn etwas bei allen Gattungen gleich ist durchläufst du einfaqch ganz monster ohne auf den Typ zu achten und tust die gleichbleibenden Sachen. Das ist sehr mächtig, wenn man es erst mal verstanden hat ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Affenmann |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Super ![]() Dann mache ich dass so Würdest du mir bitte noch ein kleines Beispiel geben für die Kollisions abfragen ? : D |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das entspricht eigentlich nicht meinen Gewohnheiten, aber sei's drum.
Beispiel: BlitzBasic: [AUSKLAPPEN] Graphics 640,480 |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Affenmann |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
[quote="BladeRunner"]
Beispiel: ; nun der Zauber: for a.monster = each monster select a\typ case 1 if imagescollide(spieler,x,y,0,monster1,a\x,a\y,0) then text 0,0,"Kollision!!!!" endif case 2 if imagescollide(spieler,x,y,0,monster2,a\x,a\y,0) then text 0,0,"Kollision!!!! Mit anderem Monster!!!" endif end select next flip cls until keyhit(1) quote] Vielen Dank doch mir is noch unklar wie ich dass genau schreibe... Da steht ja if imagescollide(spieler,x,y,0,monster1,a\x,a\y,0) then Muss ich für jedes Monster jetzt extra monster1 usw schreiben ? Oo Edit1: Ok habs hinbekommen Vielen Dank für deine Hilfe ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, monster1 und monster2 sind die Handles der Bilddateien für den Monstertyp.
Also zB monster1 das Bild einer Ratte, Monster2 das Bild einer Spinne. Die select case brauchst Du also nur pro Monstertyp, nicht für jedes einzelne Monster. Wenn Du ein paar beliebige kleine Grafiken lädst wirst Du ja sehen das der Code nur mit diesen 2 Abfragen funktioniert ![]() Es wird nirgends in dem programm festgehalten wieviele Monster erzeugt wurden, es ist aber auch egal, denn mit for each (für alle...) werden ALLE erzeugten Monster durchlaufen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group