Menu mit Maus (Problem!)

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

SonGoku

Betreff: Menu mit Maus (Problem!)

BeitragFr, März 25, 2005 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich wollte mein Menü erweitern und hab jetzt folgendes Problem :
Ich hab ein Button (Neues Spiel) und möchte dass das Spiel erst
startet, wenn man mit der Maus auf den Button geht und die linke
Maustaste drückt. Es läuft alles wunderbar. Nur wenn man mit der Maus
den Button berühren möchte, kommt die Fehlermeldung :
"Memory access violation"

Hier mein Code (nur Maus und Button Kollision) :
BlitzBasic: [AUSKLAPPEN]

Global Pointer = LoadImage(\"Pointer.png\")
MaskImage Pointer,255,0,0
Global New_Game = LoadImage(\"Neues_Spiel_Button.png\")
MaskImage New_Game,0,0,255
Global Menu_HG = LoadImage(\"Hauptmenue.png\")
Global GameOver = 0
Menu_HG_Musik = PlayMusic(\"Menu_HG_Musik.mp3\")

Repeat
Cls
DrawImage Menu_HG,0,0
DrawImage New_Game,170,240
DrawImage Pointer,MouseX(),MouseY()
If ImagesCollide(Pointer,MouseX(),MouseY(),0,New_Game,170,240,0) And MouseHit(1) Then
StopChannel Menu_HG_Musik
Spiel_HG_Musik = PlayMusic(\"Spiel_HG_Musik.mp3\")
Game()
GameOver = 0
Menu_HG_Musik = PlayMusic(\"Menu_HG_Musik.mp3\")
EndIf
Flip
Until KeyHit(1)
End


Danke schonmal im Voraus!
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!
 

Ensign Joe

BeitragFr, März 25, 2005 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
mach mal debug an, gibts alle dateien?

wie wäre es mitBlitzBasic: [AUSKLAPPEN]
If mx() >= bx And my() >= by And mx() <= bx + bw And my() <= by+bh And MouseHit(1) Then
;...
EndIf
gibts die Game() überhaupt?

gib ma debug-outpuit
Ich habe jetzt eine Pommesbude aufgemacht am Münchner Hauptbahnhof.
Und da ich Herbert Görgens heiße, heißt diese Pommesbude
Herbert's Pommesbude Smile

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, März 25, 2005 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht auf den ersten Blick alles ok aus!


Debugger an machen für die korrekte Fehlermeldung und die Position hier mitposten die nicht geht!
Habe nicht immer die Lust mir den Ganzen Code erst duchzulesen!


Zitat:
gibts die Game() überhaupt?

Sollte es geben denn sonst kann er gar nicht starten!
[BB2D | BB3D | BB+]

SonGoku

BeitragFr, März 25, 2005 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, die Daten sind alle vorhanden.
Debug-Output :
BlitzBasic: [AUSKLAPPEN]

If ImagesCollide(Pointer,MouseX(),MouseY(),0,New_Game,170,240,0) And MouseHit(1) Then

Das ist markiert.
Und bei deinem Code habe ich die Variablen bw und bh nicht kappiert.
Sind die Variablen bw und bh für button width und button height ?
Wenn du willst, kann ich mein ganzes Quellcode reinposten.
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!
 

Ensign Joe

BeitragSa, März 26, 2005 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ja was sagt er für n fehler?ß
das ist debug output

ja, bw = buttonwidth, bh = buttonheight (platzhalter)
Ich habe jetzt eine Pommesbude aufgemacht am Münchner Hauptbahnhof.
Und da ich Herbert Görgens heiße, heißt diese Pommesbude
Herbert's Pommesbude Smile

SonGoku

BeitragSa, März 26, 2005 1:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Memory access violation Confused
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!
 

Ensign Joe

BeitragSa, März 26, 2005 2:04
Antworten mit Zitat
Benutzer-Profile anzeigen
mach den debug an verdammt!
Ich habe jetzt eine Pommesbude aufgemacht am Münchner Hauptbahnhof.
Und da ich Herbert Görgens heiße, heißt diese Pommesbude
Herbert's Pommesbude Smile

SonGoku

BeitragSa, März 26, 2005 3:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab es doch an Confused Hier ich hab ein Screen hochgeladen :
http://sgoku.cybton.com/sonstiges/Debuger.JPG
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!

diGGa

GruppenKaspar

BeitragSa, März 26, 2005 3:32
Antworten mit Zitat
Benutzer-Profile anzeigen
vll hast du vergessen eins der bilder als global zu deklarieren?
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram

SonGoku

BeitragSa, März 26, 2005 3:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, die sind alle Global und ohne Maus (per Tastendruck)
funktioniert es.
Ich weiß nur nicht, wieso es mit der Maus nicht funzt.
Da kommt immer diese blöde Fehlermeldung... Confused
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!

Rob_

BeitragSa, März 26, 2005 4:18
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie es auf den bild aussieht benutzt du mehr als eine Schleife, und der code sieht etwas unübersichtlich aus, hmm machmal nach dem mousehit(1) noch =1 .

Also mousehit(1)=1
AMD Athlon 64 3500+ | Infineon 1 GB DDR RAM | nVidia Geforce 7800 GTX

SonGoku

BeitragSa, März 26, 2005 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein,es geht immer noch nicht.
Hier mein Quellcode (hoffentlich könnt ihr mir dann weiterhelfen) :
BlitzBasic: [AUSKLAPPEN]

;Variablen
Global Balken = LoadImage(\"Balken.bmp\") ;Schläger var.
MaskImage Balken,0,0,255
Global Ball = LoadImage(\"Ball.bmp\") ;Ball var.
MaskImage Ball,0,0,255
Global Wand = LoadImage(\"Wand.bmp\") ;Wand var.
Global Spiel_HG = LoadImage(\"hg.jpg\") ;Spiel Hintergrund var.
ResizeImage Spiel_HG,640,480 ;Bild anpassen
Global Menu_HG = LoadImage(\"Hauptmenue.png\") ;Hauptmenü Hintergrund var.
Global Credits_HG = LoadImage(\"Credits.png\") ;Credits Hintergrund var.
Global Snd_Balken_Collision = LoadSound(\"Balken_Collision.wav\") ;Balken Kollisions sound var.
Global Snd_Wand_Collision = LoadSound(\"Wand_Collision.wav\") ;Wand Kollisions sound var.
Global Ball_Crash = LoadImage(\"Ball_Crash.bmp\") ;Ball leuchtgrafik var.
MaskImage Ball_Crash,0,0,255
Global Balken_Crash = LoadImage(\"Balken_Crash.bmp\") ;Balken leuchtgrafik var.
MaskImage Balken_Crash,0,0,255
Global Pointer = LoadImage(\"Pointer.png\") ;Maus grafik var.
MaskImage Pointer,255,0,0
Global New_Game = LoadImage(\"Neues_Spiel_Button.png\") ;Neues Spiel Button var,
MaskImage New_Game,0,0,255
Global Credits = LoadImage(\"Credits_Button.png\") ;Credits Button var.
MaskImage Credits,0,0,255
Global Exit_Game = LoadImage(\"Spiel_Beenden_Button.png\") ;Spiel Beenden Button var.
MaskImage Exit_Game,0,0,255
Global GameOver = 0 ;GameOver(spiel vorbei) var.
Menu_HG_Musik = PlayMusic(\"Menu_HG_Musik.mp3\") ;Menü Hintergrundmusik abspielen
;//////////////////////////////////////Hauptschleife/////////////////////////////////////////////////////////////////////////////////
Repeat
Cls
DrawImage Menu_HG,0,0 ;Hintergrund (Menü)
DrawImage New_Game,170,280 ;Neues Spiel Button
DrawImage Credits,170,317 ;Credits Button
DrawImage Exit_Game,170,354 ;Spiel Beenden Button
DrawImage Pointer,MouseX(),MouseY()
If ImagesCollide(Pointer,MouseX(),MouseY(),0,New_Game,170,280,0) And MouseHit(1) Then ;Wenn der Maus den Button berührt und linke
StopChannel Menu_HG_Musik ;Menü Hintergrundmusik stoppen Maustaste gedrückt wird, dann...
Spiel_HG_Musik = PlayMusic(\"Spiel_HG_Musik.mp3\") ;Spiel Hintergrundmusik abspielen
Game() ;Spiel starten
GameOver = 0 ;GameOver = Aus (noch nicht verloren)
Menu_HG_Musik = PlayMusic(\"Menu_HG_Musik.mp3\") ;Nachdem man verloren hat, wieder Menü Hintergrundmusik abspielen
EndIf
If ImagesCollide(Pointer,MouseX(),MouseY(),0,Credits,170,317,0) And MouseHit(1) Then ;Wenn der Maus den Button berührt und linke
StopChannel Menu_HG_Musik ;Menü Hintergrundmusik stoppen Maustaste gedrückt wird, dann...
Credits_HG_Musik = PlayMusic(\"Credits_HG_Musik.wav\") ;Credits Hintergrundmusik abspielen
Credits() ;Credits anzeigen
StopChannel Credits_HG_Musik ;Nachdem man die Escape(ESC) taste gedrückt hat, Credits Hintergrundmusik stoppen
Menu_HG_Musik = PlayMusic(\"Menu_HG_Musik.mid\") ;Menü Hintergrundmusik abspielen
EndIf
If ImagesCollide(Pointer,MouseX(),MouseY(),0,Exit_Game,170,354,0) And MouseHit(1) Then End ;Wenn der Maus den Button berührt und
Flip ;linke Maustaste gedrückt wird,dann
StopChannel Spiel_HG_Musik ;Menü Hintergrundmusik stoppen ;Beende das Spiel
Until KeyHit(1) ;Bis man die Escape(ESC) Taste drückt
End
;///////////////////////////////////////Functionen///////////////////////////////////////////////////////////////////////////////////
Function Game()
balkenx = 20 ;Schläger : breite
balkeny = 110 ;Schläger : länge

ballx = 60 ;Ball : breite
bally = 110 ;Ball : länge

bewegenx = 7 ;Ball speed x
bewegeny = 7 ;Ball speed y

Repeat
Cls
DrawImage Spiel_HG,0,0
DrawImage Wand,0,0 ;Wand(Wand.bmp) zeichnen
DrawImage Balken,Balkenx,Balkeny ;Schläger(Balken.bmp) zeichnen und die länge,breite (balkenx,y) zuweisen
DrawImage Ball,ballx,bally ;Ball(Ball.bmp) zeichnen und die länge,breite (ballx,y) zuweisen
If KeyDown(200) Then balkeny = balkeny-2 ;Wenn Taste (nach oben) gedrückt wird, dann den Schläger nach oben bewegen.
If KeyDown(208) Then balkeny = balkeny+2 ;Wenn Taste (nach unten) gedrückt wird, dann den Schläger nach unten bewegen.
If balkeny = 4 Then balkeny = 8 ;Wenn der Schläger oben ist, dann nicht mehr weiter
If balkeny = 364 Then balkeny = 362 ;Wenn der Schläger unten ist, dann nicht mehr weiter
ballx = ballx+bewegenx ;Ball nach links/rechts bewegen
bally = bally+bewegeny ;Ball nach oben/unten bewegen
If bally > 480-30 Then
PlaySound Snd_Wand_Collision
DrawImage Ball_Crash,ballx,bally
bewegeny = -7 ;Ball kollision (rechte Wandberührung)
EndIf
If bally < 0 Then
PlaySound Snd_Wand_Collision
DrawImage Ball_Crash,ballx,bally
bewegeny = +7 ;Ball kollision (obere Wandberührung)
EndIf
If ballx > 640-30 Then
PlaySound Snd_Wand_Collision
DrawImage Ball_Crash,ballx,bally
bewegenx = -7 ;Ball kollision (untere Wandberührung)
EndIf
If ImagesCollide(Ball,ballx,bally,0,Balken,balkenx,balkeny,0) Then ;Kollision zwischen Ball und Schläger
PlaySound Snd_Balken_Collision
DrawImage Ball_Crash,ballx,bally
DrawImage Balken_Crash,balkenx,balkeny
bewegenx = +5
EndIf
If ImagesCollide(Ball,ballx,bally,0,Wand,0,0,0) Or KeyHit(1) Then ;Wenn der Ball den Außenwand berührt dann...
GameOver = 1 ;GameOver(Ende)
EndIf
Flip
Until GameOver = 1 ;Bis GameOver = 1
End Function

Function Credits()
Repeat
Cls
DrawImage Credits_HG,0,0 ;Credits Hintergrund malen
Flip
Until KeyHit(1) ;Bis man die Escape(ESC) Taste drückt
End Function


zu unübersichtlich ?
find ich eigentlich nicht.

ps: Graphics,BackBuffer,.. und so,hab ich nicht mitkopiert.
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!

Alfadur

BeitragSa, März 26, 2005 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
doch, unübersichtlich.

fass das alles mal zusammen, zb so ...

BlitzBasic: [AUSKLAPPEN]

If MouseHit(1) Then
If ImagesCollide...
If ImagesCollide...
End If


is besser. wenn die buttons nur viereckig sind, dann solltest du das per koordinaten prüfen, so wie joe das sagte...
A Cray is the only computer that runs an endless loop in less than four hours.

SonGoku

BeitragSa, März 26, 2005 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich es so wie du es vorgeschlagen hast mache,
dann funktionierts Smile
Aber wenn ich draufklicke, dann kommt wieder diese Fehlermeldung Confused
Und per koordinaten kann ich es nicht prüfen, weil ich es irgendwie nicht
kappiere...Gibt es koordinaten TUTs ? oder könnt ihr es mir hier kurz
sagen, wie das mit den koordinaten funzt ?
Danke!

Edit : Ich hab es mit den koordinaten ausprobiert und es klappt Very Happy
Danke vielmals. Aber es wäre nett, wenn mir einer das erklären würde,
wie das funktioniert.
Danke!
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 26, 2005 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Jezt habe ich mal dein ersten Code getestet und der geht garantiert!
zum selber testen...BlitzBasic: [AUSKLAPPEN]
Graphics 800 ,600,16,2
Global Pointer = Image (10 ,10, $ff0000)
;MaskImage Pointer,255,0,0
Global New_Game = Image (100 ,100, $ff00ff)
;MaskImage New_Game,0,0,255
Global Menu_HG = Image (100 ,150, $fff)
Global GameOver = 0
;Menu_HG_Musik = PlayMusic(\"Menu_HG_Musik.mp3\")
Repeat
Cls
DrawImage Menu_HG,0,0
DrawImage New_Game,170,240
DrawImage Pointer,MouseX () ,MouseY ()
If ImagesOverlap (Pointer,MouseX () ,MouseY () ,New_Game,170,240) And MouseHit (1) Then
;StopChannel Menu_HG_Musik
Spiel_HG_Musik = PlayMusic (\"Spiel_HG_Musik.mp3\")
Game ()
GameOver = 0
;Menu_HG_Musik = PlayMusic(\"Menu_HG_Musik.mp3\")
EndIf
Flip
Until KeyHit (1)
End

Function Game()
Text 100,100,\"Es Geht.... Taste für neuen Versuch !\"
Flip
WaitKey
End Function


Function Image(x,y,f); Erstellt Pseudo grafiken
img = CreateImage (x,y)
SetBuffer ImageBuffer (img)
Color 0,0,f
Rect 0,0,x,y,1
SetBuffer BackBuffer ()
Color 255,255,255
Return img
End Function
[BB2D | BB3D | BB+]

Alfadur

BeitragSa, März 26, 2005 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
SonGoku hat Folgendes geschrieben:

Edit : Ich hab es mit den koordinaten ausprobiert und es klappt Very Happy
Danke vielmals. Aber es wäre nett, wenn mir einer das erklären würde,
wie das funktioniert.
Danke!


was gibts an koodinaten nicht zu verstehen? du hast ne x achse von links nach rechts und ne y achse von oben nach unten...

If mx() >= bx And my() >= by And mx() <= bx + bw And my() <= by+bh And MouseHit(1) Then
;...
EndIf

mx() und my() liefern offensichtlich die mauscursorkoordinaten zurück, ergo wird getestet ob der mauszeiger sich in dem rechteck befindet welches durch (bx|by) und (bx+bw|by+bh) beschrieben wird...
A Cray is the only computer that runs an endless loop in less than four hours.

SonGoku

BeitragSa, März 26, 2005 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
@Rallimen
Das hab ich getestet und es geht. Wenn ich es aber bei meinem Code
mache, dann passiert nichts, wenn man die linke Maustaste drückt.
Trotzdem danke, dass du dich bemüht hast um mir ein Beispielcode
zu machen. Daraus konnte ich vieles lernen Wink

@Alfadur
Danke für dein Beispiel. Da wusste ich nicht wieso mx() einmal
>= hat und einmal <=. Ich hab es aber schon irgendwie kappiert.
Ich muss es nur paar mal so durchlesen, damit ich es besser verstehen kann.

@Joe
Ich danke dir auch für dein Beispiel und für die Hilfe Wink

Das Problem hat sich erledigt!
Ich danke euch vielmals!
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!

Ctuchik

BeitragSa, März 26, 2005 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Also die "Memory access violation" bei ImagesCollide gabs schon öfter hier im Forum! Es handelt sich dabei meines Wissens nach um einen Bug, der nur bei manchen Leuten auftritt! Warum kann ich leider auch nicht sagen!
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 26, 2005 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, könnte sein....
Schick mir mal deinen kompletten Code inclusive Bildern auf meine Email
rallimen[at]freenet.de
dann kann ich genaueres sagen!
[BB2D | BB3D | BB+]

SonGoku

BeitragSa, März 26, 2005 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
@Ctuchik
Schade... vielleicht hat das was mit dem Betriebsystem was zu tun.
Rallimen benutzt Win98 und ich WinXP.

@Rallimen
Wird gesendet Very Happy
Projekt "BlitzPong" --> 100%

BRL Account mit Blitz3D und BlitzMax für nur 67€!!!
Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group