blitz-Max Bug?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Smily

Betreff: blitz-Max Bug?

BeitragDo, Aug 09, 2007 0:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich bin gerade auf folgendes Problem gestossen:
Wenn bei mir in Bmax schon einige bilder (oder auch andere Ressourcen) geladen wurden, verhält sich der befehl Createimage ein wenig merkwürdig.
Ich habe im Code unten einfach mal die Stelle, in der normalerweise bilder geladen werden durch zufällige "Createimage"s ersetzt.

Wenn ich mit der Maus über den Button gehe, wird KEIN hover-button angezeigt.
Wenn ich die for-next schleife am Anfang entferne Funktioniert die Funktion Drawbutton allerdings einwandfrei. Also schlussfolgere ich einfach mal, dass es daran liegt, dass schon speicher belegt wurde.

Ich kann mir da keinen Reim Drauf machen. Hat ausser mir sonst jemand das Problem?

Code: [AUSKLAPPEN]
Strict
Graphics 800,600

AutoMidHandle 1
Global buttonimg:Timage = LoadImage("Button.png")
Global buttonovimg:Timage = LoadImage("buttonover.png")
Local img:Timage[1000]
For Local x:Int = 1 To 999
   img[x] = CreateImage(Rand(100,200),Rand(10,20))
Next
Global pixel:TImage = CreateImage(3,3)
Repeat
   Cls
      drawbutton 400,300, "aaa"
   Flip
Forever

Function Drawbutton(x,y,t$)
   Local ret:Int
   DrawImage pixel, MouseX(), MouseY()
   If ImagesCollide(Pixel,MouseX(),MouseY(),0,buttonimg,x,y,0)
      DrawImage buttonovimg, x, y
      ret = 1
   Else
      DrawImage buttonimg, x, y
   End If
   SetColor 0,0,0
   DrawText t$,x-TextWidth(t$)/2,y-TextHeight(t$)/2
   SetColor 255,255,255
   Return ret
End Function
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Dreamora

BeitragDo, Aug 09, 2007 8:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd sagen du bombst einfach blödsinnig deinen RAM und VRAM zu mit 1000 * potentiell 256x32 texturen (40MB VRAM) und wartest vor allem nicht bis die Texturen wirklich upgeloaded sind.
Wenn du dem Problem ein wenig beikommen willst solltest du das ganze ein wenig geschickter aufbauen um deiner Grafikkarte nicht den Verstand zu rauben.

Versuchs mal mit einem

drawimage buttonimg,0,0
drawimage buttonovimg,400, 400
flip
cls


zwischen dem Laden der Bilder und der Loop

Und wenn das auch nix hilft, vor Graphics mal
SetGraphicsDriver( GLMax2DDriver() ) um auszuschliessen das deine Treiber mit DX7 Problemen haben (ATI Omega Mod zb)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Smily

BeitragDo, Aug 09, 2007 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich das mit dem drawimage beim Bilder laden mache geht es in dem von mir oben geposteten Beispiel auch.

aber in diesem code bringt das trotzdem nichts, ich habe immer noch den fehler. (komischerweise tritt der auch nur manchmal auf. Und manchmal geht es ohne probleme):
(Ich hab mal die bildgrößen dahintergeschrieben, falls es von relevaz sein sollte)

das hier ist jetzt die originale init.bmx aus meinem Projekt

(Vlt kann ich auf den Pixel ja auch verzichten. Nur Leider habe ich noch keine bmax-alternative für imagerectoverlap finden können)

Code: [AUSKLAPPEN]
'Variablen
Local gamemode:Int
Local backx:Int
Local bottomhigh:Int
Local tmpvar:Int
Local menubtnx:Int
Local sel:Int
'Stuff
Graphics 800,600
SetBlend alphablend
SetMaskColor 255,0,255

Local font:TImageFont = LoadImageFont("font.ttf",25,SMOOTHFONT)
SetImageFont font

'Bilder Laden
Local backimg1:Timage = LoadImage("img/sky.jpg") ' 800x600
Local backimg2:Timage = LoadImage("img/sky2.bmp",MaskedImage) ' 800x600
Local Bottomimg:Timage = LoadImage("img/bottom.bmp",Maskedimage) '256x90
AutoMidHandle 1
Global pixel:Timage=CreateImage(5,5)
Global buttonimg:Timage = LoadImage("img/button.png",Maskedimage) '285x73
Global Buttonovimg:Timage = LoadImage("img/buttonover.png",Maskedimage) '285x73


Function Drawbutton(x,y,t$)

   Local ret:Int
   DrawImage pixel, MouseX(), MouseY()
   If ImagesCollide(Pixel,MouseX(),MouseY(),0,buttonovimg,x,y,0)
      DrawImage buttonovimg, x, y
      ret = 1
   Else
      DrawImage buttonimg, x, y+5
   End If
   SetColor 0,0,0
   DrawText t$,x-TextWidth(t$)/2,y-TextHeight(t$)/2
   SetColor 255,255,255
   Return 1
End Function
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Dreamora

BeitragDo, Aug 09, 2007 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit den Bildgrössen beschwörst du Probleme herauf.
Denn Grafikkarten akzeptieren nur 2er Potenz Texturen.
Das heisst im Klartext das sie in BlitzMax intern erweitert werden, wobei 28X zu 512wird, und 7X zu 128 und dergleichen.

Das ist allerdings kein Grund das es nicht geht ausser du bist auf einer 4MB oder 8MB Grafikkarte.

Was ich eher als problem ansehe ist das du keine quadratischen Bilder hast, denn es gibt Grafikkarten die nicht quadratische Texturen ganz einfach nicht rendern.

BlitzMax erweitert zwar auf 2er Potenzen, bin mir jedoch nicht sicher ob es das im neuen DX Modul auch noch für quadratisch macht.

Hast du mal versucht den Max2D Treiber auf GLMax2DDriver() zu setzen?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Smily

BeitragDo, Aug 09, 2007 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja Treiber umstellen habe ich versucht. Ebenfalls ohne erfolg.

Ich habe mal mein komplettes Programm im Aktuellen fortschritt hochgeladen.
http://phpprogger.ph.funpic.de/uploads/prog.zip

auch ein delay 10 zwichen dem Laden der grafiken bringt nix.

mfg, Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

BladeRunner

Moderator

BeitragDo, Aug 09, 2007 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert bei mir einwandfrei (nachdem ich setgraphics vor graphics gesetzt habe...) sowohl ohne den Treiber zu setzen als auch mit.

EDIT: Und dein Tstprog rennt auch, wenn man ihm die 10 Sekunden gibt die es braucht um alle images zu erstellen.
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

Smily

BeitragDo, Aug 09, 2007 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm dann ist es wohl direkt ein problem mit meinem PC

Manchmal gibt die Abfrage bei mir immer 0 zurück:
if ImagesCollide(Pixel,MouseX(),MouseY(),0,buttonovimg,x,y,0)

Mal sehen, ob ich das Problem vielleicht irgendwie noch ganz anders lösen kann.

(... omg und das alles nur, weil ich prüfen möchte, ob sich die maus über dem Bild befindet o_O)

gruß, smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Dreamora

BeitragDo, Aug 09, 2007 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuchs mal mit der "neuen Art" mit Kollision zu arbeiten, also mit dem Schreiben und Lesen von Kollision. Dann kannst du für die Maus nämlich eine simple Rect Kollision nehmen Smile

Denn deine Buttons werden sich mit Garantie nicht ändern in ihrer Position, heisst alle Buttons 1x kollision zeichnen und maus nur read gegen den entsprechenden Kollisionslayer

Wenn du die alte "version" nimmst, dann wird immer wieder geschrieben und gelöscht.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group