Text Collision [GELÖST]
Übersicht

LastsamuraiBetreff: Text Collision [GELÖST] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu lösung 2:
Ist kein guter weg, auserdem würde ich wenn ich es mit kollisionsbefehlen machen will mit ImageRectCollide ![]() |
||
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
uii, da kommen profilösungen ![]() 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. ![]() |
Lastsamurai |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bitte euch, die Ausmasse des Textes kann man mit stringheight![]() ![]() Code: [AUSKLAPPEN] if (mousex() >=xpos) and (mousex() <= xpos+stringwidth(derstring)) and...
Das ist in einer Zeile zu überprüfen ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde übrigens FontHeight![]() ![]() |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group