Problem mit Types (die zigtausenste^^)
Übersicht

NForcerBetreff: Problem mit Types (die zigtausenste^^) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also, ich hab mal wieder ein Problem^^
Eigentlich dachte ich, ich hätte die Types schon einigermaßen verstanden, aber nun tritt ein Fehler auf, den ich so gar nicht verstehe :( Code: [AUSKLAPPEN] graphics 800,600,32,3 setbuffer backbuffer() ;Erstellt ein KontainerType generell für Einheiten^^ (ist erweiterbar für Flugzeuge, Boote usw.) Type Einheit field ID field Status field Name$ field X,Y field r,g,b field groesse field Angriff,Schaden end type ;for i = 1 bis Anzahl der zu erstellenden Soldaten for i = 1 to 2 ;Hier werden 2 Einheiten des Typs Soldat erstellt und mir Variablen gefüttert Soldat.Einheit = new Einheit ;Der Name der speziefischen Einheit Soldat\Name = "Soldat" ;X , Y Koordinaten werden festgelegt Soldat\X = i*110 : Soldat\Y = 20 ;Farbe wird eingestellt Soldat\r = 255 :Soldat\g = 0:Soldat\b = 0 ;größe des Kästchens Soldat\groesse = 5 ;Schaden Soldat\Schaden = 100 ;Angriff Soldat\Angriff = 5 next ;Siehe Soldat, nur mit anderen Werten for j = 1 to 2 Panzer.Einheit = new Einheit Panzer\Name = "Panzer" Panzer\X = j*30 : Panzer\Y = 300 Panzer\r = 0 : Panzer\g = 255 : Panzer\b = 0 Panzer\groesse = 15 Panzer\Schaden = 300 Panzer\Angriff = 100 ;Panzer\Status = 0 next repeat cls ;Hier werden ALLE Einheiten des Typs Soldat aufgerufen (um auf sie zugreifen zu müssen) for Soldat.Einheit = each Einheit Color Soldat\r,Soldat\g,Soldat\b rect Soldat\X,Soldat\Y,Soldat\groesse,Soldat\groesse next ;siehe Soldat for Panzer.Einheit = each Einheit Color Panzer\r,Panzer\g,Panzer\b rect Panzer\X,Panzer\Y,Panzer\groesse,Panzer\groesse next if mousehit(1) aX = mousex() aY = mousey() endif if mousedown(1) rect aX,aY,mousex()-aX,mousey()-aY,0 for Soldat.Einheit = each Einheit if rectsoverlap(aX,aY,mousex()-aX,mousex()-aY,Soldat\X,Soldat\Y,Soldat\groesse,Soldat\groesse) then Soldat\Status = 1 else Soldat\Status = 0 endif next for Panzer.Einheit = each Einheit if rectsoverlap(aX,aY,mousex()-aX,mousex()-aY,Panzer\X,Panzer\Y,Panzer\groesse,Panzer\groesse) then Panzer\Status = 1 else Panzer\Status = 0 endif next endif ;Abfrage: for Panzer.Einheit = each Einheit if Panzer\Status = 1 text Panzer\X-5,Panzer\Y+20, Panzer\Schaden endif next for Soldat.Einheit = each Einheit if Soldat\Status = 1 text Soldat\X-5,Soldat\Y+20, Soldat\Schaden text Soldat\X-5,Soldat\Y+40, Soldat\Name endif next text 10,10, aX text 10,30,aY flip until keyhit(1) bei den beiden Soldaten (alias, rote Punkte) klappts ja so wie es soll, aber bei den Panzern (alias grün) funktioniert das Auswahlviereck gar nicht :( 1. werden sie nicht da aktiviert, wo ihre Koordinaten sind, und den linken kann man gar nicht einzeln ansprechen... Und ich finde in meinem Code absolut keinen Fehler :( Hoffentlich wiss ihr wodrann es liegt und könnt mir helfen... mfG NForcer Danke in Vorraus |
||
RosemanBetreff: Re: Problem mit Types (die zigtausenste^^) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Erstmal:
Du hast (deinem Code nach) Types prinzipiell verstanden. Ich kann dich in der Beziehung also beruhigen ![]() Aber leider steckt in deinem Code (wie so oft) der Fehler im Detail, in deinem Fall sind es einfach nur 2 falsche Buchstaben: NForcer hat Folgendes geschrieben: if rectsoverlap(aX,aY,mousex()-aX,mousex()-aY,Soldat\X,Soldat\Y,Soldat\groesse,Soldat\groesse) then if rectsoverlap(aX,aY,mousex()-aX,mousex()-aY,Panzer\X,Panzer\Y,Panzer\groesse,Panzer\groesse) Mein Lösungsvorschlag: Ersetze jeweils beim zweiten Auftreten von MouseX() das X durch ein Y ![]() Mfg Roseman |
||
NForcer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ehm...wie soll ich sagen^^...
Danke... so ein Fehler ist echt schon peinlich^^ Ich werde vorerst kein BlitzEdit2 mehr nehmen... bei Blitz3D wirds anders geschrieben... da wärs mir sofort ins auge gefallen^^ (BlitzEdit2: mousex() ; B3D: MouseX() )... naja.. danke... jetzt klapts jedenfalls... *schämend in ecke stell* |
||
Bigfreddy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kennt ihr die simpsons?
Da gibt's doch einen Kerl namens: Mou MouSEX() ![]() man war des ein Schenkelklopfer ![]() ![]() (sry, der musste sein) |
||
NForcer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
den kerl den du meinst, der heisst Moe !
mit seiner Bar : Moe's Bar ^^ *ich musste erst 1min grübeln wen du meinst^^* |
||
Bigfreddy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh...sry | ||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich bin auch garnicht so sicher ob die art wie du types verwendest überhaupt funktioniert. denn du hast zwar das field ID in deinem type, ich schätze das ist um soldaten von panzern zu unterscheiden, aber du nutzt es nirgends. und wenn du mit einer for each schleife jeden eintrag vom type einheit durchgehst, dann spuckt er dir sowohl panzer als auch soldaten aus ...
also wenn du mit soldat.einheit = new einheit anlegst, dann entsteht zwar ein neuer type eintrag im type einheit, aber der wird dir dann in jeder for each schleife angezeigt, wenn du nicht weiter differenzierst. ich denke du hast types noch nicht hunderpro verstanden ... entweder du, oder ich. ![]() |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
NForcer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
deswegen hab ich die beiden Abfragen ja auch voneinander getrennt:
siehe>> Code: [AUSKLAPPEN] for Panzer.Einheit = each Einheit if Panzer\Status = 1 text Panzer\X-5,Panzer\Y+20, Panzer\Schaden endif next for Soldat.Einheit = each Einheit if Soldat\Status = 1 text Soldat\X-5,Soldat\Y+20, Soldat\Schaden text Soldat\X-5,Soldat\Y+40, Soldat\Name endif next also ich gehe die Types einmal für Soldat.Einheit durch und einmal für Panzer.Einheit... und die kann er im Programm auch sehr gut unterscheiden^^... Aber mal eine Grundsätzlichere Frage: Angenommen, ich wöllte ein Grundgerüst für ein Strategiespiel machen, wie würdet ihr das da mit den Types machen? Später sollens ja mal viel mehr versch. Einheiten etc. geben, da müsste ich ja einen wirklich enormen aufwand mit den For-Each schleifen betreiben... zudem kommt, es soll mal 3 Parteien geben, die alle jeweils verschiedene Einheiten, Gebäude Tech-Tree's etc. haben... :( Ich kann mir das irgendwie gar nicht so richtig vorstellen wie ich das angehen soll... naja... ich werde die Frage vllt. mal für nen neuen Thread komplett neu Formulieren^^ oder ich komme in den nächsten Tagen auch selbst drauf^^ ach was ich noch Fragen wollte: ich hatte mal versucht das so zu machen: Code: [AUSKLAPPEN] Dim Identify$(10) Identify(1) = "HQ" Type_Name = "TGebaeude" for Identify$.Type_Name = each Type_Name ... das geht leider nicht, aber ich hab mal was von Blitzarrays gehört, könnte man sowas damitmachen? dann könnte ich ja sowas wie Code: [AUSKLAPPEN] for i = 1 to 10 for Identify(i).Type_Name = each Type_Name ... Dann müsste ich nicht jeden Type eintrag einzeln durchgehen, sondern könnte das in einer Schleife^^... Oder kennt ihr bessere Methoden, sodass man trotzdem noch eine Art Tech-tree (also man kann Gebäude B nur bauen wenn Gebäude A steht...) hat. Danke^^ mfG NoobForcer^^ |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
das mit den einheiten funktioniert so aber nicht wie du das vorhast, denn panzer oder soldat ist ja nur ein zeiger auf einen type eintrag... und wenn du die nicht differenzierst, werden alle types durchgegangen... wie man an folgendem programm sieht ...
BlitzBasic: [AUSKLAPPEN]
also machst du dir am besten ein paar consts const Panzer=0 const Soldat=1 dann machste dir in den type eintrag noch ein field einheitentyp und weißt dann dem typ die konstante zu, in deinem programm mußt du dann checken ob ob die einheit eben ein soldat oder ein panzer ist und mußt danach die verschiedenen aktionen machen ... so würde ichs tun. edit : in deinem programm funktioniert es, weil du wahrscheinlich immer nur eine einheit angewählt hast, und deswegen auch immer nur die daten von der einheit dastehen. aber das das jetzt ein panzer ist und das andere ein soldat, das weiß das programm eigentlich nicht. das weiß es erst wenn du dem type eintrag noch das entsprechende feld für panzer oder soldat zuweißt. dann würde auch folgendes reichen BlitzBasic: [AUSKLAPPEN]
|
||
A Cray is the only computer that runs an endless loop in less than four hours. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group