Texturier problem!

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

PhillipB

Betreff: Texturier problem!

BeitragMi, Feb 23, 2011 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!
Ich habe mir eure beiträge zu herzen genonommen.Ich habe mal probiert eine Ampel zu erstellen doch die Ampel bekommt keine Textur!
Ich habe das umschalten durch mehrere timer erziehlt,ich bekomme keine fehlermeldung aber auch keine Textur.
Hier der gesamte Code:Code: [AUSKLAPPEN]
Ampelmodel=LoadMesh("Signals\Ampel.3ds")
Ampel_rot=LoadTexture("Signals\rot.bmp")
AmpelRot_Gelb=LoadTexture("Signals\Rot-Gelb.bmp")
AmpelGrün=LoadTexture("Signals\Gruen.bmp")
AmpelGelb=LoadTexture("Signals\Gelb.bmp")
;Ampelxy=LoadTexture("4.bmp")




AmpelTimer1# =MilliSecs()+50000     ;Rot Phase
AmpelTimer2# =MilliSecs()+500         ;Gelb(Mittel-) Phase
AmpelTimer3# =MilliSecs()+50000     ;Grün Phase



Ms=MilliSecs
While Not KeyHit (1)
If AmpelTimer1#< Ms And Ampel%=1 Then
   Ampel%=1.5
EndIf
If  AmpelTimer2#< Ms And Ampel%=1.5 Then
  Ampel%=2
EndIf
If AmpelTimer3#< Ms And Ampel%= 2 Then
  Ampel%=3
EndIf
If AmpelTimer2#< Ms And Ampel%= 3 Then
  Ampel%=1
EndIf

If Ampel%= 1 Then
   EntityTexture Ampelmodel,Ampel_rot
EndIf

If Ampel%= 1.5 Then
   EntityTexture Ampelmodel,AmpelRot_Gelb
EndIf

If Ampel%= 2 Then
   EntityTexture Ampelmodel,AmpelGrün
EndIf

If Ampel%= 3 Then
   EntityTexture Ampelmodel,AmpelGelb
EndIf

Ich hoffe ihr hab das verstanden und könnt und wollt mir helfen!
Mfg
PhillipB.

Hubsi

BeitragMi, Feb 23, 2011 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ampel%=1.5 -> Ampel ist ein Integer. Du versuchst aber einen Float zuzuweisen, das nur nebenbei. Nächster Fehler ist das Ms nicht aktualisiert wird. Du weißt ihm einmal vor der Hauptschleife einen Wert zu, da bleibts dann auch dabei. Insgesamt ist der Code auch recht wirr oder wie man es nennen mag, aber besser jetzt erstmal Deine Variablentypen (an vielen Stellen, der Hinweis oben ist nur beispielhaft) aus und bring den Timer in Ordnung, dann sehen wir weiter.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

BladeRunner

Moderator

BeitragMi, Feb 23, 2011 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann nicht glauben dass der Code keine Fehler generiert, denn du benutzt While ohne wend.
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
 

Lapiz

BeitragMi, Feb 23, 2011 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke du hast einfach vergessen, wie Hubsi schon gesagt hat, den Timer zurückgesetzt.

Code: [AUSKLAPPEN]

If AmpelTimer3#< Ms And Ampel%= 2 Then
  Ampel%=3
  AmpelTimer3=Millisecs()+50000
  MS=Millisecs()
EndIf


Aber ich würde es so machen, dass ich einen einzelnen Timer für alle Phasen mache:
Code: [AUSKLAPPEN]
Timer=MilliSecs()+5000
MS=MilliSecs()
While Not KeyHit(1)
If Timer < MS
  Ampel=Ampel+1
  Timer=MilliSecs()+5000
  MS=MilliSecs()
Endif
Flip
Wend

Dann kannst du wieder Ampel durchcheken und die Textur entsprechend zeichnen.
Außerdem ist es so platzsparender.

PhillipB

BeitragMi, Feb 23, 2011 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
SRY des ist nur ein ausschnit abe ich vergessen unten steht bei mir immer Wend!
Ok aber ich will ja mehrere Phasen haben!
Schon mal danke für eure Antworten.

BladeRunner

Moderator

BeitragMi, Feb 23, 2011 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Darf ich dich ein letztes mal daran erinnern dass es sinnvoll ist KEINEN Ausschnitt zu posten sondern immer den kompletten Code. Wenn wir den Code nicht testen können wird es uns schwer fallen zu helfen, und wir werden rasch die Lust dran verlieren. Kannst Du Dir diese Kleinigkeit mal verinnerlichen bitte?
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

Midimaster

BeitragMi, Feb 23, 2011 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
So kreist Du den Fehler ein:

1.
Probiere zunächst, ob Deine Ampel überhaupt eine Textur annimmt:

BlitzBasic: [AUSKLAPPEN]
Ampelmodel=LoadMesh("Signals\Ampel.3ds")
Ampel_rot=LoadTexture("Signals\rot.bmp")
EntityTexture Ampelmodel,Ampel_rot
While Not KeyHit (1)
....

Wend

Wenn es hier schon hakt, stimmt etwas mit den Texturen oder mit dem Model nicht.

2.
Probiere nun, ob Du die Textur wechseln kannst:
BlitzBasic: [AUSKLAPPEN]
Ampelmodel=LoadMesh("Signals\Ampel.3ds")

Ampel_rot=LoadTexture("Signals\rot.bmp")
AmpelGruen=LoadTexture("Signals\Gruen.bmp")

EntityTexture Ampelmodel,Ampel_rot

While Not KeyHit (1)
If KeyHit(2) Then
EntityTexture Ampelmodel,AmpelGruen
EndIf
Wend

Verwende keine Umlaute wie bei "AmpelGrün"!



3. Teste dann, ob der Timer läuft:
BlitzBasic: [AUSKLAPPEN]
AmpelTimer1# =MilliSecs()+5000     ;Rot Phase
AmpelTimer2# =MilliSecs()+1000 ;Gelb(Mittel-) Phase
AmpelTimer3# =MilliSecs()+5000 ;Grün Phase



Ms=MilliSecs
While Not KeyHit (1)
If AmpelTimer1#< Ms And Ampel%=1 Then
Ampel%=1
EndIf
If AmpelTimer2#< Ms And Ampel%=1.5 Then
Ampel%=2
EndIf
If AmpelTimer3#< Ms And Ampel%= 2 Then
Ampel%=3
EndIf
If AmpelTimer2#< Ms And Ampel%= 3 Then
Ampel%=1
EndIf
Text 100,100,Ampel
Wend


Es ist klüger nur einen Timer zu verwenden, der immer abläuft und dann einen Bereich betritt, in dem Du den akt. Zustand der Ampel abfragst:

BlitzBasic: [AUSKLAPPEN]
AmpelTimer =MilliSecs()
While Not KeyHit (1)

If AmpelTimer < MilliSecs() Then

If Ampel=1 Then
AmpelTimer=MilliSecs()+5000
Ampel=2
ElseIf Ampel=2 Then
AmpelTimer=MilliSecs()+1000
Ampel=3
Else....

EndIf

EndIf
Text 100,100,Ampel
Wend

Dice of Darkness

BeitragMi, Feb 23, 2011 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde diesen Ansatz ungünstig, mehrere Timer zu verwenden. Außerdem gibt es ein paar Sachen in deinem Code, die nicht so optimal sind:

Arrow Er ist unvollständig, aber sehr umfangreich. Es fehlt das Wend am Ende, sowie das Graphics3D am Anfang (was du aber wahrscheinlich gesetzt hast, sonst könnte es ja nicht compiliert werden). Poste also bitte beim nächsten Mal einfach den gesamten Code.

Arrow Die Variable Ms deklarierst du nicht, d.h. sie ist immer 0. Oder du hast tatsächlich irgendwo in deinem Code die Zeile

Code: [AUSKLAPPEN]
Global Ms = MilliSecs()

aber das können wir ja nicht riechen. Auch deswegen nochmal mein Appell, lieber alles an Code zu posten.

Arrow Mehrere Timer sind denke ich gar nicht notwendig. Du kannst einfach einen Timer nehmen und in einer anderen Variablen den Zustand der Ampel speichern: Es sind ja immer vier verschiedene Ampelphasen, die nacheinander in der gleichen Reihenfolge ablaufen. Machen wir das ganze also mal an einem Beispiel (ich versuche dabei, die von dir so gedachten Zeitabschnitte für jede Phase nachzuempfinden, soweit ich es verstanden habe):

1.) Die Ampel soll Rot sein, und zwar 50 Sekunden lang.
Arrow Zuerst setzt Du eine Variable, z.B. phase auf 1. Nimm an, 1 steht für die Rotphase (das brauchst du später für die Bedingungsabfrage, siehe 2.). Nun setzt Du eine Timer-Variable, z.B. phasenlaenge, auf MilliSecs() + 50000. Warum? - Weil MilliSecs der Startwert für den Timer ist, und wenn du 50000 drauf addierst, wird diese Variable in 50 Sekunden genau so groß sein, wie MilliSecs (weil MilliSecs ja immer größer wird). Wie das ganze eingebaut wird, siehe 2.

2.) In einem If-Block fragst du ab, in welcher Phase die Ampel gerade ist. Legen wir einfach mal fest, 1 steht für Rot, 2 für Rot-Gelb, 3 für Grün und 4 für Gelb. Was soll der If-Block bezwecken? - Nun, je nach Phase soll die Ampel eine unterschiedliche Textur bekommen. Und gleichzeitig legen wir auch noch fest, wie lang jede einzelne Phase dauern soll. Das sieht dann also in etwa so aus:

Code: [AUSKLAPPEN]
If phase = 1 Then
   EntityTexture Ampelmodel,Ampel_rot
   phasenlaenge = MilliSecs() + 50000
ElseIf phase = 2 Then
   EntityTexture Ampelmodel,AmpelRot_Gelb
   phasenlaenge = MilliSecs() + 500
ElseIf phase = 3 Then
   EntityTexture Ampelmodel,AmpelGrün
   phasenlaenge = MillliSecs() + 50000
ElseIf phase = 4 Then
   EntityTexture Ampelmodel,AmpelGelb
   phasenlaenge = MilliSecs() + 500
EndIf


3.) Jetzt sollen sich die Phasen ja noch ändern. Dazu verwendest du einfach eine Schleife, z.B. While / Wend:

Code: [AUSKLAPPEN]
While Not KeyHit(1) ;während nicht die Escapetaste gedrückt wurde
   If phasenlaenge <= MilliSecs() Then   ;sobald die (System-)Variable MilliSecs() so groß ist wie die phasenlaenge, also nach Ablaufen von x Sekunden
      If phase < 4 Then   ;wenn die aktuelle Phase kleiner als 4 ist
         phase = phase + 1
      Else   ;sonst ist die vierte Phase erreicht und es geht wieder von vorne los, also bei Phase 1
         phase = 1
      EndIf
   EndIf
Wend



Ich hoffe, dass du den Code einigermaßen verstehen kannst und er auch bei dir funktionieren wird. Falls nicht, frage einfach nochmal nach (meinetwegen auch über PM), und lass dich nicht abschrecken, falls jemand meint "Mach die Tutorials" oder so ähnlich... Ich hab in den letzten Tagen hier so einiges gelesen, wo ich nur dachte, "mein Gott ihr tut ja so, als ob ihr nie Anfänger wart"...

Mfg, Dice
Gratis Spiele, Musik, Tools

PhillipB

BeitragMi, Feb 23, 2011 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt dein letztes Beispiel benutzt und noch Ampel = 1 eingefügt doch jetzt steht ampel immer auf 1 und 2! Und das unleserlich weil die Zahlen übereinander stehen!
Code: [AUSKLAPPEN]
AmpelTimer =MilliSecs()
Ampel=1
While Not KeyHit (1)

   If AmpelTimer < MilliSecs() Then

      If Ampel=1 Then
         AmpelTimer=MilliSecs()+5000
         Ampel=2
      ElseIf Ampel=2 Then
         AmpelTimer=MilliSecs()+1000
         Ampel=3
      
      EndIf

   EndIf
   Text 100,100,Ampel
Wend
 

Lapiz

BeitragMi, Feb 23, 2011 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn die Zahlen übereinander stehen, hast du wahrscheinlich das CLS in der Mainloop vergessen.

PhillipB

BeitragMi, Feb 23, 2011 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider geht der code nicht die ampel wird immer noch nicht texturiert!
Ich habe an deinem code nur aus phase Ampelphase gemacht sonst 1 zu 1 übertragen!
Ich hoffe ihr könnt mir helfen?

P.S.:Es geht um Dice of Darkness code!

Eingeproggt

BeitragMi, Feb 23, 2011 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Oke, moment mal...
Nimm dir bitte mal n Glas Wasser dreh gute Musik auf und lehn dich zurück... und denke ein wenig nach was du tust.

Du hast Dice of Darkness' Code übernommen und gleich ne Antwort geschrieben (die zumindest mal den Fehler beschreibt) - und das in weniger als einer Minute inklusive Verzögerungen durch das Internet.
Sprich du hast null komma nix nachgedacht sondern nur kopiert Evil or Very Mad

EDIT: ok, sorry. Mein Vorwurf war nicht ganz so berechtigt. Wenn man deine Codefetzen genau vergleicht sinds ja doch die von Midimaster. Aber warum übernimmst du einfach den letzten Code? Warum hat Midimaster sich die Mühe gemacht dir die Schritte davor zu erklären?

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

PhillipB

BeitragMi, Feb 23, 2011 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja der geht ja nicht lese bitte meine Fehlerbeschreibung wenn cih sie schon schreibe Wink

Midimaster

BeitragMi, Feb 23, 2011 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
"der geht nicht...." ist eine sehr ungenaue Beschreibung. Poste bitte jedesmal die neueste Version deiner Codestelle dazu, damit wir wissen, was Du schon umgesetzt hast.

Ich hatte Dir drei Fragenstellung vorgestellt. Und dazu drei Code-Beispiele gepostet. Wie war das nun mit den 3 Beispielen? Welches hat funktioniert, welches nicht?


Natürlich musst Du die Ampel wieder irgendwann von 4 auf 1 zurückstellen!!! Mein code war nicht zum Reinkopieren sondern zum Reinkapieren gedacht. Du musst ihn natürlich an deine Situation anpassen.


BlitzBasic: [AUSKLAPPEN]
AmpelTimer =MilliSecs()
Ampel=1
While Not KeyHit (1)
Cls
If AmpelTimer < MilliSecs() Then

If Ampel=1 Then
AmpelTimer=MilliSecs()+5000
Ampel=2
ElseIf Ampel=2 Then
AmpelTimer=MilliSecs()+1000
Ampel=3
ElseIf Ampel=3 Then
AmpelTimer=MilliSecs()+5000
Ampel=4
ElseIf Ampel=4 Then
AmpelTimer=MilliSecs()+1000
Ampel=1
EndIf

EndIf
Text 100,100,Ampel
Wend

PhillipB

BeitragMi, Feb 23, 2011 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Die ampel wird leider immernochnicht texturiert!
Sons läd das programm
Code: [AUSKLAPPEN]
Graphics3D 1920,1080,32, 1
SetBuffer BackBuffer()

;Ampel

Ampelmodel=LoadMesh("Signals\Ampel.3ds")
Ampel_rot=LoadTexture("Signals\rot.bmp")
AmpelRot_Gelb=LoadTexture("Signals\Rot-Gelb.bmp")
AmpelGrün=LoadTexture("Signals\Gruen.bmp")
AmpelGelb=LoadTexture("Signals\Gelb.bmp")

If Ampel = 1 Then
   EntityTexture Ampelmodel,Ampel_rot
ElseIf Ampel = 2 Then
   EntityTexture Ampelmodel,AmpelRot_Gelb
ElseIf Ampel = 3 Then
   EntityTexture Ampelmodel,AmpelGrün
ElseIf Ampel = 4 Then
   EntityTexture Ampelmodel,AmpelGelb
EndIf
While Not KeyHit (1)
;AMPEL
   If AmpelTimer < MilliSecs() Then

      If Ampel=1 Then
         AmpelTimer=MilliSecs()+5000
         Ampel=2
      ElseIf Ampel=2 Then
         AmpelTimer=MilliSecs()+1000
         Ampel=3
      ElseIf Ampel=3 Then
         AmpelTimer=MilliSecs()+5000
         Ampel=4   
      ElseIf Ampel=4 Then
         AmpelTimer=MilliSecs()+1000
         Ampel=1   
      EndIf
  EndIf
Flip
Wend
End

mpmxyz

BeitragMi, Feb 23, 2011 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein kleiner Hinweis zum Selberfinden:
Wo wird die Ampel umtexturiert?
Wo müsste sie umtexturiert werden?
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Mi, Feb 23, 2011 20:33, insgesamt einmal bearbeitet

Nicdel

BeitragMi, Feb 23, 2011 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
RenderWorld ist relativ wichtig, außerdem sollte die Texturierung in die Hauptschleife.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Xeres

Moderator

BeitragMi, Feb 23, 2011 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Kamera wirst du nie was sehen...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

PhillipB

BeitragMi, Feb 23, 2011 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es auch in meinen code getest wie ich shcon sagte sie wird nich texturiert aber sons geht das programm!
Code: [AUSKLAPPEN]
Graphics3D 1920,1080,32, 1
SetBuffer BackBuffer()

;Ampel

Ampelmodel=LoadMesh("Signals\Ampel.3ds")
Ampel_rot=LoadTexture("Signals\rot.bmp")
AmpelRot_Gelb=LoadTexture("Signals\Rot-Gelb.bmp")
AmpelGrün=LoadTexture("Signals\Gruen.bmp")
AmpelGelb=LoadTexture("Signals\Gelb.bmp")


While Not KeyHit (1)
;AMPEL
If Ampel = 1 Then
   EntityTexture Ampelmodel,Ampel_rot
ElseIf Ampel = 2 Then
   EntityTexture Ampelmodel,AmpelRot_Gelb
ElseIf Ampel = 3 Then
   EntityTexture Ampelmodel,AmpelGrün
ElseIf Ampel = 4 Then
   EntityTexture Ampelmodel,AmpelGelb
EndIf

   If AmpelTimer < MilliSecs() Then

      If Ampel=1 Then
         AmpelTimer=MilliSecs()+5000
         Ampel=2
      ElseIf Ampel=2 Then
         AmpelTimer=MilliSecs()+1000
         Ampel=3
      ElseIf Ampel=3 Then
         AmpelTimer=MilliSecs()+5000
         Ampel=4   
      ElseIf Ampel=4 Then
         AmpelTimer=MilliSecs()+1000
         Ampel=1   
      EndIf
  EndIf

RenderWorld
Flip
Wend
End

Nicdel

BeitragMi, Feb 23, 2011 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
CreateCamera Wink
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group