Commit 54433341 authored by rockyl's avatar rockyl

修改zeroing

parent d7737d04
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -13,21 +13,25 @@ let stage = new render.Stage( ...@@ -13,21 +13,25 @@ let stage = new render.Stage(
//启动循环 //启动循环
render.Stage.flushAll(); render.Stage.flushAll();
let node = new render.Node(); let gameStage = new render.GameStage(stage);
node.width = 400;
console.log(node.width);
/*let gameStage = new render.GameStage(stage);
stage.addChild(gameStage); stage.addChild(gameStage);
let sceneEntry = new render.Container(); let sceneEntry = new render.Container();
let bg = new render.Shape(); sceneEntry.percentWidth = 100;
bg.beginFill(0xFF8888); sceneEntry.percentHeight = 100;
bg.drawRect(0, 0, 300, 300);
bg.endFill(); let bg = new render.Rect();
bg.percentWidth = 100;
bg.percentHeight = 100;
bg.fillColor = 'gray';
sceneEntry.addChild(bg); sceneEntry.addChild(bg);
gameStage.sceneContainer.push(sceneEntry);*/ let ball = new render.Circle();
ball.radius = 50;
ball.fillColor = 'green';
sceneEntry.addChild(ball);
gameStage.sceneContainer.push(sceneEntry);
/*let dialog = new render.Container(); /*let dialog = new render.Container();
let dbg = new render.Shape(); let dbg = new render.Shape();
......
...@@ -4,12 +4,13 @@ ...@@ -4,12 +4,13 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Document</title> <title>Document</title>
<meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" /> <meta name="viewport"
<meta name="apple-mobile-web-app-capable" content="yes" /> content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"/>
<meta name="full-screen" content="true" /> <meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="screen-orientation" content="portrait" /> <meta name="full-screen" content="true"/>
<meta name="x5-fullscreen" content="true" /> <meta name="screen-orientation" content="portrait"/>
<meta name="360-fullscreen" content="true" /> <meta name="x5-fullscreen" content="true"/>
<meta name="360-fullscreen" content="true"/>
<!-- <meta name="viewport" content="width=device-width,minimum-scale=1.0,user-scalable=no"> --> <!-- <meta name="viewport" content="width=device-width,minimum-scale=1.0,user-scalable=no"> -->
<style> <style>
html, html,
...@@ -35,14 +36,14 @@ ...@@ -35,14 +36,14 @@
<body> <body>
<script type="text/javascript" src="./build/render.min.js"></script> <script type="text/javascript" src="./build/render.min.js"></script>
<div id="cusEngine" style="line-height:0;font-size:0"></div> <div id="cusEngine" style="line-height:0;font-size:0"></div>
<script> <script>
var stage = new render.Stage( var stage = new render.Stage(
"cusEngine", "cusEngine",
750, 750,
1206, 1334,
60, 60,
render.StageScaleMode.FIXED_WIDTH, render.StageScaleMode.FIXED_WIDTH,
render.RENDERER_TYPE.WEBGL render.RENDERER_TYPE.WEBGL
...@@ -50,13 +51,23 @@ ...@@ -50,13 +51,23 @@
//启动循环 //启动循环
render.Stage.flushAll(); render.Stage.flushAll();
stage.addChild(render.Sprite.from("./11.png")); let image = render.Sprite.from("./11.png");
image.anchorX = 100;
stage.addChild(image);
</script> /*let rect = new render.Shape();
rect.beginFill(0x00ffff);
rect.drawRect(0, 0, 100, 100);
rect.endFill();
rect.anchorX = 50;
//rect.x = 200;
//rect.y = 200;
stage.addChild(rect);*/
</script>
</body>
</body>
</html> </html>
\ No newline at end of file
import { DisplayObject } from './DisplayObject'; import {DisplayObject} from './DisplayObject';
import { Rectangle } from "../math/Rectangle"; import {Rectangle} from "../math/Rectangle";
import { Point } from '../math'; import {Point} from '../math';
import CanvasRenderer from '../renderers/CanvasRenderer'; import CanvasRenderer from '../renderers/CanvasRenderer';
import { Event } from "../events/Event" import {Event} from "../events/Event"
import { WebglRenderer } from '../renderers/WebglRenderer'; import {WebglRenderer} from '../renderers/WebglRenderer';
import {applyAutoAdjust} from "../../zeroing/auto-adjust";
/** /**
* 容器类 * 容器类
* @class * @class
* @extends DisplayObject * @extends DisplayObject
*/ */
@applyAutoAdjust
export default class Container extends DisplayObject { export default class Container extends DisplayObject {
/** /**
...@@ -549,9 +551,11 @@ export default class Container extends DisplayObject { ...@@ -549,9 +551,11 @@ export default class Container extends DisplayObject {
// } else { // } else {
// this.scale.x = 1; // this.scale.x = 1;
// } // }
if (this._width !== value) this.dispatchEvent(Event.RESIZE) if (this._width !== value) {
//子类有用,有_width,才需设置scaleX //子类有用,有_width,才需设置scaleX
this._width = value this._width = value;
this.dispatchEvent(Event.RESIZE);
}
} }
/** /**
...@@ -570,8 +574,10 @@ export default class Container extends DisplayObject { ...@@ -570,8 +574,10 @@ export default class Container extends DisplayObject {
// } else { // } else {
// this.scale.y = 1; // this.scale.y = 1;
// } // }
if (this._height !== value) this.dispatchEvent(Event.RESIZE) if (this._height !== value) {
this._height = value this._height = value;
this.dispatchEvent(Event.RESIZE);
}
} }
//全局遍历 //全局遍历
......
...@@ -327,7 +327,7 @@ export class Shape extends Sprite { ...@@ -327,7 +327,7 @@ export class Shape extends Sprite {
* @since 1.0.0 * @since 1.0.0
*/ */
public beginFill(color: number, alpha: number = 1): void { public beginFill(color: number, alpha: number = 1): void {
var sColor = getRGBA(hex2string(color), alpha); var sColor = typeof color === 'string' ? color : getRGBA(hex2string(color), alpha);
this._fill(sColor); this._fill(sColor);
} }
...@@ -398,7 +398,7 @@ export class Shape extends Sprite { ...@@ -398,7 +398,7 @@ export class Shape extends Sprite {
miter: number = 0, miter: number = 0,
alpha: number = 1 alpha: number = 1
): void { ): void {
var sColor = getRGBA(hex2string(color), alpha); var sColor = typeof color === 'string' ? color : getRGBA(hex2string(color), alpha);
this._stroke(sColor, lineWidth, cap, join, miter); this._stroke(sColor, lineWidth, cap, join, miter);
} }
......
...@@ -116,7 +116,6 @@ export class TextField extends Sprite { ...@@ -116,7 +116,6 @@ export class TextField extends Sprite {
this._textWidth = value; this._textWidth = value;
this.dirty = true; this.dirty = true;
} }
;
} }
public get textWidth(): number { public get textWidth(): number {
......
...@@ -18,7 +18,9 @@ export class GameStage extends Container { ...@@ -18,7 +18,9 @@ export class GameStage extends Container {
super(); super();
this._stage = stage; this._stage = stage;
stage.addEventListener(Event.RESIZE, this._onStageResize, this);
this['percentWidth'] = 100;
this['percentHeight'] = 100;
this.addChild(this._sceneContainer = new StackContainer()); this.addChild(this._sceneContainer = new StackContainer());
this.addChild(this._popupContainer = new StackContainer()); this.addChild(this._popupContainer = new StackContainer());
...@@ -37,10 +39,4 @@ export class GameStage extends Container { ...@@ -37,10 +39,4 @@ export class GameStage extends Container {
get popupContainer(): StackContainer { get popupContainer(): StackContainer {
return this._popupContainer; return this._popupContainer;
} }
private _onStageResize(e) {
const {desWidth, desHeight} = this._stage;
this.width = this._sceneContainer.width = this._popupContainer.width = desWidth;
this.height = this._sceneContainer.height = this._popupContainer.height = desHeight;
}
} }
...@@ -8,6 +8,13 @@ import {Container, DisplayObject} from "../2d/display"; ...@@ -8,6 +8,13 @@ import {Container, DisplayObject} from "../2d/display";
* 栈式视图容器 * 栈式视图容器
*/ */
export class StackContainer extends Container { export class StackContainer extends Container {
constructor(){
super();
this['percentWidth'] = 100;
this['percentHeight'] = 100;
}
/** /**
* 推入视图 * 推入视图
* @param view * @param view
......
...@@ -8,6 +8,8 @@ import {Event} from "../2d/events"; ...@@ -8,6 +8,8 @@ import {Event} from "../2d/events";
* 自适应数据 * 自适应数据
*/ */
export class AdjustData { export class AdjustData {
percentWidth: number = NaN;
percentHeight: number = NaN;
left: number = NaN; left: number = NaN;
top: number = NaN; top: number = NaN;
right: number = NaN; right: number = NaN;
...@@ -16,26 +18,101 @@ export class AdjustData { ...@@ -16,26 +18,101 @@ export class AdjustData {
verticalCenter: number = NaN; verticalCenter: number = NaN;
} }
function t(v) {
return !isNaN(v) && v !== null && v !== undefined;
}
/** /**
* 应用自适应 * 应用自适应
* @param ctor * @param ctor
*/ */
export function applyAutoAdjust(ctor: Function) { export function applyAutoAdjust(ctor: Function) {
let adjustData = new AdjustData();
ctor.prototype.afterConstructor = function () { ctor.prototype.afterConstructor = function () {
let adjustData = new AdjustData();
this.__sizeDirty = true;
this.adjustData = adjustData; this.adjustData = adjustData;
this.addEventListener(Event.RESIZE, this.__onResize, this); this.addEventListener(Event.ADDED_TO_STAGE, this.__onAddedToStage, this);
this.addEventListener(Event.REMOVED_FROM_STAGE, this.__onRemovedFromStage, this);
};
ctor.prototype.__onAddedToStage = function () {
this.parent.addEventListener(Event.RESIZE, this.__onResize, this);
this.addEventListener(Event.ENTER_FRAME, this.__onEnterFrame, this);
};
ctor.prototype.__onRemovedFromStage = function () {
this.parent.removeEventListener(Event.RESIZE, this.__onResize);
this.removeEventListener(Event.ENTER_FRAME, this.__onEnterFrame);
}; };
ctor.prototype.__onResize = function () { ctor.prototype.__onResize = function () {
console.log(this.width, this.height); this.__sizeDirty = true;
};
ctor.prototype.__onEnterFrame = function () {
if (this.__sizeDirty) {
this.__sizeDirty = false;
const that = this;
const {width: pWidth, height: pHeight} = this.parent;
const {width, height} = this;
const {percentWidth, percentHeight, left, top, right, bottom, horizonCenter, verticalCenter} = this.adjustData;
const applyPercentWidth = function () {
if (t(percentWidth)) {
that.width = pWidth * percentWidth / 100;
}
};
const applyPercentHeight = function () {
if (t(percentHeight)) {
that.height = pHeight * percentHeight / 100;
}
};
let pw = true, ph = true;
if (t(horizonCenter)) {
applyPercentWidth();
this.x = (pWidth - this.width) / 2 + horizonCenter;
} else {
if (t(left)) {
this.x = left;
if (t(right)) {
this.width = pWidth - left - right;
pw = false;
}
} else if (t(right)) {
this.x = pWidth - width - right;
}
if (pw) {
applyPercentWidth();
}
}
if (t(verticalCenter)) {
applyPercentHeight();
this.y = (pHeight - this.height) / 2 + verticalCenter;
} else {
if (t(top)) {
this.y = top;
if (t(bottom)) {
this.height = pHeight - top - bottom;
ph = false;
}
} else if (t(bottom)) {
this.y = pHeight - height - bottom;
}
if (ph) {
applyPercentHeight();
}
}
}
}; };
for (let key in adjustData) for (let key in new AdjustData())
Object.defineProperty(ctor.prototype, key, { Object.defineProperty(ctor.prototype, key, {
get: function () { get: function () {
return this.adjustData[key]; return this.adjustData[key];
}, },
set: function (v) { set: function (v) {
if (this.adjustData[key] !== v) {
this.adjustData[key] = v; this.adjustData[key] = v;
this.__sizeDirty = true;
}
}, },
enumerable: true, enumerable: true,
configurable: true configurable: true
......
/**
* Created by rockyl on 2018/11/9.
*
* 装饰器
*/
/**
* 属性修改时触发
* @param onModify
*/
export function fieldChanged(onModify) {
return function (target: any, key: string) {
const privateKey = '_' + key;
Object.defineProperty(target, key, {
enumerable: true,
get: function () {
return this[privateKey];
},
set: function (v) {
const oldValue = this[privateKey];
if (oldValue !== v) {
this[privateKey] = v;
onModify.apply(this, [v, key, oldValue]);
}
}
})
}
}
/**
* 属性变脏时设置宿主的dirty属性为true
*/
export const dirtyFieldDetector = fieldChanged(
function (value, key, oldValue) {
this['__fieldDirty'] = true;
}
);
/**
* 深度属性变脏时设置宿主的dirty属性为true
*/
export const deepDirtyFieldDetector = fieldChanged(
function (value, key, oldValue) {
const scope = this;
scope['__fieldDirty'] = true;
if (typeof value === 'object') {
value['onModify'] = function(){
scope['__fieldDirty'] = true;
};
}
}
);
/**
* 属性变脏时触发onModify方法
*/
export const dirtyFieldTrigger = fieldChanged(
function (value, key, oldValue) {
this['onModify'] && this['onModify'](value, key, oldValue);
}
);
/**
* 深入属性变脏时触发onModify方法
*/
export const deepDirtyFieldTrigger = fieldChanged(
function (value: any, key, oldValue) {
if (this['onModify']) {
this['onModify'](value, key, oldValue);
if (typeof value === 'object') {
value['onModify'] = this['onModify'];
}
}
}
);
...@@ -4,4 +4,4 @@ ...@@ -4,4 +4,4 @@
export * from './GameStage' export * from './GameStage'
export * from './StackContainer' export * from './StackContainer'
export * from './nodes' export * from './shapes'
\ No newline at end of file
/**
* Created by rockyl on 2019-11-06.
*/
import {Container} from "../../2d/display";
import {applyAutoAdjust} from "../auto-adjust";
/**
* 节点
*/
@applyAutoAdjust
export class Node extends Container {
}
/**
* Created by rockyl on 2019-11-06.
*/
export * from './Node'
/**
* Created by rockyl on 2019-11-06.
*/
import {Shape} from "..";
import {Event} from "../2d/events";
import {dirtyFieldDetector} from "./decorators";
/**
* 图形基类
*/
class ShapeBase extends Shape {
protected __fieldDirty = true;
@dirtyFieldDetector
fillColor: any = 0;
@dirtyFieldDetector
strokeColor: any = 0;
@dirtyFieldDetector
strokeWidth: number = 0;
constructor() {
super();
this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, this);
this.addEventListener(Event.RESIZE, this.onResize, this);
}
private onResize(e) {
this.__fieldDirty = true;
}
private onEnterFrame(e) {
if (this.__fieldDirty) {
this.__fieldDirty = false;
const {fillColor, strokeColor, strokeWidth} = this;
this.clear();
this.beginFill(fillColor);
if (strokeWidth > 0) {
this.beginStroke(strokeColor, strokeWidth);
}
this.redraw();
this.endFill();
if (strokeWidth > 0) {
this.endStroke();
}
}
}
protected redraw() {
}
}
/**
* 矩形
*/
export class Rect extends ShapeBase {
@dirtyFieldDetector
borderRadius: number = 0;
protected redraw() {
const {width, height, borderRadius,} = this;
if (borderRadius > 0) {
this.drawRoundRect(0, 0, width, height, borderRadius, borderRadius, borderRadius, borderRadius)
} else {
this.drawRect(0, 0, width, height);
}
}
}
/**
* 圆形
*/
export class Circle extends ShapeBase {
@dirtyFieldDetector
radius: number = 0;
protected redraw() {
super.redraw();
const {radius} = this;
this.drawCircle(radius, radius, radius);
}
}
...@@ -65,7 +65,6 @@ export declare class DisplayObject extends EventDispatcher { ...@@ -65,7 +65,6 @@ export declare class DisplayObject extends EventDispatcher {
mask: Graphics; mask: Graphics;
width: number; width: number;
height: number; height: number;
protected dispatchResizeEvent(): void;
private _components; private _components;
update(): void; update(): void;
addComponent(component: Component): void; addComponent(component: Component): void;
......
...@@ -29,8 +29,6 @@ export default class Sprite extends Container { ...@@ -29,8 +29,6 @@ export default class Sprite extends Container {
getLocalBounds(rect?: Rectangle): Rectangle; getLocalBounds(rect?: Rectangle): Rectangle;
hitTestPoint(globalPoint: Point, isMouseEvent?: boolean): any; hitTestPoint(globalPoint: Point, isMouseEvent?: boolean): any;
destroy(): void; destroy(): void;
width: number;
height: number;
anchorTexture: any; anchorTexture: any;
texture: Texture; texture: Texture;
static from(source: any): Sprite; static from(source: any): Sprite;
......
...@@ -81,8 +81,6 @@ export default class Graphics extends Container { ...@@ -81,8 +81,6 @@ export default class Graphics extends Container {
updateLocalBoundsSelf(): void; updateLocalBoundsSelf(): void;
private generateCanvasTexture; private generateCanvasTexture;
destroy(): void; destroy(): void;
width: number;
height: number;
private proccessHoles; private proccessHoles;
private addUvs; private addUvs;
private adjustUvs; private adjustUvs;
......
...@@ -24,11 +24,11 @@ module.exports = { ...@@ -24,11 +24,11 @@ module.exports = {
}, },
devtool: 'source-map', devtool: 'source-map',
plugins: [ plugins: [
new UglifyJSPlugin( /*new UglifyJSPlugin(
{ sourceMap: true } { sourceMap: true }
), new webpack.DefinePlugin({ ), new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production') 'process.env.NODE_ENV': JSON.stringify('production')
}) })*/
], ],
resolve: { resolve: {
extensions: ['.webpack.js', '.web.js', '.ts', '.js'] extensions: ['.webpack.js', '.web.js', '.ts', '.js']
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment