Skip to content

Commit 778b2f2

Browse files
committed
fixed incorrect graphics transform
bump to 0.5.5
1 parent 25d938b commit 778b2f2

File tree

7 files changed

+123
-66
lines changed

7 files changed

+123
-66
lines changed

CHANGELOG.md

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,50 @@
11
Black Engine: Changelog
22
=======================
3-
v0.5.1
4-
------
3+
4+
# v0.5.5
5+
### New features
6+
- Added support for Black Vector Graphics (beta)
7+
- Added orientation lock support
8+
- Added Graphics to optionally accept either string or GraphicsData instance
9+
- Added skew via `skewX` and `skewY` properties in the `DisplayObject`
10+
- Added support for 9 grid slice
11+
- Added sprite tiling support
12+
- Added sprite wrapping support
13+
- Added [svg2bvg](https://github.com/MassiveHeights/svg2bvg) tool which converts SVG files into BVG
14+
- Added [bsa-gen](https://github.com/MassiveHeights/bsa-gen) tool to generate sound atlases from multiple audio files
15+
- Added Timer component
16+
- Added `GameObject#relativeTo` method to calculates GameObject's position relative to another GameObject
17+
- Added `Graphics#quadraticCurveTo` method
18+
- Added `Graphics#setLineDash` method
19+
- Added optional param `isNonZero` for `Graphics#fill` method to control winding order
20+
- Added `GraphicsData` class. Now you can have many graphics objects inside one Graphics GameObject.
21+
22+
### Changes
23+
- Graphics internally changed and now supports nested graphics via GraphicsData object
24+
- Changed Black Texture Atlas format to support version number (internal)
25+
26+
### Bug Fixes
27+
- Fixed incorrect font bounds on different platforms by changing the way how its calculated. Now it checks font height using `pixel by pixel` method. Line height is a bit smaller from now. But overall font metrics looks good and exactly the same on different browsers.
28+
29+
### Examples & Docs
30+
- Added tutorial about how to use "bsa-gen" tool to generate sound atlas
31+
- Added tutorial about how to use "svg2bvg" tool and vector graphics in your app
32+
- Added tutorial about how to use texture atlases
33+
- Added 3 timer examples
34+
- Added "Vector As a Sprite"
35+
- Added "Orientation Lock" example
36+
- Added "Texture Repeat" example
37+
- Added "Slice 9 Grid" example
38+
- Added "Skew" example
39+
40+
# v0.5.1
541
- Fixed broken `visible` property
642
- Fixed broken overhearing
743
- Fixed missing `Stage#onUpdate` calls
844
- Added `TextField#highQuality` property to control how TextField will be rendered
945
- Added many tests
1046

11-
v0.5.0
12-
------
47+
# v0.5.0
1348
- Added Arcade physics system
1449
- Added `Black.ups` property to control number of updates per second (render goes as fast as it can)
1550
- Added `Time.alpha` - indicates how much time has been passed since last update in range from 0 to 1
@@ -23,8 +58,7 @@ v0.5.0
2358
- Fixed missing onRemoved call when removing children within onRemoved method
2459
- Improved `getBounds` performance for clipped objects
2560

26-
v0.4.0
27-
------
61+
# v0.4.0
2862
- Graphics reworked (now it has bounds and API similar to HTML canvas)
2963
- `AssetManager` dramatically improved
3064
- TextField now posts `change` message when text is changed
@@ -41,8 +75,7 @@ v0.3.5
4175
- Added `Input.once` method
4276
- Added `Glob` class
4377

44-
v0.3.42
45-
-------
78+
# v0.3.42
4679
- Added `Black#hasSystem` method
4780
- Added `GameObject.scale` property
4881
- Added `GameObject.getStageBounds` helper method
@@ -67,12 +100,10 @@ v0.3.42
67100
- Removed `VideoNullDriver.renderResolution`
68101
- Minor refactoring
69102

70-
v0.3.41
71-
-------
103+
# 0.3.41
72104
- Fixed incorrect alignPivot and alignPivotOffset
73105

74-
v0.3.4
75-
------
106+
# 0.3.4
76107
- Added BitmapTextField
77108
- Added Audio support (spatial, audio atlas, sound effects)
78109
- Added Stage, stage scale modes and orientations
@@ -97,16 +128,14 @@ v0.3.4
97128
- Removed pivotX/pivotY, use pivotOffsetX/pivotOffsetY instead
98129
- Typed 95% for GCC
99130

100-
v0.0.12a
101-
--------
131+
# v0.0.12a
102132
- Fixed TextField align issues caused by new pivot logic
103133
- Fixed DOMDriver align issues caused by new pivot logic
104134
- Fixed `Matrix::translate` broken logic
105135
- Changed `VideoDriver::DrawImage` now accepts bounds
106136
- Minor jsdoc fixess
107137

108-
v0.0.11a
109-
--------
138+
# v0.0.11a
110139
- Reworked `Input`
111140
- Now `Input` is single target system
112141
- Added `pointerIn` and `pointerOut` messages
@@ -125,8 +154,7 @@ v0.0.11a
125154
- Updated `Viewport`, now it will automatically add missing CSS styles on start.
126155

127156

128-
v0.0.10a
129-
--------
157+
# v0.0.10a
130158
- Added dist folder to github
131159
- Added `touchable` to the `Sprite`
132160
- Fixed package.json version mess
@@ -135,6 +163,5 @@ v0.0.10a
135163
- Moved examples to external repo
136164
- Renamed `Assert` to `Debug`
137165

138-
v0.0.8a
139-
------------------------
166+
# v0.0.8a
140167
- Initial commit

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "black",
3-
"version": "0.5.1",
3+
"version": "0.5.5",
44
"description": "",
55
"main": "dist/black-es6-module.js",
66
"directories": {},

src/display/Graphics.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
*/
77

88
/* @echo EXPORT */
9-
109
class Graphics extends DisplayObject {
1110
/**
1211
* Creates new Graphics instance.

src/display/Sprite.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class Sprite extends DisplayObject {
4646
*
4747
* @protected
4848
* @param {Rectangle=} outRect Rectangle to be returned.
49-
* @return {Rectangle} The new Rectangle or outRect with .
49+
* @return {Rectangle} The new Rectangle or outRect if it was passed as a param.
5050
*/
5151
onGetLocalBounds(outRect = undefined) {
5252
outRect = outRect || new Rectangle();

src/drivers/Renderer.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,43 @@ class Renderer {
102102
render(driver, session) {
103103
}
104104

105+
// checkMask(driver, session) {
106+
// let gameObject = /** @type {DisplayObject} */ (this.gameObject);
107+
// return gameObject.mMask !== null && gameObject.mMask.mAdded && session.isMasking === false;
108+
// }
109+
110+
// renderMask(driver, session) {
111+
// let gameObject = /** @type {DisplayObject} */ (this.gameObject);
112+
113+
// const sf = Black.stage.scaleFactor;
114+
115+
// let leftBounds = gameObject.bounds;
116+
// let left = new CanvasRenderTexture(leftBounds.width, leftBounds.height, 1);
117+
118+
// let rightBounds = gameObject.mMask.bounds;
119+
// let right = new CanvasRenderTexture(rightBounds.width, rightBounds.height, 1);
120+
121+
// let leftMatrix = new Matrix();
122+
// leftMatrix.set(1, 0, 0, 1, ~~(-leftBounds.x * sf - Black.stage.mX), ~~(-leftBounds.y * sf - Black.stage.mY));
123+
124+
// let rightMatrix = new Matrix();
125+
// rightMatrix.set(1, 0, 0, 1, ~~(-rightBounds.x * sf - Black.stage.mX), ~~(-rightBounds.y * sf - Black.stage.mY));
126+
127+
// driver.render(gameObject, left, leftMatrix, true);
128+
// driver.render(gameObject.mMask, right, rightMatrix, true);
129+
130+
// let transform = gameObject.worldTransformation;
131+
132+
// driver.setTransform(gameObject.mMask.worldTransformation);
133+
// driver.drawTexture(right);
134+
135+
// driver.setGlobalBlendMode(BlendMode.MASK);
136+
137+
// driver.setTransform(transform);
138+
// driver.drawTexture(left);
139+
140+
// }
141+
105142
/**
106143
* Called after all children objects got rendered.
107144
*

src/drivers/canvas/GraphicsRendererCanvas.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ class GraphicsRendererCanvas extends GraphicsRenderer {
6666
const py = node.mPivotY;
6767

6868
transform = transform.clone().append(node.mTransform);
69-
const m = transform.data;
70-
ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]);
69+
driver.setTransform(transform);
7170

7271
for (let i = 0; i < len; i++) {
7372
const cmd = commands[i];

src/drivers/canvas/SpriteRendererCanvas.js

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -135,47 +135,42 @@ class SpriteRendererCanvas extends Renderer {
135135
let ctx = /** @type {CanvasDriver}*/ (driver).mCtx;
136136
let gameObject = /** @type {Sprite} */ (this.gameObject);
137137

138-
// bake left and right nodes
139-
// blend them up with a source in/out bm
140-
//
141-
142-
143-
if (gameObject.mMask !== null && gameObject.mMask.mAdded && session.isMasking === false) {
144-
//needRestore = true;
145-
const sf = Black.stage.scaleFactor;
146-
147-
let leftBounds = gameObject.bounds;
148-
let left = new CanvasRenderTexture(leftBounds.width, leftBounds.height, 1);
149-
150-
let rightBounds = gameObject.mMask.bounds;
151-
let right = new CanvasRenderTexture(rightBounds.width, rightBounds.height, 1);
152-
153-
let leftMatrix = new Matrix();
154-
leftMatrix.set(1, 0, 0, 1, ~~(-leftBounds.x * sf - Black.stage.mX), ~~(-leftBounds.y * sf - Black.stage.mY));
155-
156-
let rightMatrix = new Matrix();
157-
rightMatrix.set(1, 0, 0, 1, ~~(-rightBounds.x * sf - Black.stage.mX), ~~(-rightBounds.y * sf - Black.stage.mY));
158-
159-
driver.render(gameObject, left, leftMatrix, true);
160-
driver.render(gameObject.mMask, right, rightMatrix, true);
161-
162-
//right.__dumpToDocument();
163-
164-
// drawImage left
165-
// drawImage right
166-
167-
let transform = gameObject.worldTransformation;
168-
169-
driver.setTransform(gameObject.mMask.worldTransformation);
170-
driver.drawTexture(right);
171-
172-
driver.setGlobalBlendMode(BlendMode.MASK);
173-
174-
driver.setTransform(transform);
175-
driver.drawTexture(left);
176-
177-
return;
178-
}
138+
139+
// if (super.checkMask(driver, session)) {
140+
// super.renderMask(driver, session);
141+
// return;
142+
// }
143+
144+
// if (gameObject.mMask !== null && gameObject.mMask.mAdded && session.isMasking === false) {
145+
// const sf = Black.stage.scaleFactor;
146+
147+
// let leftBounds = gameObject.bounds;
148+
// let left = new CanvasRenderTexture(leftBounds.width, leftBounds.height, 1);
149+
150+
// let rightBounds = gameObject.mMask.bounds;
151+
// let right = new CanvasRenderTexture(rightBounds.width, rightBounds.height, 1);
152+
153+
// let leftMatrix = new Matrix();
154+
// leftMatrix.set(1, 0, 0, 1, ~~(-leftBounds.x * sf - Black.stage.mX), ~~(-leftBounds.y * sf - Black.stage.mY));
155+
156+
// let rightMatrix = new Matrix();
157+
// rightMatrix.set(1, 0, 0, 1, ~~(-rightBounds.x * sf - Black.stage.mX), ~~(-rightBounds.y * sf - Black.stage.mY));
158+
159+
// driver.render(gameObject, left, leftMatrix, true);
160+
// driver.render(gameObject.mMask, right, rightMatrix, true);
161+
162+
// let transform = gameObject.worldTransformation;
163+
164+
// driver.setTransform(gameObject.mMask.worldTransformation);
165+
// driver.drawTexture(right);
166+
167+
// driver.setGlobalBlendMode(BlendMode.MASK);
168+
169+
// driver.setTransform(transform);
170+
// driver.drawTexture(left);
171+
172+
// return;
173+
// }
179174

180175

181176
let texture = Renderer.getColoredTexture(gameObject.mTexture, this.color);

0 commit comments

Comments
 (0)