[Monkey] [HTML5] SetScissor und TMatrix (Fehler in Opera)
Übersicht

![]() |
HolzchopfMeisterpackerBetreff: [HTML5] SetScissor und TMatrix (Fehler in Opera) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Zusammen!
Mir ist aufgefallen, dass sich SetScissor im Zusammenhang mit einer Transformations-Matrix auf Opera nicht gleich verhält wie im FireFox und Chrome: Während zB: Chrome den Clip-Bereich mit skaliert und transformiert, muss man das in Opera händisch lösen ![]() Code: [AUSKLAPPEN] Import mojo
Extern Function Rescale:Int()="(function(){var canvas=document.getElementById('GameCanvas'); canvas.width=window.innerWidth; canvas.height=window.innerHeight;})" Public Function Main:Int() New Fullscreen End Function Global wscale:Float, hscale:Float, scale:Float Global width:Int, height:Int Global offx:Int, offy:Int Class Fullscreen Extends App Method OnCreate() SetUpdateRate(50) End Method Method OnUpdate:Int() End Method Method OnRender() Rescale() wscale = DeviceWidth / 640.0 hscale = DeviceHeight / 480.0 scale = Min(wscale, hscale) width = 640*scale height = 480*scale offx = (DeviceWidth-width)/2 offy = (DeviceHeight-height)/2 Cls(0,0,0) PushMatrix() Translate(offx, offy) Scale(scale, scale) SetScissor(0,0, 640,480) Cls(255,128,128) DrawRect(20,20,600,440) DrawText(DeviceWidth,20,200) DrawText(DeviceHeight,20,220) SetScissor(20,20,100,100) Cls(128,128,255) PopMatrix() End Method End Class Function SetScissor(pX:Int, pY:Int, pW:Int, pH:Int) ' Opera-Version 'graphics.SetScissor(pX*scale +offx, pY*scale +offy, pW*scale, pH*scale) ' Chrome-Version graphics.SetScissor(pX, pY, pW, pH) End Function Gibt es eine Möglichkeit, in Monkey irgendwie Browserweichen einzurichten? Oder existiert eine andere gangbare Lösung zu diesem Problem? MfG, Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Von Monkey verstehe ich nichts, aber in JavaScript sind Browserweichen möglich. Das navigator-Objekt, insbesondere navigator.userAgent, sollte hilfreich sein.
ZEVS |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm ja das sieht nach einer Lösung aus. Kennt sich jemand von euch mit Browserweichen aus? Sind die zuverlässig? Oder sind die nur dann zuverlässig, wenn man sie extrem aufbläht und alle erdenklichen user-agent-strings berücksichtigt?
Eine Alternative wäre es doch auch, alle Draw-Befehle und SetScissor so zu überladen, dass ich auf Scale und Transform ganz verzichten kann. Oder würde das Performance-Mässig zu viel Einbusse bedeuten? |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn es dir nur auf Opera ankommt, kannst du auch prüfen, ob ein Objekt namens "opera" existiert:
Code: [AUSKLAPPEN] if (typeof opera == "undefined") {
// normaler Code } else { // spezieller Opera-Code } Das sollte bei allen nicht museumsreifen Opera-Versionen funktionieren. Zudem halte ich es für unwahrscheinlich, dass ein anderer Browser ein solches Objekt definiert. Die Transformationsmatrix selbst anzuwenden, sollte m.E. aber performancemäßig gut gehen. Bei folgendem Code: [AUSKLAPPEN] var a = 0.1, b = -0.3, c = 7.0, d = 3.1, e = 99, f = -2;
for (var i = 0; i < 100000; i++) { var x = 5, y = 5; var x_ = x * a + y * b + c; y = x * d + y * e + f; x = x_; } merke ich nur eine geringe Laufzeit (<1s); und das sind 100 000 Matrix-Anwendungen. ZEVS |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh danke! Das ist eine weitaus einfachere Lösung, als den UserAgent-String zu prüfen =)
Mit dem selber anwenden meine ich eigentlich die Draw-Befehle, also, dass ich diese überlade, um auf die interne Matrix zu verzichten. Also Code: [AUSKLAPPEN] Function DrawImage(...)
graphics.DrawImage(pImg, x*scale+transx, y*scale+transy, 0, scale, scale, pFrame) End Function Etc... MfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group