Problem mit Mausbegrenzung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Blitzprogger

Betreff: Problem mit Mausbegrenzung

BeitragDo, Mai 15, 2008 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo erstmal
mein problem: ich habe mich nun mit isometrischen karten auseinandergesetzund auch schon einen einfachen editor erstellt, ich habe es so gemacht dass man wenn man die maustasten drückt auf der karte herumscrollen kann. wenn ich nun ein bisschen nach unten rechts scrolle kome ich zu einem punkt an dem meine maus "steckenbleibt"
hier mal die scrollfunktion: Code: [AUSKLAPPEN]
For y=0 To 29
   For x=0 To 19
      tx = x *80 + minx
      ty = y *40 + miny
      DrawImage tile(tiles(x*2,y*2)), tx, ty
      If y < 29 And x < 19 Then DrawImage tile(tiles(x*2+1,y*2+1)), tx+40, ty+20   
   Next
Next

If KeyDown(208) Then miny = miny + 1
If KeyDown(200) Then miny = miny - 1
If KeyDown(203) Then minx = minx - 1
If KeyDown(205) Then minx = minx + 1

DrawImage maus,xx*40+40+minx,yy*20+20+miny
und für die ganz mutigen den (fast) ganzen code
Code: [AUSKLAPPEN]
Graphics 800,600,0,1
Color 0,0,0
SetBuffer BackBuffer()
Dim tile(7)
tile(0)=LoadImage("raute.bmp")
tile(1)=LoadImage("raute2.bmp")

Dim geb(4)
geb(0)=LoadImage("rauteg.bmp")
geb(1)=LoadImage("rauteg2.bmp")

Dim tiles(59,59)
Dim gehen(59,59)
Dim gebs(59,59)

aus = 1
aus2 = 1
maus = LoadImage("mausiso.bmp")
hinter = LoadImage("grash.bmp")

While Not KeyDown(1)

xx = MouseX()/40
yy = MouseY()/20

DrawBlock hinter,0,0

For y=0 To 29
   For x=0 To 19
      tx = x *80 + minx
      ty = y *40 + miny
      DrawImage tile(tiles(x*2,y*2)), tx, ty
      If y < 29 And x < 19 Then DrawImage tile(tiles(x*2+1,y*2+1)), tx+40, ty+20   
   Next
Next
For y=0 To 29
   For x=0 To 19
      tx = x *80 + minx
      ty = y *40 + miny
      If tiles(x,y) = 1 Or tiles(xx,yy) = 2 Then
       If gebs(x,y) <> 3 And gebs(x,y) > 0 Then tiles(x,y) = 0
      ElseIf gebs(x,y) = 3 Then
       tiles(x,y) = 4
      EndIf
      DrawImage geb(gebs(x*2,y*2)), tx, ty-80
      If y < 29 And x < 19 Then DrawImage geb(gebs(x*2+1,y*2+1)), tx+40, ty-60   
   Next
Next

If KeyDown(208) Then miny = miny + 1
If KeyDown(200) Then miny = miny - 1
If KeyDown(203) Then minx = minx - 1
If KeyDown(205) Then minx = minx + 1

If MouseDown(1) Then
 If wahl = 0 Then
  tiles(xx,yy) = aus
  If aus = 1 Then gehen(xx,yy) = 1
 EndIf
 If wahl = 1 Then
  gebs(xx,yy) = aus2
 EndIf
EndIf
If MouseDown(2) Then
 If wahl = 0 Then tiles(xx,yy) = 0
 If wahl = 1 Then gebs(xx,yy) = 0
EndIf

DrawImage maus,xx*40+40+minx,yy*20+20+miny

Flip
Cls

Wend

End
(klar ist er unübersichtlich, verbesserungswürdig und unausgereift, desshalb beachtet bitte dass ich erst seit "kurzem" programmiere)

edit/: ist mir noch nie passiert dass niemand antwortet. wisst ihr die lösung nicht?

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

Unfreiwilliger Gewinner des BAC# 115. Wink

ozzi789

BeitragSa, Mai 17, 2008 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm.. ich weis nicht wie man etwas isometrisches macht ..
du kanst aba ne line die die 4 punkte verbinden machen und dan eine Collision abfrage Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Blitzprogger

BeitragSa, Mai 17, 2008 10:58
Antworten mit Zitat
Benutzer-Profile anzeigen
ohh nein, nicht das ist das problem. es geht darum das wenn ich scrolle das dann irgendwann die maus gegen eine "mauer" fährt und nicht mehr weiterkommt. dort hört mein latein einfach schon auf

edit: !! lest das!!
ich habe das problem gelöst!!! ihr braucht eure antworten nicht mehr zu posten

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

Unfreiwilliger Gewinner des BAC# 115. Wink

Moep

BeitragSa, Mai 17, 2008 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich nehme mal diese Mauer ist das Ende des Fensters in dem das Programm läuft. Du musst immer wenn die Maus einen Rand des Bildschirms erreicht hat, die Maus woanders hinsetzen.

mfg
Moep
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

Blitzprogger

BeitragSa, Mai 17, 2008 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
daran hab ich auch schon gedacht aber es hat einen anderen grund:
nach langer überlegung habe ich versucht die variable mit der die tiles verschoben werden nicht direkt bei der mauszeichnung mitzurechnen. wenn ich sie erst später bei der kollision einberechne funktioniert es.
hier mein ganzer Code: [AUSKLAPPEN]
Graphics 800,600,0,1
Color 0,0,0
SetBuffer BackBuffer()
Dim tile(7)
tile(0)=LoadImage("raute.bmp")
tile(1)=LoadImage("raute2.bmp")
tile(2)=LoadImage("raute3.bmp")
tile(3)=LoadImage("raute4.bmp")
tile(4)=LoadImage("raute5.bmp")
tile(5)=LoadImage("raute6.bmp")
tile(6)=LoadImage("raute7.bmp")
tile(7)=LoadImage("raute8.bmp")

Dim geb(4)
geb(0)=LoadImage("rauteg.bmp")
geb(1)=LoadImage("rauteg2.bmp")
geb(2)=LoadImage("rauteg3.bmp")
geb(3)=LoadImage("rauteg4.bmp")
geb(4)=LoadImage("rauteg5.bmp")


Dim tiles(59,59)
Dim gehen(59,59)
Dim gebs(59,59)

aus = 1
aus2 = 1
maus = LoadImage("mausiso.bmp")
hinter = LoadImage("grash.bmp")
gesch# = 2

Global timer = CreateTimer (60)

While Not KeyDown(1)

xx = MouseX()/40
yy = MouseY()/20
mh = MouseDown(1)
md = MouseDown(2)

DrawBlock hinter,0,0

For y=0 To 29
   For x=0 To 19
      tx = x *80 + minx
      ty = y *40 + miny
      If tx > -120 And tx < 840 Then
       If ty > -40 And ty < 620 Then DrawImage tile(tiles(x*2,y*2)), tx, ty
       If y < 29 And x < 19 Then DrawImage tile(tiles(x*2+1,y*2+1)), tx+40, ty+20
      EndIf   
   Next
Next
For y=0 To 29
   For x=0 To 19
      tx = x *80 + minx
      ty = y *40 + miny
      If tiles(x,y) = 1 Or tiles(xx,yy) = 2 Then
       If gebs(x,y) <> 3 And gebs(x,y) > 0 Then tiles(x,y) = 0
      ElseIf gebs(x,y) = 3 Then
       tiles(x,y) = 4
      EndIf
      If tx > -120 And tx < 840 Then
       If ty > -40 And ty < 620 Then DrawImage geb(gebs(x*2,y*2)), tx, ty-80
       If y < 29 And x < 19 Then DrawImage geb(gebs(x*2+1,y*2+1)), tx+40, ty-60   
      EndIf
   Next
Next

If gesch < 0.5 Then gesch = 0.5

If KeyDown(208) Then miny = miny - gesch
If KeyDown(200) Then miny = miny + gesch
If KeyDown(203) Then minx = minx + gesch
If KeyDown(205) Then minx = minx - gesch

If mh Then
 If wahl = 0 Then
  If xx - minx/40 < 60 And xx - minx/40 > -1 Then
   If yy - miny/20 < 60 And yy - miny/20 > -1 Then tiles(xx-minx/40,yy-miny/20) = aus
  EndIf
  If aus = 1 Then gehen(xx,yy) = 1
 EndIf
 If wahl = 1 Then
  gebs(xx,yy) = aus2
 EndIf
EndIf

If md Then
 If wahl = 0 Then tiles(xx,yy) = 0
 If wahl = 1 Then gebs(xx,yy) = 0
EndIf

If KeyHit(30) Then
 FlushKeys()
 Locate 0,0
 If wahl = 0 Then aus = Input("auswahl ")
 If wahl = 1 Then aus2 = Input("auswahl ")
EndIf

If KeyHit(17) Then
 FlushKeys()
 Locate 0,0
 If wahl = 0 Then
  gelaende = Input("Gelände = ")
  For gx = 0 To 59
   For gy = 0 To 59
    tiles(gx,gy) = gelaende
   Next
  Next
 ElseIf wahl = 1 Then
  gelaende2 = Input("Gelände = ")
  For gx = 0 To 59
   For gy = 0 To 59
    gebs(gx,gy) = gelaende2
   Next
  Next
 EndIf
EndIf

If KeyHit(32) Then
 If wahl = 1 Then
  wahl = 0
 ElseIf wahl = 0 Then
  wahl = 1
 EndIf
EndIf

If KeyDown(2) Then gesch = gesch - 0.05
If KeyDown(3) Then gesch = gesch + 0.05

If KeyDown(57) Then
 Rect 0,500,800,100,1
 DrawImage tile(aus),10,510
 DrawImage tile(gelaende),10,550
 DrawImage geb(aus2),90,490
 DrawImage geb(gelaende2),170,490
 Color 255,255,255
 Text 250,510, "wahl: " + wahl
 Color 0,0,0
EndIf

DrawImage maus,xx*40+40,yy*20+20;+miny

WaitTimer timer

Flip
Cls

Wend

End
es sind keine antworten mehr vonnöten da das problem nun gelöst wurde

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

Unfreiwilliger Gewinner des BAC# 115. Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group