修复Vector2.zero引起的引用混乱问题

This commit is contained in:
yhh
2020-08-26 19:56:48 +08:00
parent 1997b3f348
commit e81f98ff17
33 changed files with 1663 additions and 4645 deletions
-4
View File
@@ -31,10 +31,6 @@
"name": "framework",
"path": "./libs/framework"
},
{
"name": "long",
"path": "./libs/long"
},
{
"name": "fairygui",
"path": "./libs/fairygui"
+80 -41
View File
@@ -103,10 +103,6 @@ declare module es {
}
declare module es {
class Vector2 {
private static readonly unitYVector;
private static readonly unitXVector;
private static readonly unitVector2;
private static readonly zeroVector2;
x: number;
y: number;
constructor(x?: number, y?: number);
@@ -202,6 +198,7 @@ declare module es {
_nextScene: Scene;
_sceneTransition: SceneTransition;
_globalManagers: GlobalManager[];
_timerManager: TimerManager;
constructor();
static readonly Instance: Core;
_scene: Scene;
@@ -210,6 +207,7 @@ declare module es {
static registerGlobalManager(manager: es.GlobalManager): void;
static unregisterGlobalManager(manager: es.GlobalManager): void;
static getGlobalManager<T extends es.GlobalManager>(type: any): T;
static schedule(timeInSeconds: number, repeats: boolean, context: any, onTime: (timer: ITimer) => void): Timer;
onOrientationChanged(): void;
draw(): Promise<void>;
startDebugUpdate(): void;
@@ -376,6 +374,7 @@ declare module es {
onDeactive(): void;
begin(): void;
end(): void;
updateResolutionScaler(): void;
update(): void;
render(): void;
postRender(): void;
@@ -478,10 +477,6 @@ declare module es {
}
}
declare module es {
enum CameraStyle {
lockOn = 0,
cameraWindow = 1
}
class CameraInset {
left: number;
right: number;
@@ -493,20 +488,11 @@ declare module es {
_areMatrixedDirty: boolean;
_areBoundsDirty: boolean;
_isProjectionMatrixDirty: boolean;
followLerp: number;
deadzone: Rectangle;
focusOffset: Vector2;
mapLockEnabled: boolean;
mapSize: Rectangle;
_targetEntity: Entity;
_targetCollider: Collider;
_desiredPositionDelta: Vector2;
_cameraStyle: CameraStyle;
_worldSpaceDeadZone: Rectangle;
constructor(targetEntity?: Entity, cameraStyle?: CameraStyle);
constructor();
position: Vector2;
rotation: number;
_zoom: any;
rawZoom: number;
_zoom: number;
zoom: number;
_minimumZoom: number;
minimumZoom: number;
@@ -520,25 +506,20 @@ declare module es {
readonly inverseTransformMatrix: Matrix2D;
_origin: Vector2;
origin: Vector2;
onSceneSizeChanged(newWidth: number, newHeight: number): void;
setInset(left: number, right: number, top: number, bottom: number): Camera;
setPosition(position: Vector2): this;
setRotation(rotation: number): Camera;
setZoom(zoom: number): Camera;
setMinimumZoom(minZoom: number): Camera;
setMaximumZoom(maxZoom: number): Camera;
forceMatrixUpdate(): void;
onEntityTransformChanged(comp: transform.Component): void;
zoomIn(deltaZoom: number): void;
zoomOut(deltaZoom: number): void;
worldToScreenPoint(worldPosition: Vector2): Vector2;
screenToWorldPoint(screenPosition: Vector2): Vector2;
onSceneRenderTargetSizeChanged(newWidth: number, newHeight: number): void;
mouseToWorldPoint(): Vector2;
onAddedToEntity(): void;
update(): void;
clampToMapSize(position: Vector2): Vector2;
updateFollow(): void;
follow(targetEntity: Entity, cameraStyle?: CameraStyle): void;
setCenteredDeadzone(width: number, height: number): void;
protected updateMatrixes(): void;
}
}
@@ -561,6 +542,35 @@ declare module es {
free(component: T): void;
}
}
declare module es {
enum CameraStyle {
lockOn = 0,
cameraWindow = 1
}
class FollowCamera extends Component {
camera: Camera;
followLerp: number;
deadzone: Rectangle;
focusOffset: Vector2;
mapLockEnabled: boolean;
mapSize: Rectangle;
_targetEntity: Entity;
_targetCollider: Collider;
_desiredPositionDelta: Vector2;
_cameraStyle: CameraStyle;
_worldSpaceDeadZone: Rectangle;
private rectShape;
constructor(targetEntity?: Entity, camera?: Camera, cameraStyle?: CameraStyle);
onAddedToEntity(): void;
onGraphicsDeviceReset(): void;
update(): void;
debugRender(): void;
clampToMapSize(position: Vector2): Vector2;
follow(targetEntity: Entity, cameraStyle?: CameraStyle): void;
updateFollow(): void;
setCenteredDeadzone(width: number, height: number): void;
}
}
declare module es {
class IUpdatableComparer {
compare(a: Component, b: Component): number;
@@ -849,9 +859,14 @@ declare module es {
}
declare module es {
class CircleCollider extends Collider {
private rectShape;
private circleShape;
private pixelShape1;
private pixelShape2;
constructor(radius?: number);
radius: number;
setRadius(radius: number): CircleCollider;
debugRender(): void;
toString(): string;
}
}
@@ -1594,8 +1609,8 @@ declare module es {
add(x: number, y: number, list: Collider[]): void;
remove(obj: Collider): void;
tryGetValue(x: number, y: number): Collider[];
getKey(x: number, y: number): string;
clear(): void;
private getKey;
}
class RaycastResultParser {
hitCounter: number;
@@ -2162,17 +2177,6 @@ declare module es {
static free<T>(obj: Array<T>): void;
}
}
declare const THREAD_ID: string;
declare const nextTick: (fn: any) => void;
declare class LockUtils {
private _keyX;
private _keyY;
private setItem;
private getItem;
private removeItem;
constructor(key: any);
lock(): Promise<{}>;
}
declare module es {
class Pair<T> {
first: T;
@@ -2321,8 +2325,6 @@ declare module es {
width: number;
enabled: true;
showLog: boolean;
private _frameKey;
private _logKey;
private _logs;
private sampleFrames;
private _position;
@@ -2334,6 +2336,12 @@ declare module es {
private _markerNameToIdMap;
private _updateCount;
private _frameAdjust;
private _rectShape1;
private _rectShape2;
private _rectShape3;
private _rectShape4;
private _rectShape5;
private _rectShape6;
constructor();
static readonly Instance: TimeRuler;
startFrame(): void;
@@ -2461,3 +2469,34 @@ declare module es {
constructor(texture: egret.Texture, id: string);
}
}
declare module es {
interface ITimer {
context: any;
stop(): any;
reset(): any;
getContext<T>(): T;
}
}
declare module es {
class Timer implements ITimer {
context: any;
_timeInSeconds: number;
_repeats: boolean;
_onTime: (timer: ITimer) => void;
_isDone: boolean;
_elapsedTime: number;
getContext<T>(): T;
reset(): void;
stop(): void;
tick(): boolean;
initialize(timeInsSeconds: number, repeats: boolean, context: any, onTime: (timer: ITimer) => void): void;
unload(): void;
}
}
declare module es {
class TimerManager extends GlobalManager {
_timers: Timer[];
update(): void;
schedule(timeInSeconds: number, repeats: boolean, context: any, onTime: (timer: ITimer) => void): Timer;
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
-1092
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-1
View File
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -9,16 +9,15 @@
"libs/modules/promise/promise.js",
"libs/modules/dragonBones/dragonBones.js",
"libs/framework/framework.js",
"libs/long/long.js",
"libs/fairygui/fairygui.js"
],
"game": [
"bin-debug/Fgui/common/commonBinder.js",
"bin-debug/UI/mvc/BaseView.js",
"bin-debug/SampleHelpers/SampleScene.js",
"bin-debug/Scenes/Ninja Adventure/ProjectileHitDetector.js",
"bin-debug/UI/loading/LoadingView.js",
"bin-debug/Scenes/LineCasting/LineCastingScene.js",
"bin-debug/Fgui/common/UI_com_tips.js",
"bin-debug/Fgui/loading/loadingBinder.js",
"bin-debug/Fgui/loading/UI_View_loading.js",
"bin-debug/Fgui/sc/scBinder.js",
@@ -32,11 +31,12 @@
"bin-debug/Main.js",
"bin-debug/Scenes/Ninja Adventure/Ninja.js",
"bin-debug/Scenes/Ninja Adventure/NinjaAdventureScene.js",
"bin-debug/ThemeAdapter.js",
"bin-debug/UI/PopManager.js",
"bin-debug/UI/loading/LoadingControl.js",
"bin-debug/UI/loading/LoadingEvents.js",
"bin-debug/ThemeAdapter.js",
"bin-debug/AssetAdapter.js",
"bin-debug/Fgui/common/UI_com_tips.js",
"bin-debug/UI/mvc/EventManager.js",
"bin-debug/UI/mvc/Extension.js",
"bin-debug/UI/mvc/FguiUtils.js",
-8
View File
@@ -5,7 +5,6 @@ module samples {
export class SampleScene extends es.Scene {
public static readonly screenSpaceRenderLayer = 999;
public canvas: SpriteRenderer;
public static _needsFullRender: boolean;
public _screenSpaceRenderer: ScreenSpaceRenderer;
@@ -23,13 +22,6 @@ module samples {
if (addExcludeRenderer)
this.addRenderer(new RenderLayerExcludeRenderer(0, SampleScene.screenSpaceRenderLayer));
this.canvas = this.createEntity("ui").addComponent(new SpriteRenderer());
this.canvas.renderLayer = SampleScene.screenSpaceRenderLayer;
this.setupSceneSelector();
}
public setupSceneSelector(){
}
}
}
+1 -1
View File
@@ -10,7 +10,7 @@ module samples {
private _pixelShape2: egret.Shape;
private _lineShape: egret.Shape;
private _pixelShape3: egret.Shape;
private _delayTime = 1;
private _delayTime = 0.2;
private _pressTime = 0;
private _canTouch = true;
@@ -2,14 +2,12 @@ module samples {
import CircleCollider = es.CircleCollider;
import Flags = es.Flags;
import SpriteRenderer = es.SpriteRenderer;
import ProjectileHitDetector = es.ProjectileHitDetector;
import FollowCamera = es.FollowCamera;
export class NinjaAdventureScene extends SampleScene {
constructor() {
super(true, true);
}
public initialize(): void {
super.initialize();
public async onStart() {
super.onStart();
let playerEntity = this.createEntity("player");
playerEntity.position = new es.Vector2(256, 224);
@@ -21,12 +19,22 @@ module samples {
// 移动到第1层 保证自己的图层不会如果增加攻击方式则不会攻击到自身
Flags.setFlagExclusive(collider.physicsLayer, 1);
this.camera.entity.addComponent(new FollowCamera(playerEntity));
this.content.loadRes("moon_png").then(moonTexture => {
let moonEntity = this.createEntity("moon");
moonEntity.position = new es.Vector2(412, 460);
moonEntity.addComponent(new SpriteRenderer(moonTexture));
moonEntity.addComponent(new ProjectileHitDetector());
moonEntity.addComponent(new CircleCollider());
});
}
public update(){
super.update();
this.findEntity("player").position.x -= es.Time.deltaTime * 10;
this.findEntity("player").position.y -= es.Time.deltaTime * 10;
}
}
}
@@ -0,0 +1,30 @@
module es {
/**
*
*/
export class ProjectileHitDetector extends Component implements ITriggerListener{
public hitsUntilDead: number = 10;
public _hitCounter: number;
public _sprite: SpriteRenderer;
public onAddedToEntity(): void {
this._sprite = this.entity.getComponent<SpriteRenderer>(SpriteRenderer);
}
public onTriggerEnter(other: es.Collider, local: es.Collider): any {
this._hitCounter ++;
if (this.hitsUntilDead >= this.hitsUntilDead){
this.entity.destroy();
return;
}
this._sprite.color = 0xFF0000;
Core.schedule(0.1, false, this, timer => {
this._sprite.color = 0x000000;
});
}
public onTriggerExit(other: es.Collider, local: es.Collider): any {
}
}
}