[bb] types machen mir die hölle heiß

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

da_poller

Betreff: [bb] types machen mir die hölle heiß

BeitragMi, Dez 06, 2006 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

;variablen*****************************************************
Global mausx,mausy
Global framenummer
Global bild


;grafik und bilder***********************************************
Graphics 800,600,16,2
SetBuffer BackBuffer()
ClsColor 255,255,255

bild=LoadAnimImage ("bild.bmp",40,40,0,6)
MaskImage bild,255,255,255


;Type schuss------------------------------------
Type schuss
Field x
Field y
Field fortsch
Field doe
End Type

;hauptschleife*************************************************
While Not KeyHit(1)
   Cls

;schuss-----------------------------------------
   If MouseHit(1) Then
      schuss.schuss =New schuss
      schuss\x=mausx
      schuss\y=mausy
      schuss\fortsch=1
      schuss\doe=1
   EndIf

   If schuss\doe=1
      Color 255,0,0
      Oval schuss\x-fortsch,schuss\y-fortsch,fortsch*2,fortsch*2
      fortsch=+1
      If fortsch>15 Then Delete schuss.schuss
   EndIf

;smileybild------------------------------------------------------------
   bildmalen(framenummer)
   framenummer=framenummer+1
   If framenummer>5 Then framenummer=0

;mauszeug--------------------------------------------------------------
   drawmaus

Flip
Wend



;funktionen**************************************************************
Function drawmaus()
   mausx=MouseX()
   mausy=MouseY()
   Color 0,0,0
   Line mausx -10,mausy,mausx+10,mausy
   Line mausx,mausy -10,mausx,mausy+10
   Oval mausx-8,mausy-8,16,16,0
   Text 1,1,"mausx: " +mausx
   Text 1,20,"mausy: " +mausy
End Function


Function bildmalen(framenummer)
   DrawImage bild,100,100,framenummer
   Text 1,40,"framenummer: " +framenummer
End Function



so dat is jetzt mein code und in der zeile Code: [AUSKLAPPEN]
if mousehit(1) then

bekomm ich gleich danach einen fehler: object does not exist

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Dez 06, 2006 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach ql:Then muß etwas stehen. Setz mal ql:End da rein und der Fehler sollte weg sein.
 

da_poller

BeitragMi, Dez 06, 2006 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
einfach hinter then ein end oder wi? dann wird ja die if ned ganz abgefragt (den inhalt mein ich oder?)

d-bug

BeitragMi, Dez 06, 2006 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Im ersten Schleifendurchlauf existiert noch kein Schuss, aber du fragst ihn ab.

Änder mal das:
Code: [AUSKLAPPEN]
   If schuss\doe=1
      Color 255,0,0
      Oval schuss\x-fortsch,schuss\y-fortsch,fortsch*2,fortsch*2
      fortsch=+1
      If fortsch>15 Then Delete schuss.schuss
   EndIf


In das:
Code: [AUSKLAPPEN]
   If schuss <> Null
      If schuss\doe=1
         Color 255,0,0
         Oval schuss\x-fortsch,schuss\y-fortsch,fortsch*2,fortsch*2
         fortsch=+1
         If fortsch>15 Then Delete schuss.schuss
      EndIf
   Endif


~Edit~
oops, da hab ich auch Mist gelabert...
Pointer heißt schuss und Object heißt auch schuss, also ist schuss.schuss = new schuss doch richtig, nur sehr verwirrend.

sorry
  • Zuletzt bearbeitet von d-bug am Mi, Dez 06, 2006 19:15, insgesamt 2-mal bearbeitet

BladeRunner

Moderator

BeitragMi, Dez 06, 2006 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic schrub mist. daran liegt es nicht
prüfe ob schuss ungleich null ist bevor du felder davon abfragst.
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

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: Re: [bb] types machen mir die hölle heiß

BeitragMi, Dez 06, 2006 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Da steht nur...
da_poller hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
if mousehit(1) then

bekomm ich gleich danach einen fehler: object does not exist

Da bin ich von ausgegangen.

Wenn hinter der If-Abfrage weiteres kommt was anschliessend mit EndIf beendet wird, so solltest du den gesamten Inhalt mit posten. Dann klappt's auch mit der Fehleranalyse.

edit1: Ja, ja, sorry Leute. Bin den Code nur schnell überflogen und der Fehler ist mir als solches nicht gleich ersichtlich gewesen. Embarassed
  • Zuletzt bearbeitet von hectic am Mi, Dez 06, 2006 19:12, insgesamt einmal bearbeitet

d-bug

BeitragMi, Dez 06, 2006 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Lenk nicht ab, hectic. Was du da sagtest war wirklich Mist. Das ql:Then darf da ruhig stehen! Und die Zeile ist durchaus komplett!
  • Zuletzt bearbeitet von d-bug am Mi, Dez 06, 2006 19:10, insgesamt einmal bearbeitet
 

da_poller

BeitragMi, Dez 06, 2006 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab mein ganzen code über dem codefetzen gepostet...

d-bug

BeitragMi, Dez 06, 2006 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Komplett korrigiert:
Code: [AUSKLAPPEN]

;variablen*****************************************************
Global mausx,mausy
Global framenummer
Global bild


;grafik und bilder***********************************************
Graphics 800,600,16,2
SetBuffer BackBuffer()
ClsColor 255,255,255

bild=LoadAnimImage ("bild.bmp",40,40,0,6)
MaskImage bild,255,255,255


;Type schuss------------------------------------
Type Tschuss ;<--------- böse Falle Zeiger und Objekt gleich zu nennen
Field x
Field y
Field fortsch
Field doe
End Type

;hauptschleife*************************************************
While Not KeyHit(1)
   Cls

;schuss-----------------------------------------
   If MouseHit(1) Then
      schuss.Tschuss =New Tschuss
      schuss\x=mausx
      schuss\y=mausy
      schuss\fortsch=1
      schuss\doe=1
   EndIf

   If schuss <> Null
      If schuss\doe=1
         Color 255,0,0
         Oval schuss\x-fortsch,schuss\y-fortsch,fortsch*2,fortsch*2
         fortsch=+1
         If fortsch>15 Then Delete schuss.schuss
      EndIf
   EndIf

;smileybild------------------------------------------------------------
   bildmalen(framenummer)
   framenummer=framenummer+1
   If framenummer>5 Then framenummer=0

;mauszeug--------------------------------------------------------------
   drawmaus

Flip
Wend
End ; <----------------vorbeugend für die nächste Fehlermeldung ;)


;funktionen**************************************************************
Function drawmaus()
   mausx=MouseX()
   mausy=MouseY()
   Color 0,0,0
   Line mausx -10,mausy,mausx+10,mausy
   Line mausx,mausy -10,mausx,mausy+10
   Oval mausx-8,mausy-8,16,16,0
   Text 1,1,"mausx: " +mausx
   Text 1,20,"mausy: " +mausy
End Function


Function bildmalen(framenummer)
   DrawImage bild,100,100,framenummer
   Text 1,40,"framenummer: " +framenummer
End Function
 

da_poller

BeitragMi, Dez 06, 2006 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
jeah haut geil hin ez muss i nur no rausfinden warum i nur einen schuss am screen ham kann und warum der schuss ned größer wird.. kannst du mir zeilen sagen wo ich ansetzen kann (will fehler selber finden ^^)

d-bug

BeitragMi, Dez 06, 2006 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
         fortsch=+1

soll wohl vergrößern, geht so aber nicht. So setzt du fortsch immer wieder auf 1
Außerdem ist fortsch ein Field im Type TSchuss... Da ist auch noch der Wurm drin. Den darfst du aber selber suchen Smile
 

da_poller

BeitragMi, Dez 06, 2006 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ups überbleibsel aus c++ kack hab den fehler doch weiter unten auch behoben und da hab ichs ned peilt^^
 

da_poller

BeitragMi, Dez 06, 2006 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich jetzt mehrere schuüsse auch zeitgleich am screen haben will hab ich mir das so gedacht:
Code: [AUSKLAPPEN]

;variablen*****************************************************
Global mausx,mausy
Global framenummer
Global bild


;grafik und bilder***********************************************
Graphics 800,600,16,1
SetBuffer BackBuffer()
ClsColor 255,255,255

bild=LoadAnimImage ("bild.bmp",40,40,0,6)
MaskImage bild,255,255,255


;Type schuss------------------------------------
Type Tschuss
Field x
Field y
Field fortsch
Field doe
End Type

;hauptschleife*************************************************
While Not KeyHit(1)
   Cls

;schuss-----------------------------------------

   If MouseHit(1) Then
      schuss.Tschuss =New Tschuss
      schuss\x=mausx
      schuss\y=mausy
      schuss\fortsch=1
      schuss\doe=1
   EndIf

If schuss<>Null
for schuss.Tschuss EACH T.schuss ;das ist jetrzt neu hier!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   If schuss\doe=1
      Color 255,0,0
      Oval schuss\x-schuss\fortsch,schuss\y-schuss\fortsch,schuss\fortsch*2,schuss\fortsch*2
      schuss\fortsch=schuss\fortsch+1
      If schuss\fortsch>15 Then Delete schuss.Tschuss
   EndIf
next;und das !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
EndIf
;smileybild------------------------------------------------------------
   bildmalen(framenummer)
   framenummer=framenummer+1
   If framenummer>5 Then framenummer=0

;mauszeug--------------------------------------------------------------
   drawmaus

Flip
Wend
End



;funktionen**************************************************************
Function drawmaus()
   mausx=MouseX()
   mausy=MouseY()
   Color 0,0,0
   Line mausx -10,mausy,mausx+10,mausy
   Line mausx,mausy -10,mausx,mausy+10
   Oval mausx-8,mausy-8,16,16,0
   Text 1,1,"mausx: " +mausx
   Text 1,20,"mausy: " +mausy
End Function


Function bildmalen(framenummer)
   DrawImage bild,100,100,framenummer
   Text 1,40,"framenummer: " +framenummer
End Function


aber irgendwie haut das nicht hin. ist da nur die schleife falsch positioniert oder der ansatz gleich ganz gagga?

d-bug

BeitragMi, Dez 06, 2006 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Fast!

Code: [AUSKLAPPEN]
For schuss.Tschuss = Each Tschuss ;das ist jetrzt neu hier!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   If schuss\doe=1
      Color 255,0,0
      Oval schuss\x-schuss\fortsch,schuss\y-schuss\fortsch,schuss\fortsch*2,schuss\fortsch*2
      schuss\fortsch=schuss\fortsch+1
      If schuss\fortsch>150 Then Delete schuss.Tschuss
   EndIf
Next;und das !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


mach mal aus der 15 ein 150 oder so, der Schuss ist zu schnell wieder weg, deswegen sieht es so aus, als ob nur 1 Schuss gezeichnet wird.

Die Abfrage If schuss <> Null brauchst du jetzt nicht mehr, weil BB jetzt nur Noch bestehende Instanzen abfragt (das macht Each)
 

da_poller

BeitragDo, Dez 07, 2006 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

;variablen*******************************************************
Global mausx,mausy
Global framenummer
Global bild
Global bild2
Global bild3
Global gegnererschaffen

;grafik und bilder***********************************************
Graphics 800,600,16,2
SetBuffer BackBuffer()
ClsColor 255,255,255
bild3=LoadAnimImage("bild3.bmp",40,40,0,2)
MaskImage bild3,255,255,255
MidHandle bild3
bild2=LoadAnimImage("bild2.bmp",120,40,0,2)
MaskImage bild2,255,255,255
bild=LoadAnimImage ("bild.bmp",40,40,0,6)
MaskImage bild,255,255,255

;type gegner------------------------------------
Type Tgegner
Field x
Field y
Field sterb
End Type

;Type schuss------------------------------------
Type Tschuss
Field x
Field y
Field fortsch
Field doe
End Type

;hauptschleife***********************************************************
While Not KeyHit(1)
   Cls

;buttonbild---------------------------------------------
If ImageRectCollide (bild2,500,400,0,mausx-1,mausy-1,2,2)
   DrawImage bild2,500,400,1
   If MouseHit(1) Then
   gegnererschaffen=1
   EndIf
Else
   DrawImage bild2,500,400,0
EndIf

;gegner---------------------------------------
If gegnererschaffen=1 Then
   gegner.Tgegner=New Tgegner
   gegner\x=Rnd(20,780)
   gegner\y=Rnd(20,580)
   gegner\sterb=0
   gegnererschaffen=0
EndIf
For gegner.Tgegner=Each Tgegner
   If Not ImagesCollide(bild2,500,400,0,bild3,gegner\x,gegner\y,0) Then
   DrawImage bild3,gegner\x,gegner\y,0
   Else
   Delete gegner.Tgegner
   EndIf
Next

;smileybild------------------------------------------------------------
   bildmalen(framenummer)
   framenummer=framenummer+1
   If framenummer>5 Then framenummer=0

;schuss----------------------------------------------------------------
   If MouseHit(1) Then
      schuss.Tschuss =New Tschuss
      schuss\x=mausx
      schuss\y=mausy
      schuss\fortsch=1
      schuss\doe=1
   EndIf
For schuss.Tschuss =Each Tschuss
   If schuss\doe=1
         Color 255,0,0
      Oval schuss\x-schuss\fortsch,schuss\y-schuss\fortsch,schuss\fortsch*2,schuss\fortsch*2
      schuss\fortsch=schuss\fortsch+1
      If schuss\fortsch>20 Then Delete schuss.Tschuss
   EndIf

Next

;mauszeug--------------------------------------------------------------
drawmaus

Flip
Wend
End




;funktionen**************************************************************
Function drawmaus()
   mausx=MouseX()
   mausy=MouseY()
   Color 0,0,0
   Line mausx -10,mausy,mausx+10,mausy
   Line mausx,mausy -10,mausx,mausy+10
   Oval mausx-8,mausy-8,16,16,0
   Text 1,1,"mausx: " +mausx
   Text 1,20,"mausy: " +mausy
End Function


Function bildmalen(framenummer)
   DrawImage bild,100,100,framenummer
   Text 1,40,"framenummer: " +framenummer
End Function

wenn ich das so laufenlass und mit da maus auf bild2 klick dann bekomm ich manchmal den schuss gezeichnet und manchmal nicht... ich brauch keine totallösung nur ne stelle im code wo ich suchen anfangen kann (bin für jeden tipp dankbar)

Ps: hab ma dacht ich mach ma in meinem thread weiter statt nen neuen zu machen is das richtig?

ToeB

BeitragDo, Dez 07, 2006 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
jap...sollte auch so sein^^
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

BladeRunner

Moderator

BeitragFr, Dez 08, 2006 9:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Klassischer Fehler: Du hast mehrfach in deinem Code ql:mousehit drin. Das löscht aber bei jedem Aufruf den Klickpuffer. Speicher einmal zu Beginn deiner Hauptschleife den wert ab (mh = mousehit(1)) und frag danach immer nur noch mh ab.
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
 

da_poller

BeitragFr, Dez 08, 2006 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
klingt logisch danke für den tipp!! werd mcih gleich mal drann machen..


edit:
gesagt getan geht ja gleich um einiges besser... thx

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group