修复Vector2.zero引起的引用混乱问题
This commit is contained in:
@@ -31,10 +31,6 @@
|
||||
"name": "framework",
|
||||
"path": "./libs/framework"
|
||||
},
|
||||
{
|
||||
"name": "long",
|
||||
"path": "./libs/long"
|
||||
},
|
||||
{
|
||||
"name": "fairygui",
|
||||
"path": "./libs/fairygui"
|
||||
|
||||
Vendored
+80
-41
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+450
-294
File diff suppressed because it is too large
Load Diff
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
-1092
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Vendored
-1
File diff suppressed because one or more lines are too long
+3
-3
@@ -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",
|
||||
|
||||
@@ -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(){
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user