Skip to content

Commit d44f180

Browse files
committed
improve on resize
1 parent 259a2d1 commit d44f180

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
WIP parallax. Openfl for now. Could be agnostic later.
33

44
# TODO
5-
- [X] simple bg scrolling and zoom
5+
- [] simple bg scrolling and zoom
66
- [ ] make it configurable
77
- [ ] use json or xml config
88
- [ ] add parallax layer

src/Main.hx

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,18 @@ class Main extends Sprite
2323
var maxZoom:Float;
2424
var minZoom:Float;
2525
var zoom:Float;
26+
var preZoom:Float;
2627
var bgPos:Point;
28+
var imagePivot:Point;
2729

2830
public function new()
2931
{
3032
super();
3133

3234
zoom = 1;
3335

34-
//stage.displayState = StageDisplayState.FULL_SCREEN;
35-
36+
bgPos = new Point();
37+
imagePivot = new Point();
3638

3739
// Assets:
3840
var data = openfl.Assets.getBitmapData("img/background-full0000.png");
@@ -41,7 +43,8 @@ class Main extends Sprite
4143

4244
setZoomBounds();
4345

44-
bgPos = new Point();
46+
imagePivot.setTo(stage.stageWidth / 2, stage.stageHeight / 2);
47+
4548

4649
stage.addEventListener(MouseEvent.CLICK, onClick);
4750
stage.addEventListener(MouseEvent.MOUSE_WHEEL, onWheel);
@@ -54,38 +57,36 @@ class Main extends Sprite
5457
{
5558
//zoom bounds
5659
//to have fluid zoom
57-
minZoom = stage.stageHeight / image.height;
60+
minZoom = stage.stageHeight / (image.height / image.scaleY);
61+
trace("image height", image.height / image.scaleY, "stage", stage.stageHeight);
5862
deltaZoom = (1 - minZoom) / 2;
5963
maxZoom = 1;
6064
do {
6165
maxZoom += deltaZoom;
6266
}while (maxZoom < 1.2);
6367

64-
trace(minZoom, zoom, maxZoom);
6568
}
6669

6770
function onResize(e:Event):Void
6871
{
69-
trace("resize");
7072
setZoomBounds();
73+
var values = [for (i in 0...5) i * deltaZoom + minZoom];
74+
trace(values);
7175
//find closest zoom to current
72-
var closest = minZoom - deltaZoom;
73-
var temp = closest;
74-
var diff = 42.;
75-
do {
76-
temp += deltaZoom;
77-
if (zoom - temp < diff)
78-
{
79-
diff = zoom - temp;
80-
closest = temp;
81-
}
82-
}while (closest < maxZoom && diff != 0);
76+
var closest = 42.;
77+
for (item in values)
78+
{
79+
if ( Math.abs(item - zoom) < Math.abs(zoom - closest))
80+
closest = item;
81+
}
8382

8483
if (closest != zoom)
8584
{
85+
trace("resize", minZoom, "old", zoom, "closest", closest, maxZoom);
8686
zoom = closest;
87-
//apply zoom TODO
87+
applyZoom();
8888
}
89+
8990
}
9091

9192
function onReset(e:MouseEvent):Void
@@ -124,17 +125,23 @@ class Main extends Sprite
124125
}
125126
function onWheel(e:MouseEvent):Void
126127
{
127-
var preZoom = zoom;
128+
preZoom = zoom;
128129
zoom += e.delta/100 * deltaZoom;
129130
if (zoom > maxZoom)
130131
zoom = maxZoom;
131132
if (zoom < minZoom)
132133
zoom = minZoom;
134+
135+
imagePivot = image.globalToLocal(new Point(e.stageX, e.stageY));
133136

137+
applyZoom();
138+
139+
}
140+
141+
function applyZoom():Void
142+
{
134143
if (preZoom == zoom)
135144
return;
136-
137-
var imagePivot = image.globalToLocal(new Point(e.stageX, e.stageY));
138145

139146
var offsetX = image.x + imagePivot.x * preZoom - imagePivot.x * zoom;
140147
var offsetY = image.y + imagePivot.y * preZoom - imagePivot.y * zoom;
@@ -144,7 +151,6 @@ class Main extends Sprite
144151
checkBounds(bgPos, stage.stageWidth, stage.stageHeight, image.width, image.height);
145152
image.x = bgPos.x;
146153
image.y = bgPos.y;
147-
148154
}
149155

150156
function checkBounds(pt:Point, screenX:Int, screenY:Int, imageWidth:Float, imageHeight:Float):Void{

0 commit comments

Comments
 (0)