Manchmal wirds angezeigt, manchmal nicht.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Manchmal wirds angezeigt, manchmal nicht.

BeitragMo, Apr 06, 2009 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute.
Ich hab mich eben mal durchs Tut im Wikibook gearbeitet und habe jetzt ein Problem.
Mein Pong Klon von da ist fast fertig, nur will ich alle 5 sekunden die geschwindigkeit erhöhen.
Ich weiß aber nicht ob das funktioniert, da mir die Geschwindigkeit trotz Write nicht angezeigt wird.
Oder ums so auszudrücken: Manchmal zeigt er sie an, manchmal nicht.
Eben hat ers angezeigt, dann hab ich nur eine Sache verändert (Ein Kommentar hinzugefügt) und jetzt zeigt ers nicht mehr.
Hier der Code:

Code: [AUSKLAPPEN]

;-----------------------------*Grafik*------------------------------
Global xmax=1024,ymax=768
Graphics xmax,ymax,32,1
SetBuffer BackBuffer()
Global frametimer = CreateTimer(60)
SeedRnd MilliSecs()
;-------------------------------------------------------------------

;-----------------------------*Variablen*---------------------------
 ;------#Bilder#-----------
Global kugel=LoadImage("gfx\kugel.bmp");damit wird die Kugel in eine Variable geladen
MidHandle kugel ;der Urspung wird auf den Mittelpunkt gelegt, das macht sich bei Berechnungen besser
;auf das Einstellen der Tranzparenzfarbe kann verzichtet werden, weil sie Standard mäßig schwarz ist.

Global spieler1=LoadImage("gfx\pongspieler1.bmp");damit ist der Untere gemeint
MidHandle spieler1;auch dieser bekommt seine Ursprung in die Mitte (s.Kugel)
MaskImage spieler1,255,255,255;hier müssen wir die Tranzparenzfarbe angeben, weil sie vom Standard abweicht

Global spieler2=LoadImage("gfx\pongspieler2.bmp");damit ist der Obere gemeint
MidHandle spieler2;auch dieser bekommt seine Ursprung in die Mitte (s.Kugel)
MaskImage spieler2,255,255,255;hier müssen wir die Tranzparenzfarbe angeben, weil sie vom Standard abweicht

Global begrenzung=LoadImage("gfx\seitenwand.bmp");damit wird die Seitenwand geladen
MaskImage begrenzung,255,255,255;hier müssen wir die Tranzparenzfarbe angeben, weil sie vom Standard abweicht

ClsColor    119,136,170 ;damit wird der Hintergrund rot, du kanst sonst die Spieler und Seitenwände nicht sehen
 ;--------------------------
 ;-------#Sounds#-----------
Global Spielersound = LoadSound("sounds\soundfx9.wav")
Global Wandsound = LoadSound("sounds\soundfx10.wav")
Global Spielers
Global Wands
 ;-------#Spieleretc#-------
Global sec
Global min
Global sekunden
Global Szeit$
Global SzeitNutz$
Global weg
Global Countdown
Global Fertig
Global spielzeit
Global restzeit
Global xsp1=xmax/2;also in der Mitte
Global xsp2=xmax/2
Global sp1st
Global sp2st
Global xkugel#
Global ykugel#
Global winkel
Global geschwindigkeit#=5 ;wird mit Wert zugewiesen, weil man sie (noch) nicht ändern kann
Global fehlersp1
Global fehlersp2
Global beweglichkeit#
Global abweichung
 ;--------------------------
;--------------------------------------------------------------------

resetkugel;Kugel an ihre Position setzen
Counter(restzeit)
;--------------------------------*Hauptschleife*---------------------
Repeat
   WaitTimer (frametimer)
   
   beweglichkeit#=geschwindigkeit#
   
   For z2=0 To 1
      If  z2=1 Then x=xmax-50 Else x=0
      For z=0 To ymax/50
         DrawImage begrenzung,x,z*50
      Next
   Next
   
   
   If KeyHit(14) Then resetkugel;wenn die Löschen Taste gedrückt wurde wird die Kugel zurück gesetzt
   
   Counter2()
   
;die Spielersteuerung
   If KeyHit(2) Then sp1st=sp1st+1;die Zahlentaste 1
   If KeyHit(3) Then sp2st=sp2st+1;die Zahlentaste 2
   
   If sp1st>2 Then sp1st=0
   If sp2st>2 Then sp2st=0
   
;die automatische Steuerung, wenn die Steuerungsvariable 0 ist:
   If xsp1>xkugel And sp1st=0 Then xsp1=xsp1-beweglichkeit#
   If xsp1<xkugel And sp1st=0 Then xsp1=xsp1+beweglichkeit#
   
   If xsp2>xkugel And sp2st=0 Then xsp2=xsp2-beweglichkeit#
   If xsp2<xkugel And sp2st=0 Then xsp2=xsp2+beweglichkeit#
   
;die Tastatursteuerung, wenn die Steuerungsvariable 1 ist:
   If KeyDown(203) And sp1st=1 Then xsp1=xsp1-beweglichkeit#;linke Pfeiltaste
   If KeyDown(205) And sp1st=1 Then xsp1=xsp1+beweglichkeit#;rechte Pfeiltaste
   
   If KeyDown(30) And sp2st=1 Then xsp2=xsp2-beweglichkeit#;A Taste
   If KeyDown(32) And sp2st=1 Then xsp2=xsp2+beweglichkeit#;D Taste
   
;die Maussteuerung, wenn die Steuerungsvariable 2 ist:
   If sp1st=2 Then xsp1=xsp1+MouseXSpeed()
   If sp2st=2 Then xsp2=xsp2+MouseXSpeed()
   
;die Überprüfung:
   If xsp1<70 Then xsp1=70
   If xsp1>xmax-70 Then xsp1=xmax-70
   If xsp2<70 Then xsp2=70
   If xsp2>xmax-70 Then xsp2=xmax-70
   
   
   If restzeit <= 0 Then
      
      Counter(restzeit)
      geschwindigkeit# = geschwindigkeit# + 0.1
   EndIf
   
   
   
   ;die Kollisionsabfrage der Spieler
   If ImgsCollide(spieler1,xsp1,ymax-10,0,kugel,xkugel,ykugel,0,0) Then;wenn eine Kollision ist
      winkel=360-winkel ;prallt die Kugel ab
      abweichung=2*(xsp1-xkugel) ;damit kannst du die Richtung der Kugel steuern
      winkel=winkel+abweichung
      Spielers = PlaySound(Spielersound)
   EndIf
   
   If ImgsCollide(spieler2,xsp2,10,0,kugel,xkugel,ykugel,0,0) Then
      winkel=360-winkel
      abweichung=2*(xsp2-xkugel)
      winkel=winkel-abweichung
      Spielers = PlaySound(Spielersound)
   EndIf
   
;damit der Winkel nicht über den Bereich von 0-360 geht:
   If winkel>360 Then winkel=winkel-360
   If winkel<0 Then winkel=winkel+360
   
   
;Kollisionsabfrage Seitenwände
   If xkugel<60 Then
      winkel=180-winkel ;damit prallt die Kugel ab
      Wands = PlaySound(Wandsound)
   EndIf
   
   If xkugel>xmax-60 Then
      winkel=180-winkel
      Wands = PlaySound(Wandsound)
   EndIf
   
;wenn die Kugel durchgelassen wurde
   If ykugel<-10 Then ;oben
      fehlersp2=fehlersp2+1 ;der Obere bekommt einen Fehlerpunkt dazu
      resetkugel ;ein Funktionsaufruf
   EndIf
   
   If ykugel>ymax+10 Then ;unten
      fehlersp1=fehlersp1+1 ;der Untere bekommt einen Fehlerpunkt dazu
      resetkugel ;ein Funktionsaufruf
   EndIf
   
   
   
;das Berechnen der Kugelkoordinaten
   xkugel=xkugel+Cos(winkel)*geschwindigkeit#
   ykugel=ykugel-Sin(winkel)*geschwindigkeit#
   
;einige Informationen werden auf den Bildschirm gemalt
   Text 500,250,"Geschwindigkeit:" + geschwindigkeit#
   Text 500,300,"Spielstand:  "+fehlersp2 + "       :       " + fehlersp1
;damit du die Steuerungsart sehen kannst
   Text 55,ymax-25,"Spieler1"
   If sp1st>0 Then
      If sp1st=2 Then Text 120,ymax-25,"Maussteuerung" Else Text 120,ymax-25,"Tastatursteuerung"
      Else Text 120,ymax-25,"Computer"
   EndIf
;If spieler1man>0 Then Text 250,ymax-25,scorep1
   
   Text 55,5,"Spieler2"
   If sp2st>0 Then
      If sp2st=2 Then
         Text 120,5,"Maussteuerung"
      Else
         Text 120,5,"Tastatursteuerung"
      EndIf
   Else
      Text 120,5,"Computer"
   EndIf
   
   
   Text 20, 50, restzeit/1000   
   
   DrawImage kugel,xkugel,ykugel
   DrawImage spieler1,xsp1,ymax-10
   DrawImage spieler2,xsp2,10
   
   Flip
   Cls
Until KeyHit(1)
End ;damit wird unser Programm beendet
;---------------------------------------------------------------------------




;----------------------------*Funktionen*-----------------------------------
 ;-----------------#Kugelreset#--------------------
Function resetkugel()
   xkugel=xmax/2:ykugel=ymax/2
   If Rand(0,1)=1 Then winkel=Rand(105,45) Else winkel=Rand(315,225);der Winkel wird durch Zufall ermittelt
End Function
 ;-------------------------------------------------
 ;----------------#KollisionwegenGrafikkarte#------
Function ImgsCollide(image1,xpos1, ypos1, frame1, image2, xpos2, ypos2, frame2=0, mask=0)
   
   Local startx, starty, endx, endy, ix, iy
   
   Local width1  = ImageWidth(image1)
   Local height1 = ImageHeight(image1)
   Local width2  = ImageWidth(image2)
   Local height2 = ImageHeight(image2)
   
   xpos1   = xpos1 - ImageXHandle(image1)
   ypos1   = ypos1 - ImageYHandle(image1)
   xpos2   = xpos2 - ImageXHandle(image2)
   ypos2   = ypos2 - ImageYHandle(image2)
   
   startx = xpos2 - xpos1
   starty = ypos2 - ypos1
   start2x = startx
   start2y = starty
   
   endx   = startx + width2
   endy   = starty + height2
   
   If startx < 0       Then startx = 0
   If starty < 0       Then starty = 0
   If endx   > width1  Then endx   = width1
   If endy   > height1 Then endy   = height1
   
   endx = endx - 1
   endy = endy - 1
   
   If startx > endx Or starty > endy Then Return 0
   
   LockBuffer ImageBuffer(image1, frame1)
   LockBuffer ImageBuffer(image2, frame2)
   For ix = startx To endx
      For iy = starty To endy
         
         If mask <> (ReadPixelFast(ix, iy, ImageBuffer(image1, frame1)) And $00FFFFFF) Then
            If mask <> (ReadPixelFast(ix-start2x, iy-start2y, ImageBuffer(image2, frame2)) And $00FFFFFF) Then
               UnlockBuffer ImageBuffer(image1, frame1)
               UnlockBuffer ImageBuffer(image2, frame2)
               Return 1
            EndIf
         EndIf
      Next
   Next
   UnlockBuffer ImageBuffer(image1, frame1)
   UnlockBuffer ImageBuffer(image2, frame2)
   
End Function
 ;---------------------------------------------------
 ;-----------------------#Counter#-------------------
Function Counter(restzeit)
   spielzeit = 5 ;SPielzeit kann hier iengegeben werden
 ;Man kann es aber auch abändern, damit man eine statische Zeit hat
   
   Szeit$ = spielzeit ;Die gewünschte Zeit in einen Stringe kopieren
   SzeitNutz$ = Right$(Szeit,1) ;Die letze Stelle der zahl nehmen
   weg = SzeitNutz$ ;letze Stelle al integer Speichern
   
;Hier wird der Countdown gestartet:
   Countdown = spielzeit *1000
   Fertig = MilliSecs() + Countdown
End Function
 ;----------------------#Counter2#------------------   
Function Counter2()
      restzeit = Fertig - MilliSecs()
      
      
      sekunden = restzeit/1000 ;erst mal in Sekudnen umrechnen (Von Millisekunden)
      
      min = sekunden/60 ;In Minuten umrechnen
      
      sec = sekunden-(spielzeit-weg) ;Um die Sekunden zu bekommen muss man die gewünschte Spielzeit von der momentanen Countdownzeit abziehen
   ;Und die Einerstelle (für den fall dass es kein genaues vielfaches von 60 ist) Muss zuerst von der Spielzeit abgezogen werden
      If sec < 0 Then sec=sec+60 ;Wenn man durch die Rechnung unter 0 kommt dann einfach 60 dazurechnen
      If sec < 0 Then sec=sec+60 ;wenn man danach NOCHMAL unter 0 kommt dann einfach nochmal 60 dazurechnen
End Function
 ;----------------------------------------------------
;------------------------------------------------------------------------------------


Hoffe jemand weiß worans liegt. Und ja, ich weiß dass der großteil nicht mein Code ist, aber ich hab die Funktionsweise verstanden und will das Programm optimieren.

Danke schonmal im Voraus, Lg,
M0rgenstern.

Nicdel

BeitragMo, Apr 06, 2009 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
In dem Code ist kein Write drin. Benutz Text.
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

M0rgenstern

BeitragMo, Apr 06, 2009 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
achja... Tut mir total Leid.
Ich meinte Text.

Xeres

Moderator

BeitragMo, Apr 06, 2009 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
In so einem Haufen Code sieht doch keiner durch, wenn du nicht die Zeilen irgendwie kenntlich machst, in denen du das Problem vermutest bzw. die mit dem Problem zu tun haben...
Ich kann jedenfalls auf Anhieb nichts besonderes erkennen.
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)

M0rgenstern

BeitragMo, Apr 06, 2009 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

;einige Informationen werden auf den Bildschirm gemalt
   Text 500,250,"Geschwindigkeit:" + geschwindigkeit#
   Text 500,300,"Spielstand:  "+fehlersp2 + "       :       " + fehlersp1


Tut mir leid, hast ja recht.

Also, es ist wirklich so.
Ich veränder manchmal was was gar nciths damit zu tun hat (z.B. Kommentar) und dann gehts einmal, wenn ich dann neu starte gehts wieder nicht mehr...


Lg, M0rgenstern.

Xeres

Moderator

BeitragMo, Apr 06, 2009 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht nicht, gibt's nicht - Wird es nicht angezeigt oder wird etwas falsch angezeigt? Sofern der Text nicht auf gleichfarbigem Untergrund steht oder nachher übermalt wird, sollte ja etwas da stehen.
Und verwende Flip(0) um den Prozessor zu schonen.
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)

M0rgenstern

BeitragMo, Apr 06, 2009 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, wirklich.
Ich hab jetzt das Flip auf Flip(0) geändert und da gings.
Dann hab ich aus gemacht und dann gings wieder nicht.
Und nein der Untergrund ist auch nicht gleichfarbig... Alles andere wird angezeigt.
 

DjDETE

BeitragMo, Apr 06, 2009 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Setze mal alle Drawimages vor die Texts, dann könnte es funktionieren.
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

M0rgenstern

BeitragMo, Apr 06, 2009 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert auch nicht.

Ich hab weiter oben die Pausefunktion:
Code: [AUSKLAPPEN]

If KeyHit(25) Then ;Pause-Einschub
      Text 0,0, "Pause! 'P' drücken um fortzufahren!"
      Repeat: Until KeyHit(25) Or KeyDown(1)
End If


Da wird der Schriftzug auch nicht angezeigt, auch nicht wenn ich das so mache:

Code: [AUSKLAPPEN]

If KeyHit(25) Then ;Pause-Einschub
cls
      Text 0,0, "Pause! 'P' drücken um fortzufahren!"
      Repeat: Until KeyHit(25) Or KeyDown(1)
flip(0)
End If


Bzw um genauer zu sein: Das wird auch nru angezeigt wenn die Geschwindigkeit angezeigt wird.... Alles andere funktioniert prima.
 

DjDETE

BeitragMo, Apr 06, 2009 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Mhm... sehr komisch.
Welche Version von B+/B3D hast du?

Edit: Bei der Pause ist das Problem klar:
Code: [AUSKLAPPEN]
If KeyHit(25) Then ;Pause-Einschub
cls
      Text 0,0, "Pause! 'P' drücken um fortzufahren!"
      flip(0)
      Repeat: Until KeyHit(25) Or KeyDown(1)
End If

Edit2: Setze das Cls an den Anfang der Hauptschleife, vielleicht funktioniert das.
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

M0rgenstern

BeitragMo, Apr 06, 2009 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, meine B3D Version ist v1.99.
Aber ich benutze Ideal, falls das was zur Sache tut.
Danke, PauseFunktion klappt jetzt.

Aber das andere... Ich verstehs einfach nicht.
Gerade schon wieder: Ich habe die Pausefunktion geändert und siehe da: Auch die Geschwindigkeit wurde angezeigt. Dann hab ich beendet und neu gestartet und da wurde die Geschwindigkeit wieder nicht angezegit (Aber die pausenFunktion... DANKE!)


Lg, M0rgenstern.

Edit: Sitzt am anfang der Schleife... Funtzt nicht.
 

DjDETE

BeitragDi, Apr 07, 2009 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du möchtest kannst du die Grafiken, etc. uploaden oder mir per E-Mail schicken, dann probier ich's bis es geht Wink
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

M0rgenstern

BeitragDi, Apr 07, 2009 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Downloadlink

Bitteschön.
Der Code ist drin und die Exe. Plus Bilder und Sound.


LG, M0rgenstern.
 

DjDETE

BeitragMi, Apr 08, 2009 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr komisch, bei mir funktioniert alles einwandfrei. Sowohl unter Blitz 3D 1.99 als auch unter B+ 1.46.
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

M0rgenstern

BeitragMi, Apr 08, 2009 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm.. Das is komisch.
Das Programm ist eh komisch. Jetzt hab ichs grade gestartet (ohne was zu ändern) und bekomme angezeigt "Sound does not exist"

ich glaub ich vergrabs lieber irgendwo....
 

DjDETE

BeitragMi, Apr 08, 2009 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
das hatte ich auch, liegt aber daran, dass du die Sounds nirgends lädst, auf die du zugreifen möchtest.
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

M0rgenstern

BeitragMi, Apr 08, 2009 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Türlich werden die geladen... Oben bei den Variablen.

M0rgenstern

BeitragDo, Apr 09, 2009 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab jetzt das Problem gefunden wegen dem Text.
Ich weiß auch nicht warum, aber man muss mit Color eine Farbe setzen dann wirds imemr angezeigt.
Ich versteh zwar nicht warum einige Text Befehle angezeigt werden, andere wiederum nicht.

Silver_Knee

BeitragDo, Apr 09, 2009 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich steht irgendwo in deinem Code Color und das in irgend einem verschachteltem If.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group