Commit 23e71e8f authored by wjf's avatar wjf

l

parent c029f17f
...@@ -493,6 +493,13 @@ export class EventDispatcher extends HashObject { ...@@ -493,6 +493,13 @@ export class EventDispatcher extends HashObject {
* @return {boolean} 如果有则返回true * @return {boolean} 如果有则返回true
*/ */
hasEventListener(type: string, useCapture?: boolean): boolean; hasEventListener(type: string, useCapture?: boolean): boolean;
/**
* 清除某一类型的所有事件
* @param type
* @param useCapture true 捕获阶段 false 冒泡阶段 默认 true
* @return 返回自己
*/
removeAllEventListenerByType(type: string, useCapture?: boolean): this;
/** /**
* 移除对应类型的侦听 * 移除对应类型的侦听
* @method removeEventListener * @method removeEventListener
...@@ -3638,7 +3645,7 @@ export class Sprite extends Container { ...@@ -3638,7 +3645,7 @@ export class Sprite extends Container {
texture: Texture; texture: Texture;
tint: number; tint: number;
/** /**
* * 网络图片
* @param url * @param url
*/ */
static fromUrl(url: string): Sprite; static fromUrl(url: string): Sprite;
...@@ -3785,7 +3792,7 @@ export const premultiplyBlendMode: any[]; ...@@ -3785,7 +3792,7 @@ export const premultiplyBlendMode: any[];
export function uid(): number; export function uid(): number;
export const backupCanvas: HTMLCanvasElement; export function getBackupCanvasCtx(): CanvasRenderingContext2D;
export function getGradientColor(points: any, colors: any): any; export function getGradientColor(points: any, colors: any): any;
...@@ -6830,10 +6837,17 @@ export class Tween { ...@@ -6830,10 +6837,17 @@ export class Tween {
} }
export class Button extends Sprite { export class Button extends Sprite {
textureUp: any; private textureUp;
textureDown: any; private textureDown;
textureDisable: any; private textureDisable;
constructor(tUp: Texture, tDown?: Texture, tDisable?: Texture); constructor(tUp: Texture, tDown?: Texture, tDisable?: Texture);
/**
* 修改纹理
* @param tUp
* @param tDown
* @param tDisable
*/
changeTexture(tUp: Texture, tDown?: Texture, tDisable?: Texture): void;
/** /**
* @method _mouseEvent * @method _mouseEvent
* @param e * @param e
...@@ -6902,7 +6916,7 @@ export class FrameAni extends Container { ...@@ -6902,7 +6916,7 @@ export class FrameAni extends Container {
*/ */
constructor(texturesAll: Texture[]); constructor(texturesAll: Texture[]);
private count; private count;
onEnterFrame(): void; private onEnterFrame;
/** /**
* 从0开始播放 * 从0开始播放
*/ */
...@@ -6912,10 +6926,10 @@ export class FrameAni extends Container { ...@@ -6912,10 +6926,10 @@ export class FrameAni extends Container {
*/ */
reset(frame?: number): void; reset(frame?: number): void;
/** /**
* 改texture和居中 * 重置所有贴图,会置0停止,不设置播放,否则原先的play里的startTime及loop不好维护
* @param index * @param texturesAll
*/ */
private changeTexture; resetTexturesAll(texturesAll: Texture[]): void;
} }
export class ScrollPage extends Container { export class ScrollPage extends Container {
...@@ -7270,7 +7284,7 @@ export class MovieClip extends Container { ...@@ -7270,7 +7284,7 @@ export class MovieClip extends Container {
init(mv: any): void; init(mv: any): void;
private initChildren; private initChildren;
/** /**
* 用基础属性重置 * 用基础属性重置,废的
* @param display * @param display
* @param transform * @param transform
*/ */
...@@ -7999,5 +8013,4 @@ export var Stats: (canvasId: any) => { ...@@ -7999,5 +8013,4 @@ export var Stats: (canvasId: any) => {
update: () => void; update: () => void;
} }
export { Stats };} export { Stats };}
declare module "fyge" {export = FYGE;} \ No newline at end of file
\ No newline at end of file
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.
{ {
"name": "fyge-tbmini", "name": "fyge-tbmini",
"version": "1.2.5", "version": "1.3.2",
"description": "淘宝小程序canvas渲染引擎", "description": "淘宝小程序canvas渲染引擎",
"main": "./build/fyge.min.js", "main": "./build/fyge.min.js",
"types": "./build/FYGE.d.ts", "types": "./build/FYGE.d.ts",
......
...@@ -24,7 +24,44 @@ ...@@ -24,7 +24,44 @@
1.2.5 shape的点击事件,清除颜色前要先setTransform(1,0,0,1,0,0); 1.2.5 shape的点击事件,清除颜色前要先setTransform(1,0,0,1,0,0);
1.2.6 canvasGraphicsRenderer画洞时的for循环里有bug(j写成了i)
1.2.7 修改canvasGraphicsRenderer的holePath方法里的SHAPES.CIRC,先加moveTo;
canvasRenderTarget 修改,改变canvas宽度resize方法,宽高至少是1;
1.2.8 canvasRenderTarget还原修改,resize,否则可能有bug
1.2.9 button的changeTexture在禁用状态时贴图也要修改
EventDispatcher添加移除指定类型的所有事件removeAllEventListenerByType
1.3.0 canvasMaskManager修改pushMask,置零globalAlpha
frameAni修改,frameRate不判断必执行,否则默写修改过贴图集的会不生效
frameAni新增resetTexturesAll方法
frameAni去掉changeTexture方法,直接整合进currentFrame的set方法
1.3.2 Stage的webgl模式创建webgl上下文时添加属性
textField单行文本检测加入\r \r\n
container里removeChildren在不传参数时的修改
CanvasRenderTarget构造函数里添加clear方法,为了里面的clearRect,(淘宝canvas问题,绘制前必须调用过clearRect,否则有几率画不出来)
//TODO //TODO
Texture里的removeAllHandlers是否考虑加上tex.removeEventListener = function _emptyOn() { /* empty */ }; Texture里的removeAllHandlers是否考虑加上tex.removeEventListener = function _emptyOn() { /* empty */ };
bitmapText 考虑添加垂直居中方法(还没写),简单起见,没标记过dirty,所以有需要先设置对齐,再设置text bitmapText 考虑添加垂直居中方法(还没写),简单起见,没标记过dirty,所以有需要先设置对齐,再设置text
graphics的canvas模式渲染,会把子级的也缓存,现在做法,尽量不在矢量图添加子级 graphics的canvas模式渲染,会把子级的也缓存,现在做法,尽量不在矢量图添加子级
\ No newline at end of file
graphics的canvas模式有时候在小程序上画不出来,待检测,主要是rect
shape的beginFill待兼容"#ff0000"和"0xff0000"
ScrollPage在isSpringBack为false也做判断,触发SCROLL_TO_END或SCROLL_TO_HEAD事件
scrollList里不放数据时默认显示了一条(其实n条叠一起),待处理构造函数置空(需测试)
shape作为遮罩时并未计算过_localBoundSelf,导致遮罩加遮罩物的点击有问题,后续考虑分开计算_localBoundSelf,暂时手动执行updateShape()
svga的纹理考虑单独缓存在自己的数据里,不进TextureCache,movieClip的textures注意拷贝svga上的数据
多page上的canvas,存在资源干扰的情况,考虑RES单独缓存,不进TextureCache缓存,createTextureSheet也不缓存进TextureCache
淘宝小程序的canvas路径api没用非零环绕原则,必须逆时针绘制想绘制的,顺时针绘制镂空的
文本在fillText没修复前,空格用\t替代
\ No newline at end of file
...@@ -40,7 +40,8 @@ function compile(fileNames, options) { ...@@ -40,7 +40,8 @@ function compile(fileNames, options) {
; ;
// const content = `declare module FYGE{${allExports}}`; // const content = `declare module FYGE{${allExports}}`;
const content = `declare namespace FYGE{${allExports}}\ndeclare module "fyge" {export = FYGE;}`; // const content = `declare namespace FYGE{${allExports}}\ndeclare module "fyge" {export = FYGE;}`;
const content = `declare namespace FYGE{${allExports}}`;//不作为npm使用时还是去掉吧
fs.writeFileSync('build/FYGE.d.ts', content); fs.writeFileSync('build/FYGE.d.ts', content);
} }
......
...@@ -265,7 +265,8 @@ export default class Container extends DisplayObject { ...@@ -265,7 +265,8 @@ export default class Container extends DisplayObject {
* @param children 不传参数,表示全部移除 * @param children 不传参数,表示全部移除
*/ */
removeChildren<T extends DisplayObject>(...children: T[]): T[] { removeChildren<T extends DisplayObject>(...children: T[]): T[] {
if (!children.length) return this.spliceChildren(0); //待测试,arr.splice(0)会全部删除,arr.splice(0,undefined)不会,所以this.spliceChildren(0)下面执行的是splice(0,undefined)
if (!children.length) return this.spliceChildren(0, this.children.length);
children.forEach((child: T) => { this.removeChild(child); }) children.forEach((child: T) => { this.removeChild(child); })
return children return children
......
...@@ -503,7 +503,7 @@ export default class Sprite extends Container { ...@@ -503,7 +503,7 @@ export default class Sprite extends Container {
//一些静态类方法 //一些静态类方法
/** /**
* * 网络图片
* @param url * @param url
*/ */
static fromUrl(url: string): Sprite { static fromUrl(url: string): Sprite {
......
...@@ -165,7 +165,14 @@ export class Stage extends Container { ...@@ -165,7 +165,14 @@ export class Stage extends Container {
let context = canvas.getContext("2d"); let context = canvas.getContext("2d");
s.renderObj = new CanvasRenderer(context, canvas.width, canvas.height); s.renderObj = new CanvasRenderer(context, canvas.width, canvas.height);
} else { } else {
let context = canvas.getContext("webgl"); let context = canvas.getContext("webgl", {
alpha: true,
antialias: false,//抗锯齿尽量别开,耗性能
premultipliedAlpha: true, //一般png图片都不会预乘alpha,所以必为true,除非有些图集工具选择了premultipliedAlpha
stencil: true,
// preserveDrawingBuffer: this.options.preserveDrawingBuffer,//需要toDataUrl时要开
// powerPreference: this.options.powerPreference,
});
s.renderObj = new WebglRenderer(context, canvas.width, canvas.height); s.renderObj = new WebglRenderer(context, canvas.width, canvas.height);
} }
......
...@@ -246,6 +246,35 @@ export class EventDispatcher extends HashObject { ...@@ -246,6 +246,35 @@ export class EventDispatcher extends HashObject {
} }
return false; return false;
} }
/**
* 清除某一类型的所有事件
* @param type
* @param useCapture true 捕获阶段 false 冒泡阶段 默认 true
* @return 返回自己
*/
public removeAllEventListenerByType(type: string, useCapture: boolean = true): this {
let s = this;
if (useCapture) {
if (s.eventTypes[type] && s.eventTypes[type].length > 0) {
if (type.indexOf("onMouse") == 0) {
for (let j = 0; j < s.eventTypes[type].length; j++) {
s._changeMouseCount(type, false);
}
}
s.eventTypes[type] = [];
}
} else {
if (s.eventTypes1[type] && s.eventTypes1[type].length > 0) {
if (type.indexOf("onMouse") == 0) {
for (let j = 0; j < s.eventTypes1[type].length; j++) {
s._changeMouseCount(type, false);
}
}
s.eventTypes1[type] = [];
}
}
return s
}
/** /**
* 移除对应类型的侦听 * 移除对应类型的侦听
......
import { SHAPES } from '../../const'; import { SHAPES } from '../../const';
import { HashObject } from '../../HashObject'; import { HashObject } from '../../HashObject';
import {CanvasRenderer} from '../CanvasRenderer'; import { CanvasRenderer } from '../CanvasRenderer';
import Graphics from '../../graphics/Graphics'; import Graphics from '../../graphics/Graphics';
import GraphicsData from '../../graphics/GraphicsData'; import GraphicsData from '../../graphics/GraphicsData';
import { holePath, judgeCcw } from '../plugins/CanvasGraphicsRenderer'; import { holePath, judgeCcw } from '../plugins/CanvasGraphicsRenderer';
...@@ -27,6 +27,7 @@ export default class CanvasMaskManager extends HashObject { ...@@ -27,6 +27,7 @@ export default class CanvasMaskManager extends HashObject {
pushMask(maskData: Graphics) { pushMask(maskData: Graphics) {
const renderer = this.renderer; const renderer = this.renderer;
renderer.context.save(); renderer.context.save();
renderer.context.globalAlpha = 0;//得加上,不绘制
const transform = maskData.transform.worldMatrix; const transform = maskData.transform.worldMatrix;
renderer.context.setTransform( renderer.context.setTransform(
transform.a, transform.a,
......
import {CanvasRenderer} from '../CanvasRenderer'; import { CanvasRenderer } from '../CanvasRenderer';
import { SHAPES } from '../../const'; import { SHAPES } from '../../const';
import Graphics from '../../graphics/Graphics'; import Graphics from '../../graphics/Graphics';
import GraphicsData from '../../graphics/GraphicsData'; import GraphicsData from '../../graphics/GraphicsData';
...@@ -143,7 +143,7 @@ export class CanvasGraphicsRenderer { ...@@ -143,7 +143,7 @@ export class CanvasGraphicsRenderer {
//有洞的话,洞的路径需反向,必须闭合,上面一般图形都是顺时针 //有洞的话,洞的路径需反向,必须闭合,上面一般图形都是顺时针
for (let j = 0; j < data.holes.length; j++) { for (let j = 0; j < data.holes.length; j++) {
holePath(data.holes[i], context, ccw) holePath(data.holes[j], context, ccw)
} }
if (fillStyle.visible) { if (fillStyle.visible) {
...@@ -220,6 +220,7 @@ export function holePath(graphicsData: GraphicsData, context: CanvasRenderingCon ...@@ -220,6 +220,7 @@ export function holePath(graphicsData: GraphicsData, context: CanvasRenderingCon
} }
break; break;
case SHAPES.CIRC: case SHAPES.CIRC:
context.moveTo(shape.x + shape.radius, shape.y);//得先加这个
context.arc(shape.x, shape.y, shape.radius, 0, 2 * Math.PI, ccw); context.arc(shape.x, shape.y, shape.radius, 0, 2 * Math.PI, ccw);
break; break;
case SHAPES.ELIP: case SHAPES.ELIP:
......
...@@ -27,7 +27,8 @@ export default class CanvasRenderTarget { ...@@ -27,7 +27,8 @@ export default class CanvasRenderTarget {
this.resize(width, height);//要先设置尺寸? this.resize(width, height);//要先设置尺寸?
this.context = this.canvas.getContext('2d'); this.context = this.canvas.getContext('2d');
// console.log("rd",this.context) // console.log("rd",this.context)
this.resize(width, height); this.resize(width, height);//为何要多加一次
this.clear();//淘宝canvas问题,绘制前必须调用过clearRect,否则就有几率绘制不出来
} }
/** /**
......
...@@ -516,7 +516,11 @@ export class TextField extends Sprite { ...@@ -516,7 +516,11 @@ export class TextField extends Sprite {
let textWidth = s._textWidth; let textWidth = s._textWidth;
// let lineH = s._lineSpacing + s.size; // let lineH = s._lineSpacing + s.size;
//单行文本时 //单行文本时
if (s._text.indexOf("\n") < 0 && s.lineType == TEXT_lINETYPE.SINGLE) { if (s._text.indexOf("\n") < 0 && //没有换行符
s._text.indexOf("\r") < 0 && //没有换行符
s._text.indexOf("\r\n") < 0 && //没有换行符
s.lineType == TEXT_lINETYPE.SINGLE //确定单行
) {
realLines[realLines.length] = hardLines[0]; realLines[realLines.length] = hardLines[0];
let str = hardLines[0]; let str = hardLines[0];
let lineW = s._getMeasuredWidth(str); let lineW = s._getMeasuredWidth(str);
......
...@@ -37,6 +37,10 @@ export class Button extends Sprite { ...@@ -37,6 +37,10 @@ export class Button extends Sprite {
//如果是点击状态时且有down //如果是点击状态时且有down
if (this._clicked && this.textureDown) { if (this._clicked && this.textureDown) {
this.texture = this.textureDown; this.texture = this.textureDown;
}
//禁用状态时
else if (!this.mouseEnable && !this.textureStatusEnable) {
this.texture = this.textureDisable;
} else { } else {
this.texture = this.textureUp; this.texture = this.textureUp;
} }
......
...@@ -19,7 +19,15 @@ export class FrameAni extends Container { ...@@ -19,7 +19,15 @@ export class FrameAni extends Container {
* 从0开始 锁步会跳帧 * 从0开始 锁步会跳帧
* 每一帧就是一张图片,从0开始 * 每一帧就是一张图片,从0开始
*/ */
private currentFrame: number; // private _currentFrame: number;//暂时只有不锁步时才需要,但是已经注释,需要时加get方法
private set currentFrame(value: number) {
if (this.texturesAll[value]) {
this.showImage.texture = this.texturesAll[value];
} else {
this.showImage.texture = null;
}
}
/** /**
* 所有帧数 * 所有帧数
*/ */
...@@ -54,7 +62,7 @@ export class FrameAni extends Container { ...@@ -54,7 +62,7 @@ export class FrameAni extends Container {
return this._frameRate return this._frameRate
} }
set frameRate(value: number) { set frameRate(value: number) {
if (value == this._frameRate) return // if (value == this._frameRate) return//注释掉吧,否则frameRate修改相同,但是texturesAll变了就执行不到了
this._frameRate = value; this._frameRate = value;
this.allTime = this.texturesAll.length / this._frameRate * 1000; this.allTime = this.texturesAll.length / this._frameRate * 1000;
} }
...@@ -68,14 +76,13 @@ export class FrameAni extends Container { ...@@ -68,14 +76,13 @@ export class FrameAni extends Container {
this.showImage.anchorTexture.set(0.5, 0.5); this.showImage.anchorTexture.set(0.5, 0.5);
this.addChild(this.showImage); this.addChild(this.showImage);
this.texturesAll = texturesAll; this.texturesAll = texturesAll;
this.changeTexture(0);
this.currentFrame = 0; this.currentFrame = 0;
this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, this) this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, this)
this.frameRate = 30; this.frameRate = 30;
} }
//需要做锁步 //需要做锁步
private count = 0; private count = 0;
onEnterFrame() { private onEnterFrame() {
if (!this.isPlay) { if (!this.isPlay) {
// this.count = 0 // this.count = 0
return return
...@@ -103,11 +110,9 @@ export class FrameAni extends Container { ...@@ -103,11 +110,9 @@ export class FrameAni extends Container {
} else { } else {
this.startTime = Date.now() this.startTime = Date.now()
this.currentFrame = 0; this.currentFrame = 0;
this.changeTexture(this.currentFrame);
} }
} else { } else {
this.currentFrame = (scale * this.texturesAll.length) >> 0; this.currentFrame = (scale * this.texturesAll.length) >> 0;
this.changeTexture(this.currentFrame);
} }
} }
/** /**
...@@ -117,7 +122,6 @@ export class FrameAni extends Container { ...@@ -117,7 +122,6 @@ export class FrameAni extends Container {
this.startTime = Date.now(); this.startTime = Date.now();
this.isPlay = true; this.isPlay = true;
this.currentFrame = 0; this.currentFrame = 0;
this.changeTexture(0);
this.loop = loop; this.loop = loop;
this.callback = callback; this.callback = callback;
} }
...@@ -127,21 +131,16 @@ export class FrameAni extends Container { ...@@ -127,21 +131,16 @@ export class FrameAni extends Container {
reset(frame: number = 0) { reset(frame: number = 0) {
this.isPlay = false; this.isPlay = false;
this.currentFrame = frame; this.currentFrame = frame;
this.changeTexture(frame);
} }
/** /**
* 改texture和居中 * 重置所有贴图,会置0停止,不设置播放,否则原先的play里的startTime及loop不好维护
* @param index * @param texturesAll
*/ */
private changeTexture(index: number) { resetTexturesAll(texturesAll: Texture[]) {
//考虑空帧的情况 this.texturesAll = texturesAll;
if (this.texturesAll[index]) { this.currentFrame = 0;
this.showImage.texture = this.texturesAll[index]; this.frameRate = 30;
// this.showImage.x = -this.texturesAll[index].width / 2;
// this.showImage.y = -this.texturesAll[index].height / 2;
} else {
this.showImage.texture = null;
}
} }
} }
\ No newline at end of file
...@@ -260,7 +260,7 @@ export class MovieClip extends Container { ...@@ -260,7 +260,7 @@ export class MovieClip extends Container {
} }
/** /**
* 用基础属性重置 * 用基础属性重置,废的
* @param display * @param display
* @param transform * @param transform
*/ */
......
...@@ -111,7 +111,7 @@ export function string2hex(string: string) { ...@@ -111,7 +111,7 @@ export function string2hex(string: string) {
if (string.indexOf("#") == 0) { if (string.indexOf("#") == 0) {
string = string.replace("#", "0x") string = string.replace("#", "0x")
} }
return parseInt(string) return parseInt(string)//到时改成+号
} }
/** /**
......
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