Kollision funzt net!!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Darren

Betreff: Kollision funzt net!!

BeitragSa, Jan 01, 2005 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hey leude!

ich habe folgenden code:


Code: [AUSKLAPPEN]
Global b_versch = LoadImage("gfx/buttonversch.bmp")
Global b_drehen = LoadImage("gfx/buttondrehen.bmp")


While...
   
   ;code
   
      
   DrawImage b_drehen,30,724
   DrawImage b_versch,100,724
   
   If on_click(1,b_drehen,30,724) = 1  Then
      bewmod = 1-bewmod; <<<---- das funktioniert
   End If   
   If on_click(1,b_versch,100,724) = 1 Then
      bewmod = 1-bewmod; <<<---- das nicht
   End If
   
   ;code
   
Wend

Function on_click(taste,bild,bildx,bildy)
   If ImagesOverlap(mauszeiger_s,mx,my,bild,bildx,bildy) = 1 And (MouseHit(taste)) = 1
      Return 1
   Else
      Return 0
   End If      
End Function



wenn ich jetzt auf das bild b_drehen klicke wird der befehl audgeführt. bei dem bild b_versch nicht warum??? es ist doch die selbe funktion. ich sollte vieleicht hinzufügen dass das alles im 3dmodus passiert.

THX für hilfe ich bin schon kurz vorm GAU
MFG Darren
 

Blitzkrieg Bop

BeitragSa, Jan 01, 2005 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich denke der Fehler liegt an der Mousehit Abfrage in der Funktion.
Ich habe mir erlaubt, den Code etwas zu ändern. So sollte es in etwa funktionieren:
Code: [AUSKLAPPEN]

;Global b_versch = LoadImage("gfx/buttonversch.bmp")
;Global b_drehen = LoadImage("gfx/buttondrehen.bmp")

Graphics 640,480,16,2

Global b1 = CreateImage(40,40)
SetBuffer ImageBuffer(b1)
Color 255,0,0
Rect 0,0,40,40

Global b2 = CreateImage(40,40)
SetBuffer ImageBuffer(b2)
Color 255,255,0
Rect 0,0,40,40

SetBuffer BackBuffer()

Global mhit

Repeat
Cls
;code

mhit = MouseHit(1)

DrawImage b1,30,100
DrawImage b2,100,100

If on_click(1,b1,30,100) = 1 Then
   Text 0,0,"Nummer 1"
End If

If on_click(1,b2,100,100) = 1 Then
   Text 0,0,"Nummer 2"
End If

;code
Flip
Until KeyHit(1):End

Function on_click(taste,bild,bildx,bildy)
   If ImageRectCollide(bild,bildx,bildy,0,MouseX(),MouseY(),1,1) And mhit
      Return 1
   Else
      Return 0
   End If
End Function
~ Hey Ho Let's Go ~
 

Darren

BeitragSa, Jan 01, 2005 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey echt fetten dank!!! Es funtioniert!! Aber warum????????? Ich versteht es nicht!! Das ist doch höcht unlogisch
MFG Darren
 

Blitzkrieg Bop

BeitragSo, Jan 02, 2005 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Jo, das ist so ne Sache mit dem Mousehit. Wenn du ständig den direkten Syntax Mousehit benutzt, kann BB nur an den Stellen darauf reagieren, wo es zuerst vorkommt. Genauer erklären kann ich das auch nicht Confused
Besser ist es auf jedenfall daher, alle Mouse Sachen in Variablen zu speichern.
Zum Beispiel so:
Code: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()

Global mx#,my#,mhit1,mdown2

Repeat
Cls

mx# = MouseX()
my# = MouseY()
mhit1 = MouseHit(1)
mdown2 = MouseDown(2)

Flip
Until KeyHit(1):End

Machst du das wie oben beschrieben, hast du keinerlei Probleme mehr beim Abfragen, ob nun eine Taste gedrückt wurde oder nicht.
(Und es ist ja auch ein bisschen kürzer: Anstatt z.B:
Code: [AUSKLAPPEN]

If ImageRectCollide(bild,bildx,bildy,0,MouseX(),MouseY(),1,1) And mousehit(1) = 1 ;einfach:
If ImageRectCollide(bild,bildx,bildy,0,mx#,my#,1,1) And mhit1

Wink )
~ Hey Ho Let's Go ~
 

Darren

BeitragMo, Jan 03, 2005 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hatte es auch vorher schon aber nur mit mousespeed und den positionen aber auf tasten bin ich noch nicht bekommen.....

fetten dank nochmal
MFG Darren
 

Blitzkrieg Bop

BeitragMo, Jan 03, 2005 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Problem
~ Hey Ho Let's Go ~

DivineDominion

BeitragMo, Jan 03, 2005 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Const NORMAL = 0
const HIT = 1
const DOWN = 2
const UP = 3

global MLB ;linke Maustaste

if MLB = NORMAL
  if MouseDown( 1 ) then MLB = HIT
elseif MLB = HIT
  if mousedown( 1 ) then MLB = DOWN else MLB = UP
elseif MLB = DOWN
  if not mousedown( 1 ) then MLB = UP
elseif MLB = UP
  MLB = NORMAL
endif


Wenn du drückst wird in jedem schleifendurchlauf der status verändert - erst HIT (weil erste frame), dann DOWN wenn es so bleibt bzw jeweilt UP, wenn die Drückerei aufhört.

Kannst dann in deinem code
Code: [AUSKLAPPEN]
... and MLB = HIT

nutzen und hast ein zuverlässiges MouseHit() mit extras Smile
Geht natürlich für jede Maustaste und jede Taste deiner tastatur. So kannst du bei HIT z.b. andere Aktionen ausführen als bei DOWN[/code]
christian.tietze@gmail.com - https://christiantietze.de
macOS

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group