Problem mit Imagerectoverlap

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Darkbyte

Betreff: Problem mit Imagerectoverlap

BeitragDo, Jan 18, 2007 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute ich habe da ein Problem. Ich bin noch anfänger und möchte mir einen kleine CD spiler Programmieren. Ich erläutere das an einem Biespiel:
Graphics 300, 300
Test = LoadImage("Test")
Drawimage Test, 1, 1,
Maus habe ich schon
und dann möchte ich:

If Imagerectoverlap ( maus, X, Y, Test, 1, 1,) and Mousdown(1) Then Print "geklickt"

Bie mir klappt das nicht. Bitte helft mir. Was habe ich falsch gemacht und wie kriege ich ds richtig hin.

Zugefügt: so müsste es stimmen das Test habe ich schon in meinem Programm drinne. beimir klappt nur das mit dem imageoverlap nicht.
  • Zuletzt bearbeitet von Darkbyte am Do, Jan 18, 2007 21:01, insgesamt einmal bearbeitet

Dottakopf

BeitragDo, Jan 18, 2007 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann des sein das des bild(test) nicht auf der Koordinate,1,1 liegt ?
Rechtschreibfehler gelten der allgemeinen Belustigung!

Eingeproggt

BeitragDo, Jan 18, 2007 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hoffe du lädsts ein "Test.bmp" oder ein "Test.jpg" oder ein "Test.png", sonst sehe ich dark für deine bytes Smile
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Darkbyte

BeitragDo, Jan 18, 2007 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich weis das da Fehler drinne sind ich wollte nur wissen wie das ghet mir dem Overlap Befehl.

AraneA

BeitragDo, Jan 18, 2007 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke mal das Problem liegt an deinem Print
oder daran, das du das nicht in einer Schleife hast..

Du musst das ganze in einer Schleife abfrage.. ZB

while wend oder repeat until/forever

ALs beispiel:
Code: [AUSKLAPPEN]
graphics 640,480,16,2
setbuffer backbuffer()

maus = loadimage("maus.bmp")


repeat
  rect 10,10,100,100
  if imagerectoverlap(maus,mousex(),mousey(),10,10,100,100) then
    text 300,300,"Kollision"


  if keydown(1) then
    freeimage maus
    end
forever

Dottakopf

BeitragDo, Jan 18, 2007 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja den Overlap befehl haste soweit schon richtig gemacht. Haste es in ner Schleife ? Wenn ja kann s eigentlich nur an den Bildern liegen. Ich würde dir aber für die Zukunft den "imagescollide" befehl empfelen(der is genauer).

Der Funzt eigentlich genauso wie der Overlap befehl nur das man nen Frame mit angeben muss. (ein Frame ist ein einzelbild einer Animation Z.B)

Also so :

if imagescollide(bild,bild_x,bild_y,0,bild2,bild2_x,bild2_y,0) then ...

0 Stellt den Frame dar (da du keinen Frame hast machste einfach 0)

~Edit~ Man bin ich langsam.. ^^
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

Darkbyte

Betreff: hmm irgenwie geht das noch nicht so

BeitragDo, Jan 18, 2007 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich scheibe mal den ganzen Quelltext hier rein:
Graphics 300, 300
SetBuffer BackBuffer()
Maus = LoadImage("pointer.bmp")
PfeilL = LoadImage("P1m.bmp")
PFeilR = LoadImage("P2m.bmp")


Repeat

Cls
SetBuffer BackBuffer()
DrawImage PfeilL, 1, 20
DrawImage PfeilR, 50, 20
X = MouseX()
Y = MouseY()
DrawImage Maus, X, Y
Flip
Until KeyDown(1)

Repeat
Cls
X = MouseX()
Y = MouseY()
If ImagesCollide (Maus,X,Y,0,PfeilL,1,20,0) And MouseDown(1) Then Text 100,100,"Kollision"
Until KeyHit(1)


WAs mache ich falsch? Da kommt kein Text Kollision

Dottakopf

BeitragDo, Jan 18, 2007 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin mir nicht sicher aber könnte an der zweiten Schleife liegen.

Als ich mit 2D geproggt hab, hab ich immer alles in Functionnen gelegt und dan des in eine Schleife ^^
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

Darkbyte

Betreff: schon

BeitragDo, Jan 18, 2007 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
schon möglich aber was mache ich bei mir falsch? köntetn ihr mir bitte zeigen was ich falsch mache?

Dottakopf

BeitragDo, Jan 18, 2007 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt könntest du das ganze auch in einer Schleife schreiben.
Und in der 2ten Schleife Braucht man wen dan noch ein Flip.

Vielleicht funtz des ja so

Code: [AUSKLAPPEN]

Graphics 300, 300
SetBuffer BackBuffer()

Maus = LoadImage("pointer.bmp")
PfeilL = LoadImage("P1m.bmp")
PFeilR = LoadImage("P2m.bmp")


Repeat
cls

DrawImage PfeilL, 1, 20
DrawImage PfeilR, 50, 20

X = MouseX()
Y = MouseY()
DrawImage Maus, X, Y
If ImagesCollide (Maus,X,Y,0,PfeilL,1,20,0) then end
flip
until keyhit(1)

Rechtschreibfehler gelten der allgemeinen Belustigung!
 

Darkbyte

Betreff: DANKE

BeitragDo, Jan 18, 2007 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy cool danke das ihr mir geholfen habt.

AraneA

BeitragDo, Jan 18, 2007 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit meinem Code oben hätte es auch funktionieren müssen...

Du MUSST das sogar in eine Schleife packen...

Code: [AUSKLAPPEN]
Repeat
Cls
SetBuffer BackBuffer()              <- Falsch  in deinem Code einmal VOR die Schleife
DrawImage PfeilL, 1, 20
DrawImage PfeilR, 50, 20
X = MouseX()
Y = MouseY()
DrawImage Maus, X, Y
Flip
Until KeyDown(1)


Wenn du jetzt mit Esc aus der schleife gehst kommt es erst zur Kollisionsprüfung

Code: [AUSKLAPPEN]
Repeat
Cls                              <- hier unnötig , sowieso alles unnötig, da du gar nicht mehr flipst
X = MouseX()
Y = MouseY()
If ImagesCollide (Maus,X,Y,0,PfeilL,1,20,0) And MouseDown(1) Then Text 100,100,"Kollision"
Until KeyHit(1)



Richtig wäre:
Code: [AUSKLAPPEN]
SetBuffer BackBuffer() <- Einmal vor der Schleife

Reapeat
  cls
  Alles Zeichnen
  if Kollision() then text 10,10,"Kollision"

  flip
Until KeyDown(1)

Function Kollision()
  If Imagerectoverlap(maus,mousex(),mousey(),10,10,100,100) then
  return 1
End Function


Du rufst halt einmal in der Hauptschleife die Function auf. Wichtig ist halt, das du nur eine Schleife hast... (jedenfalls in diesem Beispiel)
 

Darkbyte

Betreff: Das klapt immer noch nicht!

BeitragFr, Jan 19, 2007 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Graphics 300, 300
SetBuffer BackBuffer()
Maus = LoadImage("pointer.bmp")
PfeilL = LoadImage("P1m.bmp")
PfeilR = LoadImage("P2m.bmp")


Repeat
Cls
DrawImage PfeilL, 1, 20
X = MouseX()
Y = MouseY()
DrawImage Maus, X, Y

If K() And MouseDown(1) Then Print "Test"

Flip
Until KeyDown(1)
End

Function K()
If ImagesCollide (Maus,X,Y,0,PfeilL,1,20,0) Print "Hallo"
End Function

Das ist dein Quelltext etwas abegeändert. Aber es funktioniert nicht da steht immer image does not exist.

Dottakopf

BeitragFr, Jan 19, 2007 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du Variablen in einer Funktion nutzen willst sollte man dies auch global machen...

also ist der Fehler das du beim Bildladen es nicht als Global geladen hast.

Alos z.B.

global Bild = loadimage("test")

dann erkennt er das bild in ner Funktion.

~Nachtrag~ : Bin etz ne Zeitlang nicht anwesend, muss Prospekte austeilen. (Hat ma mal Schulfrei und muss trotzdem Arbeiten...)
Rechtschreibfehler gelten der allgemeinen Belustigung!
  • Zuletzt bearbeitet von Dottakopf am Fr, Jan 19, 2007 12:55, insgesamt einmal bearbeitet
 

Darkbyte

Betreff: erkent

BeitragFr, Jan 19, 2007 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
zwar das bild aber es erscheint kein Text wenn ich auf den Pfeil klicke.

Dottakopf

BeitragFr, Jan 19, 2007 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
hab schnell bevor ich losdüse des nochmal angeschaut und auch gelöst !

Code: [AUSKLAPPEN]


Graphics 300, 300
SetBuffer BackBuffer()

Global Maus = LoadImage(" pfad")
Global PfeilL = LoadImage("pfad")
Global PfeilR = LoadImage("pfad")


Repeat
Cls

menu()

Flip
Until KeyDown(1)
End

 ;alles in eine Function packen (is doch viel übersichtlicher)
Function menu()

  x = MouseX()
  y= MouseY()
  DrawImage maus,x,y
  DrawImage pfeilL,100,20

  If ImagesCollide(maus,x,y,0,pfeilL,100,20,0) Then Text 10,10,"KOLLISION"

End Function



Solltest du was nicht verstanden haben frag bitte !

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group