WindowWidth Question

Get help using Construct 2

Post » Fri May 03, 2013 10:26 pm

I have question about windowWidth parameter, I read couple of threads I could find but could not figure a solution.

ok so scenario is this, I have two TiledBG-s for health hud.
I want red one to be scaled to same size as playable window of the game (camera is fixed, does not move)

I used RedTiledBG.width=windowWidth

Then I have Health and Max Health, in event bellow I calculate what percentage of maxhealth is current health and then I translate this into hud.
so if current health is 40% of max health, width for GreenTiledBG will be 40% of RedTiledBG width, which is turn should be equal of playable window width.

this works well and correctly when fullscreen in browser is set to "Off"
but when its set to letterbox
something like this happens

I don't understand exactly whats going on here, but I know its being scaled somehow and windowWidth is behaving like it should from other threads.

But in my case what alternative can I use to accomplish my task? is there anyway to capture actual playable area window width? hellwalker2013-05-03 22:28:08
Posts: 138
Reputation: 2,795

Post » Sat May 11, 2013 11:24 am

Hi Hellwalker,

It seems to be a problem that affects only a certain group of people, who try to position elements at run-time ;-)

There is a solution to it posted, e.g. here:

but it's hard to find - and I found it very frustrating for a long time ;-)

In brief:
Create a global variables, e.g. ETWindowHeight, ETWindowWidth. Set them to the WindowHeight and Width as defined at edit time. From then on, use these to position your elements at runtime, rather than original variables.

I think it would be nice if a similar solution was built into the engine - or maybe it is, but I don't know where to find it? ;-)

Posts: 79
Reputation: 3,698

Post » Mon May 13, 2013 1:45 pm

Thanks Greg!
Posts: 138
Reputation: 2,795

Post » Mon May 13, 2013 2:18 pm

This is a common mistake. The window width is not the same as the viewport width.

Window width = number of browsers horizontally in the browser window
Viewport width = number of pixels showing horizontally in the layout, which is what you want.

Scaling the view affects the viewport width, but not the window width.

To get the viewport width, use ViewportRight("layer") - ViewportLeft("layer")
Scirra Founder
Posts: 23,254
Reputation: 183,557

Post » Fri Oct 25, 2013 4:42 am

Fairly new so please bear with me.

Goal: Non-ticking Grid Map that is always the height and width of the usable area inside a browser (cross device, cross resolution)

Basically I'll:
- AJAX load an XML of grid data
- use a 32x32 TiledBackground
- put Text objects in each grid box (destroy and re-create on resize)
- on panning I'll clear all the text and cycle through them setting text to values from the appropriate portion of the XML

So... No "real" panning, no scaling.

WindowWidth, WindowHeight, ViewportLeft, ViewportTop do not seem to wait for Browser Object On Resized to complete and even when I put delays in they still do not seem to be the actual width / height or top / left of the browser window.

I also see no way to dynamically set Layout or Viewport size or position.

Edit time Project Window Size and Layout Size don't seem to matter.

All browsers I've tested with seem to have the same issue.

Current settings:
Window Size 10,10 (since they don't seem to matter and want them dynamic anyway)
Fullscreen in browser: Crop
Enable WebGL: Off (strictly 2d canvas that I want to be fast response)

Scale Rate: 0
Parallax: 100,100 (since I can't turn it off?)
Parallax in editor: No

Unbounded scrolling: No
Layout Size: 10, 10
Margins: 0, 0

Currently I call a "DrawScreen" function from 2 events
- System: On Start of Layout
- Browser: On Resized

This "mostly" works but seems to be % off (10 to 100 pixels depending on browser window size)

Also, when I put logging in, the dimension variables don't "settle" immediately.
Posts: 1
Reputation: 127

Return to How do I....?

Who is online

Users browsing this forum: 99Instances2Go and 2 guests