Text Collision [GELÖST]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Lastsamurai

Betreff: Text Collision [GELÖST]

BeitragDi, Apr 22, 2008 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

weiß net genau ob das in den Beginners - Corner gehört, aber ich pack es mal trotzdem hier rein.
Also, ich habe vor in meinem Programm einen Text anzeigen zu lassen, worin man dann auf bestimmte Textstellen klicken kann und dann weitergeführt wird... sozusagen ein Link.
Nur mein Problem besteht jetzt darin, dass ich nicht weiß wie ich die Collision an einem bestimmten Wort mit der Maus (2D Bild) prüfen soll. Könnt ihr mir da vielleicht weiterhelfen oder einen Anstoß geben wie ich weiterkomme?

Falls ihr irgendwelche weiteren Infos braucht dann sagt bescheidt ^^

Danke schonmal...
MfG.
  • Zuletzt bearbeitet von Lastsamurai am Do, Apr 24, 2008 22:17, insgesamt einmal bearbeitet

Xaymar

ehemals "Cgamer"

BeitragDi, Apr 22, 2008 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Es hat 2 verschiedene Wege die ich kenne:
1.Eine selbsterstellte funktion nutzen die die mausposition überprüft.
2.Den Text in ein Bild packen, Für die Maus noch ein extra 1x1 und maskimage auf (255,255,255) setzen(das bild mus immer an mousex() und mousey() sein) und dann mit Imagescollide auf kollision prüfen.

zu 1:
Code: [AUSKLAPPEN]
Function CheckMouse2(X1,Y1,X2,Y2)
   If MouseX() >= X1 And MouseY() >= Y1
      If MouseX() < X2 And MouseY() < Y2
         If MouseHit(1)
            FlushMouse()
            Return 2
         Else
            Return 1
         EndIf
      Else
         Return 0
      EndIf
   Else
      Return 0
   EndIf
End Function

Das ist eine der Funktionen die ich für sowas programmiert habe.
Die Parameter sind einfach:
X1 -- Startposition X von welcher an geprüft werden soll
Y1 -- Startposition Y von welcher an geprüft werden soll
X2 -- Endposition X(nicht breite) bis zu der geprüft werden soll
Y2 -- Endposition Y(nicht höhe) bis zu der geprüft werden soll

Beispiel:
Code: [AUSKLAPPEN]
Text 200,200,"Hallo"
If CheckMouse2(200,200,200+StringWidth("Hallo"),200+StringHeight("Hallo"))=2
;geklickt
ElseIf CheckMouse2(200,200,200+StringWidth("Hallo"),200+StringHeight("Hallo"))=1
;drüber
EndIf


zu 2:
Da kann ich leider nichts mehr zu sagen da ich die methode nicht verwende b.z.w. nicht richtig mit auskenne

[Edit]
Ich hasse es das [/code] zu vergessen...

[Edit2]
"...nicht verwenden..."
Warbseite
 

suc-sgor

BeitragDi, Apr 22, 2008 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
da war ich wohl etwas zu langsam ... aber trotzdem ... hier meine version

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer ()

While qwe=0
  If KeyDown(1) Then qwe=1 Else qwe=0
  Cls
  linkText ("Das ist ein Test",200,300,0,2)
  Flip
Wend

End


;txt$ = der Text den du darstellen willst
;x,y = Startposition des textes
;start = Position bei der dein link anfängt - 0 entspricht 1ter Buchstabe des Textes
;laenge = laenge des links

Function linktext(txt$,x,y,start,laenge) 

  start_x=StringWidth(LSet(txt$,start))
  laenge_x=StringWidth(LSet(RSet(txt$,Len(txt$)-start),laenge))

  x1= x+start_x
  y1= y
  x2= laenge_x
  y2= StringHeight(txt$)

  ;Color 255,0,0                            ;optional um den link sichtbar zu machen
  ;Rect x1,y1,x2,y2
  ;Color 255,255,255
  Text x,y,txt$

  Mouse_X=MouseX()
  Mouse_Y=MouseY()
  If MouseDown(1)=1 Then
    If Mouse_X>=x1 And Mouse_X<=x1+x2 Then
      If Mouse_Y>=y1 And Mouse_Y<=y1+y2 Then
        End              ; "end" gegen die function austauschen die der link   erfüllen soll
      EndIf
    EndIf
  EndIf

End Function

The Shark

BeitragDi, Apr 22, 2008 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu lösung 2:

Ist kein guter weg, auserdem würde ich wenn ich es mit kollisionsbefehlen machen will mit ImageRectCollide machen.

Blitzprogger

BeitragDi, Apr 22, 2008 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
uii, da kommen profilösungen Very Happy
ich als noob verwende da RECTSOVERLAP. beispiel:
Code: [AUSKLAPPEN]

setbuffer backbuffer()

while not keydown(1)

color 255,255,255
rect 100,100,100,20
color 0,0,0
text 100,100, "Hallo"
 
;das wichtige:
if rectsoverlap (mouseX(),mouseY(),1,1,100,100,100,20) then Text 100,200, "Du darfst drücken :-)"
;die erste zahl in der klammer ist die abgefragte xpos (hier die mausxpos), die 2te die ypos,die nächsten zwei  sind glaub ich die grösse des rectecks (hier mausx bis die erste der beiden zahlen,etc.),dann die x koordinate des linken oberen punkts des abgefragten bereichs, das in ypos,+ die zahl hier(xpos des bereichs), + die zahl hier(ypos)

cls
flip

wend

wenns da fehler hat dann bitte korigieren

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink
 

Lastsamurai

BeitragDo, Apr 24, 2008 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werde mir die Lösungen mal anschauen. Und das mit dem "Text in Bild" packen und die Kollision zwischen 2 Bildern prüfen hab ich schon benutzt nur da ich sehr viele Links brauche wäre es sehr umständlich sowas zu machen.

Danke Euch!

EDIT:

Mir hat die Lösung von suc-sgor eigentlich ganz gut gefallen ^^
Hab sie zwar jetzt ziemlich umgebaut, damit sie für meine Zwecke passt aber es hat mir auf jeden fall geholfen.

Danke für eure Hilfe!
  • Zuletzt bearbeitet von Lastsamurai am Do, Apr 24, 2008 22:17, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragDo, Apr 24, 2008 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bitte euch, die Ausmasse des Textes kann man mit stringheight und stringwidth feststellen und dann ist es eine simple Addition um zu prüfen ob die maus im passenden bereich ist. Wer braucht da schon images und rectoverlap?

Code: [AUSKLAPPEN]
if (mousex() >=xpos) and (mousex() <= xpos+stringwidth(derstring)) and...

Das ist in einer Zeile zu überprüfen Wink
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

FireballFlame

BeitragFr, Apr 25, 2008 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde übrigens FontHeight statt StringHeight nehmen, weil ich es blöd finde, wenn z.B. "Guten Morgen" und "Guten Abend" unterschiedlich hohe Kollisionsboxen haben.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group