Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Z
zeroing-libs
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
劳工
zeroing-libs
Commits
2848e78e
Commit
2848e78e
authored
Dec 21, 2019
by
XieChuanJin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
换皮完成
parent
b812e83c
Changes
47
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
47 changed files
with
2722 additions
and
864 deletions
+2722
-864
index2.html
custom-emulator/index2.html
+1
-1
ShootPlanet.json
dist/customs/ShootPlanet.json
+222
-0
ShootPlanet.d.ts
libs/ShootPlanet.d.ts
+4
-0
Ball.ts
src/custom/ShootPlanet/Ball.ts
+117
-178
BoomEffect.ts
src/custom/ShootPlanet/BoomEffect.ts
+181
-0
Bullet.ts
src/custom/ShootPlanet/Bullet.ts
+62
-6
Car.ts
src/custom/ShootPlanet/Car.ts
+63
-61
Collider.ts
src/custom/ShootPlanet/Collider.ts
+7
-7
FrameAnimation.ts
src/custom/ShootPlanet/Component/FrameAnimation.ts
+119
-0
SpriteFont.ts
src/custom/ShootPlanet/Component/SpriteFont.ts
+124
-0
Drop.ts
src/custom/ShootPlanet/Drop.ts
+33
-32
EffectMgr.ts
src/custom/ShootPlanet/EffectMgr.ts
+68
-0
GUtils.ts
src/custom/ShootPlanet/GUtils.ts
+2
-2
Game.ts
src/custom/ShootPlanet/Game.ts
+92
-164
GameObject.ts
src/custom/ShootPlanet/GameObject.ts
+8
-48
GuideMask.ts
src/custom/ShootPlanet/GuideMask.ts
+55
-0
GuideMgr.ts
src/custom/ShootPlanet/GuideMgr.ts
+11
-15
JsonData.ts
src/custom/ShootPlanet/JsonData.ts
+305
-0
MConfigs.ts
src/custom/ShootPlanet/MConfigs.ts
+12
-5
MConst.ts
src/custom/ShootPlanet/MConst.ts
+3
-6
MEvent.ts
src/custom/ShootPlanet/MEvent.ts
+54
-0
MTimer.ts
src/custom/ShootPlanet/MTimer.ts
+79
-38
MTween.ts
src/custom/ShootPlanet/MTween.ts
+99
-43
DataMgr.ts
src/custom/ShootPlanet/Mgr/DataMgr.ts
+13
-0
DebugMgr.ts
src/custom/ShootPlanet/Mgr/DebugMgr.ts
+81
-48
DropBlinkMgr.ts
src/custom/ShootPlanet/Mgr/DropBlinkMgr.ts
+8
-3
TextureMgr.ts
src/custom/ShootPlanet/Mgr/TextureMgr.ts
+48
-0
MoveObject.ts
src/custom/ShootPlanet/MoveObject.ts
+2
-2
MovieClipMgr.ts
src/custom/ShootPlanet/MovieClipMgr.ts
+21
-18
NetUtils.ts
src/custom/ShootPlanet/NetUtils.ts
+0
-70
ParticleMgr.ts
src/custom/ShootPlanet/ParticleMgr.ts
+0
-33
PhycicsSystem.ts
src/custom/ShootPlanet/PhycicsSystem.ts
+40
-4
PlayerController.ts
src/custom/ShootPlanet/PlayerController.ts
+16
-6
Pool.ts
src/custom/ShootPlanet/Pool.ts
+13
-38
PoolMgr.ts
src/custom/ShootPlanet/PoolMgr.ts
+4
-4
BallPool.ts
src/custom/ShootPlanet/Pools/BallPool.ts
+37
-0
BoomEffectPool.ts
src/custom/ShootPlanet/Pools/BoomEffectPool.ts
+35
-0
BulletPool.ts
src/custom/ShootPlanet/Pools/BulletPool.ts
+17
-0
DropPool.ts
src/custom/ShootPlanet/Pools/DropPool.ts
+26
-0
ShootPlanet.ts
src/custom/ShootPlanet/ShootPlanet.ts
+50
-8
SoundMgr.ts
src/custom/ShootPlanet/SoundMgr.ts
+18
-20
SpBoomEffect.ts
src/custom/ShootPlanet/SpBoomEffect.ts
+149
-0
UILayer.ts
src/custom/ShootPlanet/UILayer.ts
+9
-0
meta.json
src/custom/ShootPlanet/meta.json
+212
-4
test.html
src/custom/ShootPlanet/test.html
+74
-0
test.json
src/custom/ShootPlanet/test.json
+125
-0
test.ts
src/custom/ShootPlanet/test.ts
+3
-0
No files found.
custom-emulator/index.html
→
custom-emulator/index
2
.html
View file @
2848e78e
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
<div
id=
"game-container"
style=
"line-height:0;font-size:0"
></div>
<div
id=
"game-container"
style=
"line-height:0;font-size:0"
></div>
<script
src=
"//res.wx.qq.com/open/js/jweixin-1.4.0.js"
></script>
<script
src=
"//res.wx.qq.com/open/js/jweixin-1.4.0.js"
></script>
<!--script src="http://localhost:4002/debug/engine.js"></script-->
<!--script src="http://localhost:4002/debug/engine.js"></script-->
<script
src=
"//yun.duiba.com.cn/editor/zeroing/libs/engine.
d253f569148b2343d5d6cc212e95f8237d52be24
.js"
></script>
<script
src=
"//yun.duiba.com.cn/editor/zeroing/libs/engine.
a55406676ddead0c1728d886fa14378bbf82d873
.js"
></script>
<script
src=
"app.js"
></script>
<script
src=
"app.js"
></script>
<script>
<script>
...
...
dist/customs/ShootPlanet.json
0 → 100644
View file @
2848e78e
This source diff could not be displayed because it is too large. You can
view the blob
instead.
libs/ShootPlanet.d.ts
View file @
2848e78e
...
@@ -10,4 +10,8 @@ declare namespace engine {
...
@@ -10,4 +10,8 @@ declare namespace engine {
interface
Point
{
interface
Point
{
length
:
number
;
length
:
number
;
}
}
interface
DisplayObject
{
destroy
():
void
;
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/Ball.ts
View file @
2848e78e
This diff is collapsed.
Click to expand it.
src/custom/ShootPlanet/BoomEffect.ts
0 → 100644
View file @
2848e78e
import
{
MConst
}
from
"./MConst"
;
import
{
MUtils
}
from
"./MUtils"
;
import
{
MTween
}
from
"./MTween"
;
import
{
TextureMgr
}
from
"./Mgr/TextureMgr"
;
import
{
PoolElement
,
Pool
,
PoolGroup
}
from
"./Pool"
;
const
BoomEffectDuration
=
400
;
const
DefaultRingWidth
=
672
;
export
default
class
BoomEffect
{
constructor
(
position
:
engine
.
Point
,
parent
:
engine
.
Container
,
colorIndex
:
number
,
size
:
number
)
{
let
range
=
MConst
.
DefaultBallWidth
*
1.5
*
size
;
for
(
let
i
=
0
;
i
<=
7
;
i
++
)
{
const
star
=
spritePool
.
spwan
(
"star"
,
colorIndex
);
parent
.
addChild
(
star
);
const
randomMax
=
0.5
+
(
size
-
0.3125
)
/
2
;
const
scale
=
MUtils
.
random
(
randomMax
-
0.64
*
size
,
randomMax
);
star
.
width
=
MConst
.
DefaultStarSize
.
width
*
scale
;
star
.
height
=
MConst
.
DefaultStarSize
.
height
*
scale
;
star
.
x
=
position
.
x
;
star
.
y
=
position
.
y
;
MTween
.
get
(
star
)
.
to
({
x
:
position
.
x
+
MUtils
.
random
(
-
1
,
1
)
*
range
-
star
.
width
/
2
,
y
:
position
.
y
+
MUtils
.
random
(
-
1
,
1
)
*
range
-
star
.
height
/
2
,
alpha
:
0
},
BoomEffectDuration
,
false
)
.
call
(()
=>
{
spritePool
.
recycle
(
star
.
poolKey
,
star
);
});
}
//环
for
(
let
i
=
0
;
i
<=
2
;
i
++
)
{
let
ring
=
spritePool
.
spwan
(
"ring"
,
colorIndex
);
parent
.
addChild
(
ring
);
ring
.
scaleX
=
ring
.
scaleY
=
0.186
*
(
i
+
1
)
*
size
;
ring
.
x
=
position
.
x
-
DefaultRingWidth
/
2
;
ring
.
y
=
position
.
y
-
DefaultRingWidth
/
2
;
ring
.
anchorX
=
(
DefaultRingWidth
/
2
);
ring
.
anchorY
=
(
DefaultRingWidth
/
2
);
let
tween
=
MTween
.
get
(
ring
)
.
to
({
scaleX
:
ring
.
scaleX
*
1.4
,
scaleY
:
ring
.
scaleY
*
1.4
,
alpha
:
0
},
BoomEffectDuration
+
(
i
-
1
)
*
BoomEffectDuration
*
0.33
,
false
)
if
(
i
==
2
)
{
tween
.
call
(()
=>
{
spritePool
.
recycle
(
ring
.
poolKey
,
ring
);
});
}
else
{
tween
.
call
(()
=>
{
spritePool
.
recycle
(
ring
.
poolKey
,
ring
);
});
}
}
}
onElementInit
()
{
}
onElementRecycle
()
{
}
}
export
class
BoomEffectSprite
extends
engine
.
Sprite
implements
PoolElement
{
constructor
(
type
:
"star"
|
"ring"
,
colorIndex
:
number
)
{
super
(
TextureMgr
.
get
(
type
,
colorIndex
));
}
poolKey
:
string
;
onElementInit
()
{
this
.
alpha
=
1
;
this
.
visible
=
true
;
}
onElementRecycle
()
{
this
.
visible
=
false
;
}
}
/* class Ring extends BoomEffectSprite {
constructor(type: "star" | "ring", colorIndex: number) {
super(type, colorIndex);
this.anchorX = (DefaultRingWidth / 2);
this.anchorY = (DefaultRingWidth / 2);
}
} */
class
SpritePool
extends
Pool
<
BoomEffectSprite
>
{
public
spwan
(
type
:
"star"
|
"ring"
,
colorIndex
:
number
):
BoomEffectSprite
{
if
(
this
.
data
.
length
>
0
)
{
const
element
=
this
.
data
.
shift
();
element
.
onElementInit
();
return
element
;
}
else
{
return
new
BoomEffectSprite
(
type
,
colorIndex
);
}
}
}
class
SpritePoolGroup
extends
PoolGroup
<
BoomEffectSprite
>
{
public
spwan
(
type
:
"star"
|
"ring"
,
colorIndex
:
number
)
{
const
key
=
type
+
colorIndex
;
if
(
!
this
.
data
[
key
])
{
this
.
data
[
key
]
=
new
SpritePool
();
}
const
element
=
this
.
data
[
key
].
spwan
(
type
,
colorIndex
);
element
.
poolKey
=
key
;
return
element
;
}
}
const
spritePool
=
new
SpritePoolGroup
();
/* class RingPool extends Pool<Ring> {
public spwan(color: number): Ring {
if (this.data.length > 0) {
const element = this.data.shift();
element.onElementInit();
return element;
} else {
return new Ring(color);
}
}
}
class RingPoolGroup extends PoolGroup<Ring> {
public spwan(color: number) {
const key = color.toString();
if (!this.data[key]) {
this.data[key] = new RingPool();
}
const element = this.data[key].spwan(color);
element.poolKey = key;
return element;
}
}
const ringPool = new RingPoolGroup(); */
/* class BoomEffectPool extends Pool<BoomEffect> {
public spwan(color: number, size: number): BoomEffect {
if (this.data.length > 0) {
const element = this.data.shift();
element.onElementInit();
return element;
} else {
return new BoomEffect(color, size);
}
}
}
class BoomEffectPoolGroup extends PoolGroup<BoomEffect> {
public spwan(color: number, size: number) {
const key = color.toString() + size.toString();
if (!this.data[key]) {
this.data[key] = new BoomEffectPool()
}
const element = this.data[key].spwan(color, size);
element.poolKey = key;
return element;
}
}
let boomEffectPool = new BoomEffectPoolGroup();
export default boomEffectPool; */
\ No newline at end of file
src/custom/ShootPlanet/Bullet.ts
View file @
2848e78e
...
@@ -4,19 +4,25 @@ import { MConst } from "./MConst";
...
@@ -4,19 +4,25 @@ import { MConst } from "./MConst";
import
GameObject
from
"./GameObject"
;
import
GameObject
from
"./GameObject"
;
import
Collider
,
{
CircleCollider
,
ColliderGroup
,
PointCollider
}
from
"./Collider"
;
import
Collider
,
{
CircleCollider
,
ColliderGroup
,
PointCollider
}
from
"./Collider"
;
import
Game
from
"./Game"
;
import
Game
from
"./Game"
;
import
{
DataMgr
}
from
"./Mgr/DataMgr"
;
import
bulletPool
from
"./Pools/BulletPool"
;
import
MTimer
from
"./MTimer"
;
const
bulletSpeedValue
=
20
;
/**顾名思义 */
const
frameCountThatBulletsMoveInX
=
4
;
export
default
class
Bullet
extends
MoveObjcet
implements
PoolElement
{
export
default
class
Bullet
extends
MoveObjcet
implements
PoolElement
{
public
power
:
number
=
1
;
public
power
:
number
=
1
;
constructor
(
context
:
Game
)
{
constructor
()
{
super
(
context
);
super
();
this
.
addChild
(
new
engine
.
Image
(
RES
.
getRes
(
"bullet_png"
)));
this
.
addChild
(
new
engine
.
Image
(
RES
.
getRes
(
"09bdff41-2fe3-4298-ad3a-1d2eaf6af778"
)));
this
.
anchorY
=
0
;
let
collider
=
this
.
addComponent
(
PointCollider
)
as
PointCollider
;
let
collider
=
this
.
addComponent
(
PointCollider
)
as
PointCollider
;
collider
.
group
=
ColliderGroup
.
Bullet
;
collider
.
group
=
ColliderGroup
.
Bullet
;
collider
.
setData
(
2
,
0
);
collider
.
setData
(
2
,
0
);
this
.
physics
.
velocity
.
y
=
-
MConst
.
B
ulletSpeedValue
;
this
.
physics
.
velocity
.
y
=
-
b
ulletSpeedValue
;
}
}
init
(
power
:
number
)
{
init
(
power
:
number
)
{
...
@@ -35,7 +41,57 @@ export default class Bullet extends MoveObjcet implements PoolElement {
...
@@ -35,7 +41,57 @@ export default class Bullet extends MoveObjcet implements PoolElement {
onCollisionEnter
(
other
:
Collider
)
{
onCollisionEnter
(
other
:
Collider
)
{
if
(
other
.
group
==
ColliderGroup
.
Ball
||
other
.
group
==
ColliderGroup
.
Top
)
{
if
(
other
.
group
==
ColliderGroup
.
Ball
||
other
.
group
==
ColliderGroup
.
Top
)
{
this
.
context
.
_bulletPool
.
destroy
(
this
);
bulletPool
.
recycle
(
this
);
}
}
}
export
class
BulletGroup
{
private
moveDatas
:
{
bullet
:
Bullet
,
frameOffset
:
number
}[]
=
[];
public
restFrameCountThatBulletsMoveInX
:
number
=
frameCountThatBulletsMoveInX
;
constructor
(
position
:
engine
.
Point
,
rowBulletNum
:
number
)
{
for
(
let
i
=
0
;
i
<
rowBulletNum
;
i
++
)
{
const
bullet
=
bulletPool
.
spwan
().
init
(
Math
.
floor
(
DataMgr
.
game
.
powerScore
/
100
));
DataMgr
.
game
.
addGameObject
(
bullet
,
"Bullet"
);
bullet
.
x
=
position
.
x
-
bullet
.
width
/
2
;
bullet
.
y
=
position
.
y
+
bullet
.
height
/
2
;
this
.
moveDatas
.
push
({
bullet
:
bullet
,
frameOffset
:
((
i
-
(
rowBulletNum
-
1
)
/
2
)
*
bullet
.
width
)
/
frameCountThatBulletsMoveInX
});
}
HorizontalMoveMgr
.
instance
.
movingList
.
push
(
this
);
}
public
onUpdate
()
{
let
data
:
{
bullet
:
Bullet
,
frameOffset
:
number
}
=
null
;
for
(
let
i
=
0
;
i
<
this
.
moveDatas
.
length
;
i
++
)
{
data
=
this
.
moveDatas
[
i
];
data
.
bullet
.
x
+=
data
.
frameOffset
;
}
}
this
.
restFrameCountThatBulletsMoveInX
--
;
}
}
class
HorizontalMoveMgr
{
private
static
_instance
:
HorizontalMoveMgr
=
null
;
public
static
get
instance
():
HorizontalMoveMgr
{
if
(
!
HorizontalMoveMgr
.
_instance
)
{
const
instance
=
new
HorizontalMoveMgr
();
HorizontalMoveMgr
.
_instance
=
instance
;
MTimer
.
onFrame
(
"HorizontalMoveMgr"
,
instance
.
onUpdate
,
instance
);
//单例注册回调
}
return
HorizontalMoveMgr
.
_instance
;
}
public
movingList
:
BulletGroup
[]
=
[];
public
onUpdate
()
{
for
(
let
i
=
0
;
i
<
this
.
movingList
.
length
;
i
++
)
{
this
.
movingList
[
i
].
onUpdate
();
}
this
.
movingList
=
this
.
movingList
.
filter
(
e
=>
e
.
restFrameCountThatBulletsMoveInX
>
0
);
}
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/Car.ts
View file @
2848e78e
import
GameObject
from
"./GameObject"
;
import
GameObject
from
"./GameObject"
;
import
Collider
,
{
RectCollider
,
ColliderGroup
}
from
"./Collider"
;
import
Collider
,
{
RectCollider
,
ColliderGroup
}
from
"./Collider"
;
import
{
MConst
}
from
"./MConst"
;
import
{
MConst
}
from
"./MConst"
;
import
Bullet
from
"./Bullet"
;
import
Bullet
,
{
BulletGroup
}
from
"./Bullet"
;
import
MTweenMgr
from
"./MTween"
;
import
{
MTween
}
from
"./MTween"
;
import
SoundMgr
from
"./SoundMgr"
;
import
SoundMgr
from
"./SoundMgr"
;
import
MTimer
from
"./MTimer"
;
import
MTimer
from
"./MTimer"
;
import
Game
from
"./Game"
;
import
Game
from
"./Game"
;
import
{
DataMgr
}
from
"./Mgr/DataMgr"
;
import
bulletPool
from
"./Pools/BulletPool"
;
export
default
class
Car
extends
GameObject
{
export
default
class
Car
extends
GameObject
{
private
imgGun
:
engine
.
Image
=
null
;
private
imgParticel
:
engine
.
Sprite
=
null
;
private
imgParticel
:
engine
.
Image
=
null
;
private
fireTimer
:
number
=
null
;
private
fireTimer
:
number
=
null
;
public
touchWall
:
1
|
-
1
|
0
=
0
;
public
touchWall
:
1
|
-
1
|
0
=
0
;
public
onDied
:
()
=>
void
;
public
onDied
:
()
=>
void
;
private
isDied
:
boolean
=
false
;
private
isDied
:
boolean
=
false
;
private
fireParticleTimer
=
0
;
private
invincibleDuration
=
0
;
private
invincibleDuration
=
0
;
constructor
(
context
:
Game
)
{
/**每排子弹的个数 */
super
(
context
);
private
rowBulletNum
:
number
=
1
;
this
.
x
=
124
;
private
fireSpeed
:
number
=
MConst
.
BulletFireSpeed
.
min
;
this
.
y
=
145
;
this
.
createPart
(
"car_shadow_png"
,
4.96
,
138.69
);
constructor
()
{
this
.
createPart
(
"car_part_0_png"
,
12.5
,
102.5
);
super
();
this
.
imgGun
=
this
.
createPart
(
"car_gun_png"
,
33.5
,
120
);
// this.x = 124;
this
.
createPart
(
"car_wheel_png"
,
0
,
97.5
);
// this.y = 145;
this
.
imgParticel
=
this
.
createPart
(
"car_particle_png"
,
15.98
,
1.33
);
// this.imgParticel.alpha = 0;
let
sprite
=
new
engine
.
Sprite
(
RES
.
getRes
(
"ddf5128e-be66-4c00-8505-e4167aac37bc"
));
this
.
imgGun
.
anchorY
=
100
;
sprite
.
x
=
0
;
sprite
.
y
=
16
;
this
.
addEventListener
(
engine
.
Event
.
ENTER_FRAME
,
this
.
onEnterFrame
,
this
);
this
.
addChild
(
sprite
);
/* this.createPart("30fd41be-d702-4511-93d8-5f4609ea4c7d", 4.96, 138.69);
this.createPart("6211fb97-ba4a-4b79-b178-09dcf63c16d4", 12.5, 102.5);
this.imgGun = this.createPart("fbd26824-9f87-4784-b825-1d824de97023", 33.5, 20);
this.createPart("83144d98-b464-48d2-95ac-5b189f134ba7", 0, 97.5);
*/
let
particle
=
new
engine
.
Sprite
(
RES
.
getRes
(
"d8daa113-0d75-4139-9e81-c54b7522c890"
));
particle
.
x
=
31
;
particle
.
y
=
0
;
this
.
addChild
(
particle
);
this
.
imgParticel
=
particle
;
MTimer
.
onFrame
(
"Car"
,
this
.
onUpdate
,
this
);
let
collider
=
this
.
addComponent
<
RectCollider
>
(
RectCollider
);
let
collider
=
this
.
addComponent
<
RectCollider
>
(
RectCollider
);
collider
.
setData
(
29
,
20
,
63
,
150
);
collider
.
setData
(
41
,
13
,
65
,
129
);
collider
.
group
=
ColliderGroup
.
Car
;
collider
.
group
=
ColliderGroup
.
Car
;
this
.
addEventListener
(
engine
.
Event
.
REMOVED_FROM_STAGE
,
this
.
onDestroy
,
this
);
this
.
addEventListener
(
engine
.
Event
.
REMOVED_FROM_STAGE
,
this
.
onDestroy
,
this
);
}
}
private
createPart
(
source
:
string
,
x
:
number
,
y
:
number
)
{
/*
private createPart(source: string, x: number, y: number) {
let bitmap = new engine.Image(RES.getRes(source) as engine.Texture);
let bitmap = new engine.Image(RES.getRes(source) as engine.Texture);
bitmap.x = x;
bitmap.x = x;
bitmap.y = y;
bitmap.y = y;
this.addChild(bitmap);
this.addChild(bitmap);
return bitmap;
return bitmap;
}
}
*/
private
fire
()
{
private
fire
()
{
// return;
SoundMgr
.
instance
.
playEffect
(
"shoot_mp3"
);
SoundMgr
.
instance
.
playEffect
(
"shoot_mp3"
);
// let column = this.context.fireBulletNumConfig[this.fireBulletNumConfigIndex];
new
BulletGroup
(
new
engine
.
Point
(
this
.
x
+
this
.
width
/
2
,
this
.
y
),
this
.
rowBulletNum
);
// this.fireBulletNumConfigIndex = this.fireBulletNumConfigIndex == 0 ? 1 : 0; //0/1交替
const
column
=
this
.
context
.
_fireBulletNumConfig
;
const
numb
=
MConst
.
BulletDisperseFrameNum
;
let
bullets
:
Bullet
[]
=
[];
for
(
let
i
=
0
;
i
<
column
;
i
++
)
{
const
bullet
=
this
.
context
.
_bulletPool
.
create
(
this
.
context
).
init
(
Math
.
floor
(
this
.
context
.
_PowerScore
/
100
));
bullet
.
posY
=
this
.
posY
-
this
.
height
+
26
;
bullet
.
posX
=
this
.
posX
;
let
offsetX
=
(
i
-
(
column
-
1
)
/
2
)
*
MConst
.
BulletWidth
;
bullet
.
physics
.
velocity
.
x
=
offsetX
/
numb
;
/* MTweenMgr.instance.get(bullet).wait(MConst.BulletDisperseFrameNum, true).call(() => {
bullet.physics.velocity.x = 0;
}); */
bullets
.
push
(
bullet
);
}
MTimer
.
set
(
numb
,
()
=>
{
for
(
let
i
of
bullets
)
{
i
.
physics
.
velocity
.
x
=
0
;
}
});
}
}
private
die
()
{
private
die
()
{
return
;
if
(
this
.
isDied
)
return
;
if
(
this
.
isDied
)
return
;
this
.
isDied
=
true
;
this
.
isDied
=
true
;
if
(
this
.
invincibleDuration
>
0
)
return
;
if
(
this
.
invincibleDuration
>
0
)
return
;
...
@@ -104,7 +97,7 @@ export default class Car extends GameObject {
...
@@ -104,7 +97,7 @@ export default class Car extends GameObject {
}
}
private
onceBlink
()
{
private
onceBlink
()
{
MTween
Mgr
.
instance
.
get
(
this
)
MTween
.
get
(
this
)
.
to
({
alpha
:
0
},
1
,
true
)
.
to
({
alpha
:
0
},
1
,
true
)
.
wait
(
2
)
.
wait
(
2
)
.
to
({
alpha
:
1
},
1
,
true
)
.
to
({
alpha
:
1
},
1
,
true
)
...
@@ -114,12 +107,12 @@ export default class Car extends GameObject {
...
@@ -114,12 +107,12 @@ export default class Car extends GameObject {
revive
()
{
revive
()
{
this
.
invincibleDuration
=
MConst
.
ReviveInvincibleDuration
*
1000
;
this
.
invincibleDuration
=
MConst
.
ReviveInvincibleDuration
*
1000
;
MTween
Mgr
.
instance
.
removeTweens
(
this
);
MTween
.
removeTweens
(
this
);
this
.
onceBlink
();
this
.
onceBlink
();
MTimer
.
set
(
MConst
.
ReviveInvincibleDuration
*
60
,
()
=>
{
MTimer
.
set
FrameTimer
(
MConst
.
ReviveInvincibleDuration
*
60
,
()
=>
{
//无敌结束
//无敌结束
this
.
alpha
=
1
;
this
.
alpha
=
1
;
MTween
Mgr
.
instance
.
removeTweens
(
this
);
MTween
.
removeTweens
(
this
);
});
});
}
}
...
@@ -129,7 +122,6 @@ export default class Car extends GameObject {
...
@@ -129,7 +122,6 @@ export default class Car extends GameObject {
}
else
if
(
this
.
touchWall
==
-
1
&&
deltaX
>=
0
)
{
}
else
if
(
this
.
touchWall
==
-
1
&&
deltaX
>=
0
)
{
return
;
return
;
}
}
this
.
x
+=
deltaX
;
this
.
x
+=
deltaX
;
}
}
...
@@ -139,30 +131,40 @@ export default class Car extends GameObject {
...
@@ -139,30 +131,40 @@ export default class Car extends GameObject {
}
}
}
}
private
frameTimer
=
0
;
private
onUpdate
()
{
if
(
DataMgr
.
game
.
pause
)
return
;
private
onEnterFrame
()
{
if
(
this
.
context
.
pause
)
return
;
const
score
=
DataMgr
.
game
.
bulletScore
;
//更新开火速度
if
(
score
<=
20
)
{
const
max
=
MConst
.
BulletFireSpeed
.
max
;
const
min
=
MConst
.
BulletFireSpeed
.
min
;
this
.
fireSpeed
=
min
+
(
max
-
min
)
*
(
score
/
20
);
}
else
{
this
.
fireSpeed
=
MConst
.
BulletFireSpeed
.
max
;
}
//更新子弹排数
this
.
rowBulletNum
=
Math
.
ceil
((
Math
.
clamp
(
score
,
15
,
140
)
/
2
)
/
10
);
//无敌计时器流逝
if
(
this
.
invincibleDuration
>
0
)
{
if
(
this
.
invincibleDuration
>
0
)
{
this
.
invincibleDuration
-=
MTimer
.
deltaTime
;
this
.
invincibleDuration
-=
MTimer
.
deltaTime
;
}
}
//开火计时流逝
this
.
fireTimer
+=
1
*
MTimer
.
dtFactor
;
this
.
fireTimer
+=
1
*
MTimer
.
dtFactor
;
if
(
this
.
fireTimer
>=
60
/
this
.
context
.
_
fireSpeed
)
{
if
(
this
.
fireTimer
>=
60
/
this
.
fireSpeed
)
{
this
.
fire
();
this
.
fire
();
this
.
fireTimer
=
0
;
this
.
fireTimer
=
0
;
}
}
if
(
this
.
fireParticleTimer
%
3
==
0
)
{
if
(
this
.
frameTimer
%
3
==
0
)
{
this
.
imgParticel
.
visible
=
!
this
.
imgParticel
.
visible
;
this
.
imgParticel
.
visible
=
!
this
.
imgParticel
.
visible
;
}
}
this
.
frameTimer
++
;
this
.
fireParticleTimer
++
;
}
}
onDestroy
()
{
onDestroy
()
{
this
.
removeEventListener
(
engine
.
Event
.
ENTER_FRAME
,
this
.
onEnterFrame
,
this
);
MTween
.
removeTweens
(
this
);
MTweenMgr
.
instance
.
removeTweens
(
this
);
}
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/Collider.ts
View file @
2848e78e
...
@@ -71,8 +71,8 @@ export class CircleCollider extends Collider {
...
@@ -71,8 +71,8 @@ export class CircleCollider extends Collider {
y
:
0
y
:
0
};
};
getWorldPosition
(
out
:
number
[])
{
getWorldPosition
(
out
:
number
[])
{
out
[
0
]
=
this
.
owner
.
x
-
this
.
owner
.
anchorX
+
this
.
center
[
0
];
out
[
0
]
=
this
.
owner
.
x
+
this
.
center
[
0
];
out
[
1
]
=
this
.
owner
.
y
-
this
.
owner
.
anchorY
+
this
.
center
[
1
];
out
[
1
]
=
this
.
owner
.
y
+
this
.
center
[
1
];
}
}
}
}
...
@@ -96,8 +96,8 @@ export class RectCollider extends Collider {
...
@@ -96,8 +96,8 @@ export class RectCollider extends Collider {
return
[
this
.
rect
.
x
+
this
.
rect
.
width
/
2
,
this
.
rect
.
y
+
this
.
rect
.
height
/
2
];
return
[
this
.
rect
.
x
+
this
.
rect
.
width
/
2
,
this
.
rect
.
y
+
this
.
rect
.
height
/
2
];
}
}
getWorldPosition
(
out
:
number
[])
{
getWorldPosition
(
out
:
number
[])
{
out
[
0
]
=
this
.
owner
.
x
-
this
.
owner
.
anchorX
+
this
.
rect
.
left
;
out
[
0
]
=
this
.
owner
.
x
+
this
.
rect
.
left
;
out
[
1
]
=
this
.
owner
.
y
-
this
.
owner
.
anchorY
+
this
.
rect
.
top
;
out
[
1
]
=
this
.
owner
.
y
+
this
.
rect
.
top
;
}
}
}
}
...
@@ -137,7 +137,7 @@ export enum ColliderGroup {
...
@@ -137,7 +137,7 @@ export enum ColliderGroup {
}
}
export
enum
ColliderType
{
export
enum
ColliderType
{
Circle
,
Circle
=
0
,
Rect
,
Rect
=
1
,
Point
Point
=
2
}
}
src/custom/ShootPlanet/Component/FrameAnimation.ts
0 → 100644
View file @
2848e78e
/* type AltaData = {
key: string,
frameRate: number,
frames: {
x: number, //x,y,w,h为图集上的切图位置数据
y: number,
w: number,
h: number
}[]
} */
interface
Frame
{
x
:
number
,
y
:
number
,
texture
:
engine
.
Texture
}
export
default
class
FrameAnimation
extends
engine
.
Container
{
private
static
caches
:
{
[
key
:
string
]:
{
frameCount
:
number
,
frameRate
:
number
,
frames
:
Frame
[]
}
}
=
{};
public
static
loadRes
(
texture
:
engine
.
Texture
,
egretData
:
any
)
{
let
name
:
string
=
null
;
const
mc
=
egretData
.
mc
;
for
(
let
key
in
mc
)
{
name
=
key
;
break
;
}
if
(
!
FrameAnimation
.
caches
[
name
])
{
let
altaData
=
{};
for
(
let
i
in
egretData
.
res
)
{
altaData
[
name
+
"_"
+
i
]
=
egretData
.
res
[
i
];
}
engine
.
createTextureSheet
(
texture
.
baseTexture
,
altaData
);
let
frames
:
Frame
[]
=
[];
const
framesData
=
mc
[
name
].
frames
;
for
(
let
i
in
framesData
)
{
frames
[
i
]
=
{
x
:
framesData
[
i
].
x
,
y
:
framesData
[
i
].
y
,
texture
:
RES
.
getRes
(
name
+
"_"
+
framesData
[
i
].
res
)
}
}
FrameAnimation
.
caches
[
name
]
=
{
frameRate
:
mc
[
name
].
frameRate
,
frameCount
:
Object
.
keys
(
altaData
).
length
,
frames
:
frames
}
}
}
private
static
playingAnimations
:
FrameAnimation
[]
=
[];
public
static
onUpdate
()
{
const
list
=
FrameAnimation
.
playingAnimations
;
for
(
let
i
=
0
;
i
<
list
.
length
;
i
++
)
{
list
[
i
].
onUpdate
();
}
}
private
frames
:
Frame
[]
=
[];
private
frameCount
:
number
=
0
;
public
curPos
:
number
=
0
;
private
frameTimer
:
number
=
0
;
private
frameRate
:
number
=
60
;
private
sprite
:
engine
.
Sprite
=
new
engine
.
Sprite
;
constructor
(
key
:
string
)
{
super
();
if
(
!
FrameAnimation
.
caches
[
key
])
{
console
.
error
(
"unloaded animation:"
+
key
);
return
;
}
/* for (let i = 0; i < FrameAnimation.caches[key].frameCount; i++) {
let frame = engine.Texture.from(key + "_" + i);
if (frame) {
this.frames.push(frame);
} else {
console.error(`can not find frame ${i} of ${key}`);
return;
}
} */
this
.
frames
=
FrameAnimation
.
caches
[
key
].
frames
;
this
.
frameCount
=
Object
.
keys
(
this
.
frames
).
length
;
this
.
frameRate
=
FrameAnimation
.
caches
[
key
].
frameRate
;
this
.
addChild
(
this
.
sprite
);
}
onUpdate
()
{
if
(
this
.
frameTimer
>=
60
/
this
.
frameRate
)
{
if
(
this
.
curPos
>=
this
.
frameCount
)
{
this
.
onCompleted
&&
this
.
onCompleted
();
FrameAnimation
.
playingAnimations
.
splice
(
FrameAnimation
.
playingAnimations
.
indexOf
(
this
),
1
);
}
else
{
const
frameData
=
this
.
frames
[
this
.
curPos
];
this
.
sprite
.
texture
=
frameData
.
texture
;
this
.
sprite
.
x
=
frameData
.
x
;
this
.
sprite
.
y
=
frameData
.
y
;
}
this
.
curPos
++
;
this
.
frameTimer
=
0
;
}
else
{
this
.
frameTimer
++
;
}
}
play
()
{
FrameAnimation
.
playingAnimations
.
push
(
this
);
}
onCompleted
:
()
=>
void
;
}
\ No newline at end of file
src/custom/ShootPlanet/Component/SpriteFont.ts
0 → 100644
View file @
2848e78e
export
default
class
SpriteFontLabel
extends
engine
.
Container
{
public
set
text
(
v
:
string
)
{
if
(
typeof
v
!=
"string"
)
return
;
if
(
v
!=
this
.
_text
)
{
this
.
_text
=
v
;
this
.
onDraw
();
}
}
public
get
text
()
{
return
this
.
_text
;
}
private
_text
:
string
=
""
;
public
font
:
SpriteFont
=
null
;
private
sprites
:
engine
.
Sprite
[]
=
[];
constructor
(
font
:
SpriteFont
,
text
?:
string
)
{
super
();
this
.
font
=
font
;
this
.
text
=
text
;
}
private
onDraw
()
{
if
(
!
this
.
font
)
{
console
.
error
(
"font is null"
);
return
;
}
let
sprite
:
engine
.
Sprite
=
null
;
let
tex
:
engine
.
Texture
=
null
;
let
char
:
string
=
null
;
let
curX
:
number
=
0
;
for
(
let
i
=
0
;
i
<
this
.
_text
.
length
;
i
++
)
{
char
=
this
.
_text
[
i
];
tex
=
this
.
font
.
getWord
(
char
);
sprite
=
this
.
sprites
[
i
];
if
(
tex
)
{
if
(
!
sprite
)
{
sprite
=
new
engine
.
Sprite
();
this
.
addChild
(
sprite
);
this
.
sprites
.
push
(
sprite
);
}
sprite
.
texture
=
tex
;
sprite
.
x
=
curX
;
curX
+=
sprite
.
width
;
}
else
{
sprite
.
texture
=
null
;
console
.
warn
(
"con not resolve char:"
+
char
);
}
}
if
(
this
.
sprites
.
length
>
this
.
_text
.
length
)
{
//删除多余的sprite
let
rest
=
this
.
sprites
.
slice
(
this
.
_text
.
length
);
for
(
let
i
of
rest
)
{
i
.
destroy
();
}
this
.
sprites
=
this
.
sprites
.
slice
(
0
,
this
.
_text
.
length
);
}
}
}
const
fontCaches
:
{
[
name
:
string
]:
{
[
char
:
string
]:
engine
.
Texture
}
}
=
{}
type
SpriteFontConfig
=
{
name
:
string
,
textures
:
{
[
char
:
string
]:
{
x
:
number
,
//x,y,w,h为图集上的切图位置数据
y
:
number
,
w
:
number
,
h
:
number
,
ox
:
number
,
//ox,oy为偏移数据,trim裁剪的数据,在orig上的偏移{x:0,y:0,width:200,height:200}
oy
:
number
,
sw
:
number
,
//sw,sh为原始宽高
sh
:
number
,
}
}
}
export
class
SpriteFont
{
public
static
load
(
texture
:
engine
.
Texture
,
config
:
SpriteFontConfig
)
{
if
(
!
fontCaches
[
config
.
name
])
{
let
font
:
{
[
char
:
string
]:
engine
.
Texture
}
=
{};
let
altaData
=
{};
let
chars
=
Object
.
keys
(
config
.
textures
);
for
(
let
char
of
chars
)
{
altaData
[
config
.
name
+
"_"
+
char
]
=
config
.
textures
[
char
];
}
engine
.
createTextureSheet
(
texture
.
baseTexture
,
altaData
);
for
(
let
char
of
chars
)
{
font
[
char
]
=
RES
.
getRes
(
config
.
name
+
"_"
+
char
);
}
fontCaches
[
config
.
name
]
=
font
;
}
}
private
words
:
{
[
char
:
string
]:
engine
.
Texture
}
=
null
;
constructor
(
name
:
string
)
{
if
(
fontCaches
[
name
])
{
this
.
words
=
fontCaches
[
name
];
}
else
{
console
.
error
(
"unloaded font:"
+
name
);
}
}
getWord
(
char
:
string
)
{
return
this
.
words
[
char
];
}
}
\ No newline at end of file
src/custom/ShootPlanet/Drop.ts
View file @
2848e78e
import
MoveObjcet
from
"./MoveObject"
;
import
MoveObjcet
from
"./MoveObject"
;
import
{
MConfigs
}
from
"./MConfigs"
;
import
{
MConfigs
}
from
"./MConfigs"
;
import
Collider
,
{
ColliderGroup
,
PointCollider
}
from
"./Collider"
;
import
Collider
,
{
ColliderGroup
,
PointCollider
}
from
"./Collider"
;
import
MTweenMgr
from
"./MTween"
;
import
{
MTween
}
from
"./MTween"
;
import
SoundMgr
from
"./SoundMgr"
;
import
SoundMgr
from
"./SoundMgr"
;
import
DropBlinkMgr
from
"./DropBlinkMgr"
;
import
Game
from
"./Game"
;
import
Game
from
"./Game"
;
import
{
PoolElement
}
from
"./Pool"
;
export
default
class
Drop
extends
MoveObjcet
{
import
dropPool
from
"./Pools/DropPool"
;
private
type
:
string
=
null
;
import
{
DataMgr
}
from
"./Mgr/DataMgr"
;
import
DropBlinkMgr
from
"./Mgr/DropBlinkMgr"
;
const
dropImgNames
=
[
"f7221f86-f376-40ce-b0e8-f7ea573ec780"
,
"c9dbd728-1844-4910-b1ef-e84ce10dc422"
,
"41182131-7050-4b95-9dce-45275b70738d"
,
"17d8e000-b290-4972-bcab-cb819a6cf51b"
,
"3f7faebf-64da-44a4-8152-0c35fcc29fe5"
];
export
default
class
Drop
extends
MoveObjcet
implements
PoolElement
{
private
type
:
"bullet"
|
"power"
=
null
;
private
label
:
engine
.
Label
=
null
;
private
label
:
engine
.
Label
=
null
;
public
bitmap
:
engine
.
Image
=
null
;
public
bitmap
:
engine
.
Image
=
null
;
private
scoreValue
:
number
=
null
;
private
scoreValue
:
number
=
null
;
private
collider
:
PointCollider
=
null
;
private
collider
:
PointCollider
=
null
;
private
isGround
:
boolean
=
false
;
private
isGround
:
boolean
=
false
;
private
stayGroundCount
=
0
;
private
stayGroundCount
=
0
;
private
id
:
number
=
null
;
constructor
(
context
:
Game
)
{
constructor
(
id
:
number
)
{
super
(
context
);
super
();
this
.
id
=
id
;
//图像
//图像
let
bitmap
=
new
engine
.
Image
();
let
bitmap
=
new
engine
.
Image
();
this
.
addChild
(
bitmap
);
this
.
addChild
(
bitmap
);
...
@@ -29,26 +42,17 @@ export default class Drop extends MoveObjcet {
...
@@ -29,26 +42,17 @@ export default class Drop extends MoveObjcet {
this
.
label
=
label
;
this
.
label
=
label
;
this
.
collider
=
this
.
addComponent
<
PointCollider
>
(
PointCollider
);
this
.
collider
=
this
.
addComponent
<
PointCollider
>
(
PointCollider
);
this
.
collider
.
group
=
ColliderGroup
.
Drop
;
this
.
collider
.
group
=
ColliderGroup
.
Drop
;
}
init
(
id
:
number
)
{
let
config
:
{
type
:
string
,
value
:
number
,
textColor
:
number
,
fileIndex
:
string
}
=
MConfigs
.
drop
[
id
];
const
config
=
MConfigs
.
drop
[
id
];
this
.
type
=
config
.
type
;
this
.
type
=
config
.
type
;
this
.
scoreValue
=
config
.
value
;
this
.
scoreValue
=
config
.
value
;
this
.
physics
.
acceleration
.
y
=
0.3
;
this
.
physics
.
acceleration
.
y
=
0.3
;
let
texture
=
RES
.
getRes
(
`drop_
${
config
.
type
}
_
${
config
.
fileIndex
}
_png`
)
as
engine
.
Texture
;
let
texture
=
RES
.
getRes
(
dropImgNames
[
id
]
)
as
engine
.
Texture
;
this
.
bitmap
.
texture
=
texture
;
this
.
bitmap
.
texture
=
texture
;
let
str
=
"+"
+
config
.
value
;
let
str
=
"+"
+
config
.
value
;
if
(
config
.
type
==
"power"
)
str
=
str
+
"%"
;
if
(
config
.
type
==
"power"
)
str
=
str
+
"%"
;
let
label
=
this
.
label
;
label
.
text
=
str
;
label
.
text
=
str
;
label
.
fillColor
=
config
.
textColor
;
label
.
fillColor
=
config
.
textColor
;
label
.
visible
=
false
;
label
.
visible
=
false
;
...
@@ -56,7 +60,6 @@ export default class Drop extends MoveObjcet {
...
@@ -56,7 +60,6 @@ export default class Drop extends MoveObjcet {
label
.
y
=
texture
.
height
/
2
-
label
.
height
/
2
;
label
.
y
=
texture
.
height
/
2
-
label
.
height
/
2
;
this
.
collider
.
setData
(
texture
.
width
/
2
,
texture
.
height
/
2
);
this
.
collider
.
setData
(
texture
.
width
/
2
,
texture
.
height
/
2
);
return
this
;
}
}
private
eated
()
{
private
eated
()
{
...
@@ -69,16 +72,17 @@ export default class Drop extends MoveObjcet {
...
@@ -69,16 +72,17 @@ export default class Drop extends MoveObjcet {
this
.
getComponent
(
PointCollider
).
enabled
=
false
;
this
.
getComponent
(
PointCollider
).
enabled
=
false
;
this
.
label
.
visible
=
true
;
this
.
label
.
visible
=
true
;
if
(
this
.
type
==
"bullet"
)
{
if
(
this
.
type
==
"bullet"
)
{
this
.
context
.
_BulletScore
+=
this
.
scoreValue
;
DataMgr
.
game
.
_BulletScore
+=
this
.
scoreValue
;
}
else
if
(
this
.
type
==
"power"
)
{
}
else
if
(
this
.
type
==
"power"
)
{
this
.
context
.
_PowerScore
+=
this
.
scoreValue
;
DataMgr
.
game
.
_PowerScore
+=
this
.
scoreValue
;
}
}
MTween
Mgr
.
instance
.
removeTweens
(
this
);
MTween
.
removeTweens
(
this
);
MTween
Mgr
.
instance
.
get
(
this
)
MTween
.
get
(
this
)
.
to
({
y
:
this
.
y
-
200
,
alpha
:
0
},
1000
,
false
)
.
to
({
y
:
this
.
y
-
200
,
alpha
:
0
},
1000
,
false
)
.
call
(()
=>
{
.
call
(()
=>
{
this
.
context
.
_dropPool
.
destroy
(
this
);
dropPool
.
recycle
(
this
.
id
.
toString
(),
this
);
MTween
.
removeTweens
(
this
);
});
});
}
}
...
@@ -121,21 +125,18 @@ export default class Drop extends MoveObjcet {
...
@@ -121,21 +125,18 @@ export default class Drop extends MoveObjcet {
}
}
}
}
/* destroy() {
onElementInit
()
{
DropBlinkMgr.instance.remove(this);
super.destroy();
} */
/* onElementInit() {
this.alpha = 1;
this
.
visible
=
true
;
this
.
visible
=
true
;
this
.
stayGroundCount
=
0
;
this
.
stayGroundCount
=
0
;
this
.
isGround
=
false
;
this
.
isGround
=
false
;
this
.
enableAllComponents
();
this
.
enableAllComponents
();
this
.
label
.
visible
=
false
;
this
.
physics
.
acceleration
.
y
=
0.3
;
}
}
onElementRecycle
()
{
onElementRecycle
()
{
this
.
alpha
=
1
;
this
.
visible
=
false
;
this
.
visible
=
false
;
this
.
disableAllComponents
();
this
.
disableAllComponents
();
}
*/
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/EffectMgr.ts
0 → 100644
View file @
2848e78e
import
{
MUtils
}
from
"./MUtils"
;
import
BoomEffect
from
"./BoomEffect"
;
import
FrameAnimation
from
"./Component/FrameAnimation"
;
import
{
Pool
,
PoolGroup
,
PoolElement
}
from
"./Pool"
;
import
SpBoomEffect
from
"./SpBoomEffect"
;
import
spBoomEffectPool
from
"./SpBoomEffect"
;
export
namespace
EffectMgr
{
let
effectLayer
:
engine
.
Container
=
null
;
let
layers
:
engine
.
Container
[]
=
[];
export
function
init
(
effectLayer
:
engine
.
Container
)
{
this
.
effectLayer
=
effectLayer
;
layers
[
0
]
=
new
engine
.
Container
();
layers
[
1
]
=
new
engine
.
Container
();
effectLayer
.
addChild
(
layers
[
0
]);
effectLayer
.
addChild
(
layers
[
1
]);
}
export
function
playBoomEffect
(
position
:
engine
.
Point
,
size
:
number
)
{
const
colorIndex
=
MUtils
.
randomInt
(
0
,
5
);
// new BoomEffect(position, layers[1], colorIndex, size);
let
effect
=
spBoomEffectPool
.
spwan
(
MUtils
.
randomInt
(
0
,
3
),
size
);
layers
[
1
].
addChild
(
effect
);
effect
.
position
=
position
;
}
export
function
createAnimation
(
key
:
string
):
Animation
{
let
clip
=
animationPool
.
spwan
(
key
);
layers
[
0
].
addChild
(
clip
);
clip
.
onCompleted
=
()
=>
{
animationPool
.
recycle
(
key
,
clip
);
}
return
clip
;
}
}
class
Animation
extends
FrameAnimation
implements
PoolElement
{
onElementInit
()
{
this
.
visible
=
true
;
this
.
curPos
=
0
;
}
onElementRecycle
()
{
this
.
visible
=
false
;
}
}
class
AnimationPool
extends
Pool
<
Animation
>
{
public
spwan
(
key
:
string
):
Animation
{
if
(
this
.
data
.
length
>
0
)
{
const
element
=
this
.
data
.
shift
();
element
.
onElementInit
();
return
element
;
}
else
{
return
new
Animation
(
key
);
}
}
}
class
AnimationPoolGroup
extends
PoolGroup
<
Animation
>
{
public
spwan
(
key
:
string
)
{
if
(
!
this
.
data
[
key
])
{
this
.
data
[
key
]
=
new
AnimationPool
()
as
Pool
<
Animation
>
;
}
const
element
=
this
.
data
[
key
].
spwan
(
key
);
return
element
;
}
}
const
animationPool
=
new
AnimationPoolGroup
();
src/custom/ShootPlanet/GUtils.ts
View file @
2848e78e
...
@@ -34,8 +34,8 @@ export function clearShareImg() {
...
@@ -34,8 +34,8 @@ export function clearShareImg() {
export
function
getBallScore
(
bulletScore
:
number
,
powerScore
:
number
,
colorIndex
:
number
):
any
{
export
function
getBallScore
(
bulletScore
:
number
,
powerScore
:
number
,
colorIndex
:
number
):
any
{
let
getScoreFromRange
=
([
a
,
b
])
=>
{
let
getScoreFromRange
=
([
a
,
b
])
=>
{
a
=
Math
.
ceil
(
a
*
MConfigs
.
difficultyFactor
);
a
=
Math
.
ceil
(
a
*
0.1
);
b
=
Math
.
ceil
(
b
)
*
MConfigs
.
difficultyFactor
;
b
=
Math
.
ceil
(
b
*
0.1
)
;
let
n
=
Math
.
abs
(
b
-
a
)
+
1
;
let
n
=
Math
.
abs
(
b
-
a
)
+
1
;
n
=
Math
.
floor
(
n
/
6
);
n
=
Math
.
floor
(
n
/
6
);
const
m
=
[];
const
m
=
[];
...
...
src/custom/ShootPlanet/Game.ts
View file @
2848e78e
This diff is collapsed.
Click to expand it.
src/custom/ShootPlanet/GameObject.ts
View file @
2848e78e
import
GameComponent
from
"./GameComponent"
;
import
GameComponent
from
"./GameComponent"
;
import
{
MUtils
}
from
"./MUtils"
;
import
Collider
from
"./Collider"
;
import
Collider
from
"./Collider"
;
import
Game
from
"./Game"
;
import
Game
from
"./Game"
;
export
default
class
GameObject
extends
engine
.
Container
{
export
default
class
GameObject
extends
engine
.
Container
{
public
name
:
string
=
""
;
public
name
:
string
=
""
;
private
_position
:
engine
.
Point
=
new
engine
.
Point
();
public
get
position
()
{
this
.
_position
.
x
=
this
.
x
;
this
.
_position
.
y
=
this
.
y
;
return
this
.
_position
;
}
public
addComponent
<
T
extends
GameComponent
>
(
cls
:
any
):
T
{
public
addComponent
<
T
extends
GameComponent
>
(
cls
:
any
):
T
{
if
(
this
.
getComponent
(
cls
)
!=
null
)
{
if
(
this
.
getComponent
(
cls
)
!=
null
)
{
console
.
error
(
"component is existent"
);
console
.
error
(
"component is existent"
);
...
@@ -44,49 +36,17 @@ export default class GameObject extends engine.Container {
...
@@ -44,49 +36,17 @@ export default class GameObject extends engine.Container {
}
}
private
componentList
:
GameComponent
[]
=
[];
private
componentList
:
GameComponent
[]
=
[];
protected
context
:
Game
=
null
;
constructor
()
{
constructor
(
context
?:
Game
)
{
super
();
super
();
this
.
anchorX
=
0.5
;
// this.addEventListener(engine.Event.REMOVED_FROM_STAGE, this.disableAllComponents, this);
this
.
anchorY
=
0.5
;
this
.
mouseEnabled
=
false
;
this
.
context
=
context
;
this
.
mouseChildren
=
false
;
this
.
touchEnabled
=
false
;
this
.
touchChildren
=
false
;
this
.
addEventListener
(
engine
.
Event
.
REMOVED_FROM_STAGE
,
this
.
disableAllComponents
,
this
);
}
/**锚点X轴 */
public
get
anchorX
():
number
{
return
this
.
_anchorX
;
}
public
set
anchorX
(
v
:
number
)
{
this
.
_anchorX
=
Math
.
clamp
(
v
,
0
,
1
);
}
}
private
_anchorX
:
number
=
0
;
/**锚点Y轴 */
/**销毁时禁用所有组件 */
public
get
anchorY
():
number
{
destroy
()
{
return
this
.
_anchorY
;
super
.
destroy
();
}
this
.
disableAllComponents
();
public
set
anchorY
(
v
:
number
)
{
this
.
_anchorY
=
Math
.
clamp
(
v
,
0
,
1
);
}
private
_anchorY
:
number
=
0
;
public
get
posX
():
number
{
return
this
.
x
+
this
.
width
*
this
.
scaleX
*
this
.
anchorX
;
}
public
set
posX
(
v
:
number
)
{
this
.
x
=
v
-
this
.
width
*
this
.
scaleX
*
this
.
anchorX
;
}
public
get
posY
():
number
{
return
this
.
y
+
this
.
height
*
this
.
scaleY
*
this
.
anchorY
;
}
public
set
posY
(
v
:
number
)
{
this
.
y
=
v
-
this
.
height
*
this
.
scaleY
*
this
.
anchorY
;
}
}
protected
disableAllComponents
()
{
protected
disableAllComponents
()
{
...
...
src/custom/ShootPlanet/GuideMask.ts
0 → 100644
View file @
2848e78e
import
{
MConfigs
}
from
"./MConfigs"
;
export
default
class
GuideMask
extends
engine
.
Container
{
constructor
(
index
:
number
,
x
:
number
,
y
:
number
)
{
super
();
const
config
=
MConfigs
.
guide
[
index
];
let
bg
=
new
engine
.
Shape
();
bg
.
beginFill
(
0x000000
);
bg
.
drawRect
(
0
,
0
,
750
,
1624
);
bg
.
endFill
();
bg
.
alpha
=
0.7
;
let
texture
=
RES
.
getRes
(
config
.
mask
);
let
bitmap
=
new
engine
.
Sprite
(
texture
);
bitmap
.
x
=
x
-
texture
.
width
/
2
;
bitmap
.
y
=
y
-
texture
.
height
/
2
;
//TODO
/* let container: engine.Container = new engine.Container();
container.addChild(bg);
container.addChild(bitmap);
bitmap.blendMode = engine.BlendMode.ERASE;
let renderTexture: engine.RenderTexture = new engine.RenderTexture();
renderTexture.drawToTexture(container);
let blendBitmap = new engine.Bitmap(renderTexture);
this.addChild(blendBitmap); */
let
offsetToMask
=
config
.
text
.
offsetToMask
;
let
label
=
new
engine
.
Label
();
label
.
text
=
config
.
text
.
str
;
label
.
size
=
24
;
label
.
x
=
offsetToMask
.
x
+
bitmap
.
x
;
label
.
y
=
offsetToMask
.
y
+
bitmap
.
y
;
this
.
addChild
(
label
);
//TODO:拿到最新的尺寸
// label.validateSize();
if
(
label
.
x
<
0
)
{
label
.
x
=
0
;
}
else
if
(
label
.
x
+
label
.
width
>
750
)
{
label
.
x
=
750
-
label
.
width
;
}
this
.
addEventListener
(
engine
.
MouseEvent
.
MOUSE_DOWN
,
()
=>
{
this
.
onClick
&&
this
.
onClick
();
},
this
);
}
onClick
:
()
=>
void
;
}
\ No newline at end of file
src/custom/ShootPlanet/G
am
eMgr.ts
→
src/custom/ShootPlanet/G
uid
eMgr.ts
View file @
2848e78e
import
PoolMgr
from
"./PoolMgr"
;
import
Ball
from
"./Ball"
;
import
PhycicsSystem
from
"./PhycicsSystem"
;
import
MTweenMgr
from
"./MTween"
;
import
SoundMgr
from
"./SoundMgr"
;
import
SoundMgr
from
"./SoundMgr"
;
import
{
MConfigs
}
from
"./MConfigs"
;
import
GuideMask
from
"./GuideMask"
;
import
GuideMask
from
"./GuideMask"
;
import
SceneCtrl
from
"./MSceneCtrl
"
;
import
{
ShootPlanet
}
from
"./ShootPlanet
"
;
export
default
class
G
am
eMgr
{
export
default
class
G
uid
eMgr
{
private
static
_instance
:
G
am
eMgr
=
null
;
private
static
_instance
:
G
uid
eMgr
=
null
;
public
static
get
instance
():
G
am
eMgr
{
public
static
get
instance
():
G
uid
eMgr
{
if
(
!
this
.
_instance
)
{
if
(
!
GuideMgr
.
_instance
)
{
this
.
_instance
=
new
Gam
eMgr
();
GuideMgr
.
_instance
=
new
Guid
eMgr
();
}
}
return
this
.
_instance
;
return
GuideMgr
.
_instance
;
}
}
public
t
:
number
=
0
;
public
t
:
number
=
0
;
public
dropNum
:
number
=
0
;
public
dropNum
:
number
=
0
;
private
mainScene
:
MainScene
=
null
;
private
mainScene
:
ShootPlanet
=
null
;
init
(
mainScene
:
MainScene
)
{
init
(
mainScene
:
ShootPlanet
)
{
this
.
mainScene
=
mainScene
;
this
.
mainScene
=
mainScene
;
}
}
...
@@ -49,7 +45,7 @@ export default class GameMgr {
...
@@ -49,7 +45,7 @@ export default class GameMgr {
this
.
guideFlag
=
false
;
this
.
guideFlag
=
false
;
}
}
};
};
SceneCtrl
.
instance
.
parent
.
addChild
(
this
.
currentGuideMask
);
this
.
mainScene
.
addChild
(
this
.
currentGuideMask
);
}
}
public
minEnableCaptchaScore
:
number
=
null
;
public
minEnableCaptchaScore
:
number
=
null
;
...
...
src/custom/ShootPlanet/JsonData.ts
0 → 100644
View file @
2848e78e
export
const
NumFontData
=
{
name
:
"num_font"
,
textures
:
{
"."
:
{
"x"
:
3
,
"y"
:
215
,
"w"
:
16
,
"h"
:
17
,
"ox"
:
7
,
"oy"
:
49
,
"sw"
:
29
,
"sh"
:
66
},
"k"
:
{
"x"
:
155
,
"y"
:
3
,
"w"
:
42
,
"h"
:
65
,
"ox"
:
6
,
"oy"
:
0
,
"sw"
:
48
,
"sh"
:
66
},
"0"
:
{
"x"
:
3
,
"y"
:
144
,
"w"
:
44
,
"h"
:
65
,
"ox"
:
2
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
},
"1"
:
{
"x"
:
145
,
"y"
:
74
,
"w"
:
27
,
"h"
:
65
,
"ox"
:
7
,
"oy"
:
0
,
"sw"
:
48
,
"sh"
:
66
},
"2"
:
{
"x"
:
53
,
"y"
:
74
,
"w"
:
41
,
"h"
:
64
,
"ox"
:
3
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
},
"3"
:
{
"x"
:
100
,
"y"
:
74
,
"w"
:
39
,
"h"
:
65
,
"ox"
:
5
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
},
"4"
:
{
"x"
:
3
,
"y"
:
3
,
"w"
:
48
,
"h"
:
64
,
"ox"
:
0
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
},
"5"
:
{
"x"
:
53
,
"y"
:
144
,
"w"
:
39
,
"h"
:
65
,
"ox"
:
5
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
},
"6"
:
{
"x"
:
106
,
"y"
:
3
,
"w"
:
43
,
"h"
:
65
,
"ox"
:
3
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
},
"7"
:
{
"x"
:
203
,
"y"
:
3
,
"w"
:
42
,
"h"
:
64
,
"ox"
:
3
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
},
"8"
:
{
"x"
:
3
,
"y"
:
73
,
"w"
:
44
,
"h"
:
65
,
"ox"
:
2
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
},
"9"
:
{
"x"
:
57
,
"y"
:
3
,
"w"
:
43
,
"h"
:
65
,
"ox"
:
2
,
"oy"
:
1
,
"sw"
:
48
,
"sh"
:
66
}
}
}
export
const
DuangAltaData
=
{
"mc"
:
{
"duang"
:
{
"frameRate"
:
24
,
"events"
:
[],
"frames"
:
[
{
"res"
:
"3950AA49"
,
"x"
:
64
,
"y"
:
46
},
{
"res"
:
"86D16089"
,
"x"
:
27
,
"y"
:
29
},
{
"res"
:
"4B78217C"
,
"x"
:
13
,
"y"
:
21
},
{
"res"
:
"1B30AC5E"
,
"x"
:
9
,
"y"
:
19
},
{
"res"
:
"4C28F4CC"
,
"x"
:
177
,
"y"
:
47
}
]
}
},
"res"
:
{
"4B78217C"
:
{
"x"
:
3
,
"y"
:
60
,
"w"
:
171
,
"h"
:
46
},
"86D16089"
:
{
"x"
:
3
,
"y"
:
112
,
"w"
:
144
,
"h"
:
36
},
"4C28F4CC"
:
{
"x"
:
189
,
"y"
:
3
,
"w"
:
14
,
"h"
:
24
},
"3950AA49"
:
{
"x"
:
3
,
"y"
:
154
,
"w"
:
80
,
"h"
:
16
},
"1B30AC5E"
:
{
"x"
:
3
,
"y"
:
3
,
"w"
:
180
,
"h"
:
51
}
}
}
export
const
BoomAnimationData
=
{
"mc"
:
{
"boom"
:
{
"frameRate"
:
60
,
"events"
:
[
],
"frames"
:
[
{
"res"
:
"1ECDAB2E"
,
"x"
:
109
,
"y"
:
109
},
{
"res"
:
"7D1C3EA6"
,
"x"
:
104
,
"y"
:
104
},
{
"res"
:
"32FD22BF"
,
"x"
:
99
,
"y"
:
99
},
{
"res"
:
"8D21D7FD"
,
"x"
:
94
,
"y"
:
94
},
{
"res"
:
"AA99D248"
,
"x"
:
89
,
"y"
:
89
},
{
"res"
:
"EB300D3B"
,
"x"
:
84
,
"y"
:
84
},
{
"res"
:
"2D80AF70"
,
"x"
:
79
,
"y"
:
79
},
{
"res"
:
"D5989DA4"
,
"x"
:
74
,
"y"
:
74
},
{
"res"
:
"F357A8ED"
,
"x"
:
69
,
"y"
:
69
},
{
"res"
:
"84EE6F80"
,
"x"
:
64
,
"y"
:
64
},
{
"res"
:
"49BA3EE3"
,
"x"
:
59
,
"y"
:
59
},
{
"res"
:
"1F12115"
,
"x"
:
54
,
"y"
:
54
},
{
"res"
:
"DD77F7EA"
,
"x"
:
49
,
"y"
:
49
},
{
"res"
:
"8587C4D"
,
"x"
:
44
,
"y"
:
44
},
{
"res"
:
"9C93A4AF"
,
"x"
:
39
,
"y"
:
39
},
{
"res"
:
"9B8ABD91"
,
"x"
:
34
,
"y"
:
34
}
]
}
},
"res"
:
{
"F357A8ED"
:
{
"x"
:
1501
,
"y"
:
1
,
"w"
:
458
,
"h"
:
458
},
"8D21D7FD"
:
{
"x"
:
1389
,
"y"
:
481
,
"w"
:
407
,
"h"
:
407
},
"DD77F7EA"
:
{
"x"
:
521
,
"y"
:
1
,
"w"
:
498
,
"h"
:
498
},
"84EE6F80"
:
{
"x"
:
1
,
"y"
:
1521
,
"w"
:
468
,
"h"
:
468
},
"32FD22BF"
:
{
"x"
:
920
,
"y"
:
1389
,
"w"
:
397
,
"h"
:
397
},
"7D1C3EA6"
:
{
"x"
:
1389
,
"y"
:
890
,
"w"
:
387
,
"h"
:
387
},
"EB300D3B"
:
{
"x"
:
491
,
"y"
:
1389
,
"w"
:
427
,
"h"
:
427
},
"49BA3EE3"
:
{
"x"
:
1021
,
"y"
:
1
,
"w"
:
478
,
"h"
:
478
},
"9C93A4AF"
:
{
"x"
:
1
,
"y"
:
1
,
"w"
:
518
,
"h"
:
518
},
"1ECDAB2E"
:
{
"x"
:
1319
,
"y"
:
1279
,
"w"
:
377
,
"h"
:
377
},
"2D80AF70"
:
{
"x"
:
511
,
"y"
:
950
,
"w"
:
437
,
"h"
:
437
},
"1F12115"
:
{
"x"
:
1
,
"y"
:
1031
,
"w"
:
488
,
"h"
:
488
},
"8587C4D"
:
{
"x"
:
1
,
"y"
:
521
,
"w"
:
508
,
"h"
:
508
},
"D5989DA4"
:
{
"x"
:
521
,
"y"
:
501
,
"w"
:
447
,
"h"
:
447
},
"AA99D248"
:
{
"x"
:
970
,
"y"
:
501
,
"w"
:
417
,
"h"
:
417
},
"9B8ABD91"
:
{
"x"
:
1
,
"y"
:
1991
,
"w"
:
5
,
"h"
:
5
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/MConfigs.ts
View file @
2848e78e
...
@@ -12,7 +12,14 @@ export namespace MConfigs {
...
@@ -12,7 +12,14 @@ export namespace MConfigs {
export
const
appId
=
"123"
;
export
const
appId
=
"123"
;
export
const
size
=
[
0.3125
,
0.5357
,
0.7321
,
1
];
export
const
size
=
[
0.3125
,
0.5357
,
0.7321
,
1
];
export
const
drop
=
{
export
const
drop
:
{
[
key
:
number
]:
{
type
:
"bullet"
|
"power"
,
value
:
number
,
textColor
:
number
,
fileIndex
:
string
}
}
=
{
0
:
{
0
:
{
type
:
"bullet"
,
type
:
"bullet"
,
value
:
1
,
value
:
1
,
...
@@ -124,13 +131,13 @@ export namespace MConfigs {
...
@@ -124,13 +131,13 @@ export namespace MConfigs {
}
}
}
}
export
const
boomEffectColor
=
[
/*
export const boomEffectColor = [
0xe41014,
0xe41014,
0xff9600,
0xff9600,
0x0090ff,
0x0090ff,
0x8aff00,
0x8aff00,
0xffe720
0xffe720
]
]
*/
/**倒计时秒数 */
/**倒计时秒数 */
export
const
countDown
=
300
;
export
const
countDown
=
300
;
...
@@ -228,9 +235,9 @@ export namespace MConfigs {
...
@@ -228,9 +235,9 @@ export namespace MConfigs {
url
:
"http://activity-2.m.duiba.com.cn/customShare/share?id=3651"
url
:
"http://activity-2.m.duiba.com.cn/customShare/share?id=3651"
}
}
export
const
toAppUrl
=
"http://www.baidu.com"
export
const
toAppUrl
=
"http://www.baidu.com"
;
export
const
wxMoreUrl
=
"http://www.baidu.com"
export
const
wxMoreUrl
=
"http://www.baidu.com"
;
}
}
...
...
src/custom/ShootPlanet/MConst.ts
View file @
2848e78e
export
namespace
MConst
{
export
namespace
MConst
{
export
const
MaxColorIndex
=
5
;
export
const
MaxColorIndex
=
5
;
export
const
DesignResolution
=
{
export
const
DesignResolution
=
{
x
:
750
,
width
:
750
,
y
:
1624
height
:
1624
};
};
export
const
GroundLine
=
1110
;
export
const
GroundLine
=
1110
;
export
const
BulletSpeedValue
=
20
;
export
const
BulletFireSpeed
=
{
export
const
BulletFireSpeed
=
{
min
:
10
,
min
:
10
,
max
:
20
max
:
20
...
@@ -20,15 +19,13 @@ export namespace MConst {
...
@@ -20,15 +19,13 @@ export namespace MConst {
offset
:
0.5
offset
:
0.5
}
}
export
const
BallRotateSpeed
=
0.7
;
export
const
BallRotateSpeed
=
0.7
;
export
const
BulletWidth
=
14
;
// export const BulletWidth = 14;
export
const
BulletDisperseFrameNum
=
4
;
export
const
BallInitPosY
=
1206
*
0.25
;
export
const
BallInitPosY
=
1206
*
0.25
;
export
const
CreateBallInterval
=
1000
;
export
const
CreateBallInterval
=
1000
;
export
const
ReviveCardId
=
"sp_1"
;
export
const
ReviveCardId
=
"sp_1"
;
export
const
ConstantSubmitScoreNum
=
30000
;
export
const
ConstantSubmitScoreNum
=
30000
;
export
const
DefaultBallWidth
=
224
;
export
const
DefaultBallWidth
=
224
;
export
const
DefaultRingWidth
=
672
*
0.744
;
export
const
DefaultStarSize
=
{
export
const
DefaultStarSize
=
{
width
:
76
*
0.744
,
width
:
76
*
0.744
,
height
:
72
*
0.744
height
:
72
*
0.744
...
...
src/custom/ShootPlanet/MEvent.ts
0 → 100644
View file @
2848e78e
interface
MEventData
<
T
>
{
callback
:
T
,
thisObj
:
any
,
bindFunc
?:
any
}
export
default
class
MEvent
<
T
extends
Function
>
{
private
list
:
MEventData
<
T
>
[]
=
[];
private
isTraversing
=
false
;
private
deleteList
:
MEventData
<
T
>
[]
=
[];
public
add
(
callback
:
T
,
thisObj
?:
any
)
{
this
.
list
.
push
({
callback
:
callback
,
thisObj
:
thisObj
,
bindFunc
:
thisObj
?
callback
.
bind
(
thisObj
)
:
undefined
});
}
public
clear
()
{
if
(
this
.
isTraversing
)
{
this
.
deleteList
.
concat
(
this
.
list
);
}
else
{
this
.
list
=
[];
}
}
public
remove
(
callback
:
T
,
thisObj
?:
any
)
{
if
(
this
.
isTraversing
)
{
this
.
deleteList
.
push
({
callback
:
callback
,
thisObj
:
thisObj
});
}
else
{
this
.
list
=
this
.
list
.
filter
(
e
=>
e
.
callback
!==
callback
||
e
.
thisObj
!==
thisObj
);
}
}
public
call
(...
args
:
any
[])
{
this
.
isTraversing
=
true
;
let
item
:
MEventData
<
T
>
=
null
;
for
(
let
i
=
0
;
i
<
this
.
list
.
length
;
i
++
)
{
item
=
this
.
list
[
i
];
if
(
item
.
bindFunc
)
{
item
.
bindFunc
(...
args
);
}
else
{
item
.
callback
(...
args
);
}
}
for
(
let
i
=
0
;
i
<
this
.
deleteList
.
length
;
i
++
)
{
this
.
list
=
this
.
list
.
filter
(
e
=>
e
.
callback
!==
this
.
deleteList
[
i
].
callback
||
e
.
thisObj
!==
this
.
deleteList
[
i
].
thisObj
);
}
this
.
deleteList
=
[];
this
.
isTraversing
=
false
;
}
}
\ No newline at end of file
src/custom/ShootPlanet/MTimer.ts
View file @
2848e78e
const
DefaultDtFactor
=
60
/
1000
;
import
MEvent
from
"./MEvent"
;
export
default
class
MTimer
{
export
default
class
MTimer
{
private
static
onFrameList
:
((
dt
:
number
,
self
:
Function
)
=>
void
)[]
=
[];
public
static
init
()
{
private
static
timerList
:
((
self
:
Function
)
=>
void
)[]
=
[];
startTime
=
Date
.
now
();
engine
.
gameStage
.
addEventListener
(
engine
.
Event
.
ENTER_FRAME
,
onUpdate
,
MTimer
);
document
.
addEventListener
(
"visibilitychange"
,
onVisibilityChange
);
}
public
static
deltaTime
:
number
=
0
;
public
static
destroy
()
{
_onFrame
.
clear
();
engine
.
gameStage
.
removeEventListener
(
engine
.
Event
.
ENTER_FRAME
,
onUpdate
,
MTimer
);
document
.
removeEventListener
(
"visibilitychange"
,
onVisibilityChange
);
}
/**
* 帧间隔
*/
public
static
get
deltaTime
():
number
{
return
_deltaTime
;
}
/**
* 帧间隔系数:当前帧间隔与标准帧间隔(60帧)的比值
*/
public
static
get
dtFactor
()
{
public
static
get
dtFactor
()
{
return
MTimer
.
deltaTime
*
DefaultDtFactor
;
return
MTimer
.
deltaTime
/
DefaultDeltaTime
;
}
}
public
static
init
()
{
/**
engine
.
gameStage
.
addEventListener
(
engine
.
Event
.
ENTER_FRAME
,
()
=>
{
* 注册帧回调函数
for
(
let
i
=
0
;
i
<
MTimer
.
onFrameList
.
length
;
i
++
)
{
*/
MTimer
.
onFrameList
[
i
](
MTimer
.
deltaTime
,
MTimer
.
onFrameList
[
i
]);
/* public static get onFrame(): MEvent<(dt: number) => void> {
}
return _onFrame;
} */
for
(
let
i
=
0
;
i
<
MTimer
.
timerList
.
length
;
i
++
)
{
public
static
onFrame
(
key
:
string
,
callback
:
(
dt
:
number
)
=>
void
,
thisObj
?:
any
)
{
MTimer
.
timerList
[
i
](
MTimer
.
timerList
[
i
]);
if
(
key
)
{
if
(
onFrameCaches
[
key
])
{
_onFrame
.
remove
(
onFrameCaches
[
key
].
callback
,
onFrameCaches
[
key
].
thisObj
);
delete
onFrameCaches
[
key
];
}
}
},
MTimer
);
}
private
static
removeOnFrame
(
callback
:
Function
)
{
onFrameCaches
[
key
]
=
{
MTimer
.
onFrameList
=
MTimer
.
onFrameList
.
filter
(
e
=>
e
!=
callback
);
callback
:
callback
,
thisObj
:
thisObj
};
}
_onFrame
.
add
(
callback
,
thisObj
);
}
}
public
static
set
(
frame
:
number
,
onTimeOut
:
()
=>
void
)
{
/**
* 设置帧计时器
*/
public
static
setFrameTimer
(
frame
:
number
,
onTimeOut
:
()
=>
void
)
{
let
count
=
0
;
let
count
=
0
;
MTimer
.
timerList
.
push
((
self
:
Function
)
=>
{
const
callback
=
()
=>
{
count
+=
MTimer
.
dtFactor
;
if
(
count
>=
frame
)
{
if
(
count
>=
frame
)
{
onTimeOut
();
onTimeOut
();
MTimer
.
timerList
=
MTimer
.
timerList
.
filter
(
e
=>
e
!=
self
);
timerTickEvent
.
remove
(
callback
);
}
else
{
count
+=
MTimer
.
dtFactor
;
}
}
});
}
timerTickEvent
.
add
(
callback
);
}
}
}
public
static
onFrame
(
callback
:
(
deltaTime
:
number
,
remove
?:
()
=>
void
)
=>
void
,
frameCount
?:
number
)
{
const
onFrameCaches
:
{
if
(
typeof
frameCount
!=
"undefined"
)
{
[
key
:
string
]:
{
let
count
=
0
;
callback
:
(
dt
:
number
)
=>
void
,
MTimer
.
onFrameList
.
push
((
deltaTime
:
number
,
self
:
Function
)
=>
{
thisObj
?:
any
callback
(
deltaTime
);
count
+=
MTimer
.
dtFactor
;
if
(
count
>=
frameCount
)
{
MTimer
.
removeOnFrame
(
self
);
}
});
}
else
{
MTimer
.
onFrameList
.
push
((
deltaTime
:
number
,
self
:
Function
)
=>
{
callback
(
deltaTime
,
()
=>
{
MTimer
.
removeOnFrame
(
self
);
});
});
}
}
}
}
=
{};
const
_onFrame
:
MEvent
<
(
dt
:
number
)
=>
void
>
=
new
MEvent
();
const
timerTickEvent
:
MEvent
<
()
=>
void
>
=
new
MEvent
();
const
DefaultDeltaTime
=
1000
/
60
;
let
_deltaTime
:
number
=
0
;
let
startTime
=
0
;
let
lastTime
=
0
;
let
curTime
=
0
;
function
updateDeltaTime
()
{
lastTime
=
curTime
;
curTime
=
Date
.
now
()
-
startTime
;
_deltaTime
=
curTime
-
lastTime
;
}
function
onVisibilityChange
()
{
if
(
document
.
visibilityState
==
"visible"
)
{
curTime
=
Date
.
now
()
-
startTime
;
}
}
function
onUpdate
()
{
updateDeltaTime
();
_onFrame
.
call
(
MTimer
.
deltaTime
);
}
}
\ No newline at end of file
src/custom/ShootPlanet/MTween.ts
View file @
2848e78e
import
{
MUtils
}
from
"./MUtils"
;
import
{
MUtils
}
from
"./MUtils"
;
import
MTimer
from
"./MTimer"
;
import
MTimer
from
"./MTimer"
;
class
MTween
{
class
MTween
Object
{
public
static
readonly
frameRate
=
60
;
public
static
readonly
frameRate
=
60
;
pr
ivate
tweenList
:
MTweenBase
[]
=
[];
pr
otected
tweenList
:
MTweenBase
[]
=
[];
public
currentTween
:
MTweenBase
=
null
;
public
currentTween
:
MTweenBase
=
null
;
public
target
:
object
=
null
public
target
:
object
=
null
...
@@ -16,7 +16,7 @@ class MTween {
...
@@ -16,7 +16,7 @@ class MTween {
return
this
;
return
this
;
}
}
pr
ivate
addTween
(
tween
:
MTweenBase
)
{
pr
otected
addTween
(
tween
:
MTweenBase
)
{
if
(
this
.
currentTween
==
null
)
{
if
(
this
.
currentTween
==
null
)
{
this
.
currentTween
=
tween
;
this
.
currentTween
=
tween
;
}
else
{
}
else
{
...
@@ -29,13 +29,20 @@ class MTween {
...
@@ -29,13 +29,20 @@ class MTween {
return
this
;
return
this
;
}
}
public
set
(
props
:
object
)
{
for
(
let
key
in
props
)
{
this
.
target
[
key
]
=
props
[
key
];
}
return
this
;
}
public
call
(
callback
:
()
=>
void
)
{
public
call
(
callback
:
()
=>
void
)
{
this
.
addTween
(
new
CallbackTween
(
callback
,
0
,
this
));
this
.
addTween
(
new
CallbackTween
(
callback
,
0
,
this
));
return
this
;
return
this
;
}
}
private
toFrameRate
(
duration
:
number
)
{
private
toFrameRate
(
duration
:
number
)
{
return
duration
/
1000
*
MTween
.
frameRate
;
return
duration
/
1000
*
MTween
Object
.
frameRate
;
}
}
public
update
()
{
public
update
()
{
...
@@ -52,11 +59,13 @@ class MTween {
...
@@ -52,11 +59,13 @@ class MTween {
}
}
}
}
abstract
class
MTweenBase
{
abstract
class
MTweenBase
{
private
started
=
false
;
private
started
=
false
;
public
frameCount
:
number
=
0
;
public
frameCount
:
number
=
0
;
protected
tweenObjet
:
MTween
=
null
;
protected
tweenObjet
:
MTween
Object
=
null
;
constructor
(
frameCount
:
number
,
tweenObject
:
MTween
)
{
constructor
(
frameCount
:
number
,
tweenObject
:
MTween
Object
)
{
this
.
tweenObjet
=
tweenObject
;
this
.
tweenObjet
=
tweenObject
;
this
.
frameCount
=
frameCount
;
this
.
frameCount
=
frameCount
;
}
}
...
@@ -75,7 +84,7 @@ abstract class MTweenBase {
...
@@ -75,7 +84,7 @@ abstract class MTweenBase {
class
LinearTween
extends
MTweenBase
{
class
LinearTween
extends
MTweenBase
{
private
once
:
object
=
null
;
private
once
:
object
=
null
;
constructor
(
props
:
object
,
frameCount
:
number
,
tweenObject
:
MTween
)
{
constructor
(
props
:
object
,
frameCount
:
number
,
tweenObject
:
MTween
Object
)
{
super
(
frameCount
,
tweenObject
);
super
(
frameCount
,
tweenObject
);
this
.
once
=
props
;
this
.
once
=
props
;
}
}
...
@@ -113,7 +122,7 @@ class LinearTween extends MTweenBase {
...
@@ -113,7 +122,7 @@ class LinearTween extends MTweenBase {
class
WaitTween
extends
MTweenBase
{
class
WaitTween
extends
MTweenBase
{
private
callback
:
()
=>
void
=
null
;
private
callback
:
()
=>
void
=
null
;
constructor
(
frameCount
:
number
,
tweenObject
:
MTween
,
callback
?:
()
=>
void
)
{
constructor
(
frameCount
:
number
,
tweenObject
:
MTween
Object
,
callback
?:
()
=>
void
)
{
super
(
frameCount
,
tweenObject
);
super
(
frameCount
,
tweenObject
);
this
.
callback
=
callback
;
this
.
callback
=
callback
;
}
}
...
@@ -126,7 +135,7 @@ class WaitTween extends MTweenBase {
...
@@ -126,7 +135,7 @@ class WaitTween extends MTweenBase {
class
CallbackTween
extends
MTweenBase
{
class
CallbackTween
extends
MTweenBase
{
private
callback
:
()
=>
void
=
null
;
private
callback
:
()
=>
void
=
null
;
constructor
(
callback
:
()
=>
void
,
frameCount
:
number
,
tweenObject
:
MTween
)
{
constructor
(
callback
:
()
=>
void
,
frameCount
:
number
,
tweenObject
:
MTween
Object
)
{
super
(
frameCount
,
tweenObject
);
super
(
frameCount
,
tweenObject
);
this
.
callback
=
callback
;
this
.
callback
=
callback
;
}
}
...
@@ -137,54 +146,56 @@ class CallbackTween extends MTweenBase {
...
@@ -137,54 +146,56 @@ class CallbackTween extends MTweenBase {
}
}
}
}
export
default
class
MTweenMgr
{
export
namespace
MTween
{
public
pause
:
boolean
=
false
;
export
let
pause
:
boolean
=
false
;
private
static
_instance
:
MTweenMgr
=
null
;
public
static
get
instance
():
MTweenMgr
{
if
(
!
this
.
_instance
)
{
this
.
_instance
=
new
MTweenMgr
();
}
return
this
.
_instance
;
}
private
tweenObjectList
:
MTween
[]
=
[];
let
tweenObjectList
:
MTweenObject
[]
=
[];
// let tweenAnimationList: TweenAnimation[] = [];
private
removeQueue
:
any
[]
=
[];
let
removeQueue
:
any
[]
=
[];
private
isTraversing
=
false
;
let
isTraversing
=
false
;
public
init
()
{
export
function
init
()
{
// engine.
startTick(this.
update, this);
// engine.
gameStage.addEventListener(engine.Event.ENTER_FRAME,
update, this);
engine
.
gameStage
.
addEventListener
(
engine
.
Event
.
ENTER_FRAME
,
this
.
update
,
this
);
MTimer
.
onFrame
(
"MTween"
,
update
,
this
)
}
}
public
removeTweens
(
target
:
object
)
{
/* export function destroy() {
if
(
this
.
isTraversing
)
{
engine.gameStage.removeEventListener(engine.Event.ENTER_FRAME, update, this);
this
.
removeQueue
.
push
(
target
);
} */
export
function
removeTweens
(
target
:
object
)
{
if
(
isTraversing
)
{
removeQueue
.
push
(
target
);
}
else
{
}
else
{
t
his
.
tweenObjectList
=
this
.
tweenObjectList
.
filter
(
e
=>
e
.
target
!==
target
);
t
weenObjectList
=
tweenObjectList
.
filter
(
e
=>
e
.
target
!==
target
);
}
}
}
}
public
get
(
target
:
object
)
{
export
function
get
(
target
:
object
)
{
let
tween
=
new
MTween
(
target
);
let
tween
=
new
MTween
Object
(
target
);
t
his
.
t
weenObjectList
.
push
(
tween
);
tweenObjectList
.
push
(
tween
);
return
tween
;
return
tween
;
}
}
private
update
()
{
/* export function createAnimation(target: object) {
if
(
this
.
pause
)
return
;
return new TweenAnimation(target);
} */
this
.
isTraversing
=
true
;
function
update
()
{
for
(
let
i
=
0
;
i
<=
this
.
tweenObjectList
.
length
-
1
;
i
++
)
{
if
(
pause
)
return
;
this
.
tweenObjectList
[
i
].
update
();
isTraversing
=
true
;
for
(
let
i
=
0
;
i
<=
tweenObjectList
.
length
-
1
;
i
++
)
{
tweenObjectList
[
i
].
update
();
}
}
this
.
isTraversing
=
false
;
isTraversing
=
false
;
t
his
.
tweenObjectList
=
this
.
tweenObjectList
.
filter
((
tween
)
=>
{
t
weenObjectList
=
tweenObjectList
.
filter
((
tween
)
=>
{
if
(
tween
.
currentTween
==
null
)
return
false
;
if
(
tween
.
currentTween
==
null
)
return
false
;
for
(
let
removeTarget
of
this
.
removeQueue
)
{
for
(
let
removeTarget
of
removeQueue
)
{
if
(
removeTarget
===
tween
.
target
)
{
if
(
removeTarget
===
tween
.
target
)
{
return
false
;
return
false
;
}
}
...
@@ -193,8 +204,53 @@ export default class MTweenMgr {
...
@@ -193,8 +204,53 @@ export default class MTweenMgr {
return
true
;
return
true
;
});
});
this
.
removeQueue
=
[];
removeQueue
=
[];
/* const filter: TweenAnimation[] = [];
let temp: TweenAnimation = null;
for (let i = 0; i < tweenAnimationList.length; i++) {
temp = tweenAnimationList[i];
temp.update();
if (temp.currentTween != null) {
filter.push(temp);
}
}
return
false
;
tweenAnimationList = filter; */
}
}
}
\ No newline at end of file
/* export class TweenAnimation extends MTweenObject {
protected addTween(tween: MTweenBase) {
this.tweenList.push(tween);
}
private pos: number = 0;
public update() {
if (!this.isPlaying) return;
this.currentTween.apply(MTimer.dtFactor);
if (this.currentTween.frameCount <= 0) {
this.pos++;
if (this.pos < this.tweenList.length) {
this.currentTween = this.tweenList[this.pos];
} else {
this.isPlaying = false;
this.currentTween = null;
}
}
}
public play() {
if (this.isPlaying) return;
this.isPlaying = true;
this.pos = 0;
this.currentTween = this.tweenList[0];
tweenAnimationList.push(this);
}
// public onCompleted: () => void;
private isPlaying: boolean = false;
// private inited: boolean = false;
} */
}
src/custom/ShootPlanet/Mgr/DataMgr.ts
0 → 100644
View file @
2848e78e
import
Game
from
"../Game"
export
class
DataMgr
{
private
static
_game
:
Game
=
null
;
public
static
init
(
game
:
Game
)
{
DataMgr
.
_game
=
game
;
}
public
static
get
game
()
{
return
DataMgr
.
_game
;
}
}
\ No newline at end of file
src/custom/ShootPlanet/DebugMgr.ts
→
src/custom/ShootPlanet/
Mgr/
DebugMgr.ts
View file @
2848e78e
/* import GameMgr from "./GameMgr";
import
UILayer
from
"../UILayer"
;
import
MTimer
from
"../MTimer"
;
export default class DebugMgr extends
engine.Contain
er {
export
default
class
DebugMgr
extends
UILay
er
{
public enabled: boolean =
fals
e;
public
enabled
:
boolean
=
tru
e
;
public enabledGraphic: boolean =
fals
e;
public
enabledGraphic
:
boolean
=
tru
e
;
private
shapeMap
=
{};
private
shapeMap
=
{};
private
graphicDebugLayer
:
engine
.
Container
=
null
;
private
graphicDebugLayer
:
engine
.
Container
=
null
;
private uiLayer: engine.
UILay
er = null;
private
uiLayer
:
engine
.
Contain
er
=
null
;
private
log
:
engine
.
Label
=
null
;
private
log
:
engine
.
Label
=
null
;
public
test
:
any
=
null
;
public
test
:
any
=
null
;
private
labelFPS
=
new
engine
.
Label
();
public
onClick
=
()
=>
{
}
public
onClick
=
()
=>
{
}
...
@@ -15,23 +17,29 @@ export default class DebugMgr extends engine.Container {
...
@@ -15,23 +17,29 @@ export default class DebugMgr extends engine.Container {
super
();
super
();
if
(
!
this
.
enabled
)
return
;
if
(
!
this
.
enabled
)
return
;
//创建图形调试层
//创建图形调试层
this.graphicDebugLayer = new engine.Container();
this
.
graphicDebugLayer
=
new
UILayer
();
this.graphicDebugLayer.touchEnabled = false;
this
.
addChild
(
this
.
graphicDebugLayer
);
this
.
addChild
(
this
.
graphicDebugLayer
);
//创建UI层
//创建UI层
this.uiLayer = new engine.UILayer();
this
.
uiLayer
=
new
engine
.
Container
();
this.uiLayer.touchThrough = true;
this
.
addChild
(
this
.
uiLayer
);
this
.
addChild
(
this
.
uiLayer
);
//创建日志标签
//创建帧率标签
this.log = new engine.Label("Log");
this
.
labelFPS
.
size
=
30
;
this
.
labelFPS
.
fillColor
=
"rgba(255,255,255,1)"
;
this
.
labelFPS
.
text
=
"0"
;
this
.
labelFPS
.
x
=
20
;
this
.
labelFPS
.
y
=
20
;
this
.
uiLayer
.
addChild
(
this
.
labelFPS
);
/* this.log = new engine.Label("Log");
this.log.horizontalCenter = 0;
this.log.horizontalCenter = 0;
this.log.top = 50;
this.log.top = 50;
this.log.textColor = 0xffffff;
this.log.textColor = 0xffffff;
this.log.stroke = 0.5;
this.log.stroke = 0.5;
this.log.size = 32;
this.log.size = 32;
this.uiLayer.addChild(this.log);
this.uiLayer.addChild(this.log);
*/
//创建调试按钮
//创建调试按钮
let button = new engine.Label("调试");
/*
let button = new engine.Label("调试");
button.textColor = 0x000000;
button.textColor = 0x000000;
button.borderColor = 0x000000;
button.borderColor = 0x000000;
button.border = true;
button.border = true;
...
@@ -40,7 +48,7 @@ export default class DebugMgr extends engine.Container {
...
@@ -40,7 +48,7 @@ export default class DebugMgr extends engine.Container {
this.uiLayer.addChild(button);
this.uiLayer.addChild(button);
button.onTap(this, () => {
button.onTap(this, () => {
this.onClick();
this.onClick();
});
});
*/
}
}
public
setLog
(
msg
:
string
)
{
public
setLog
(
msg
:
string
)
{
...
@@ -48,33 +56,36 @@ export default class DebugMgr extends engine.Container {
...
@@ -48,33 +56,36 @@ export default class DebugMgr extends engine.Container {
this
.
log
.
text
=
msg
;
this
.
log
.
text
=
msg
;
}
}
public drawRect(rect: engine.Rectangle, style: GraphicDebug.Style = { color: 0x
ff00
00, lineSize: 1 }) {
public
drawRect
(
rect
:
engine
.
Rectangle
,
style
:
GraphicDebug
.
Style
=
{
color
:
0x
00ff
00
,
lineSize
:
1
})
{
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
let
shape
=
new
engine
.
Shape
();
let
shape
=
new
engine
.
Shape
();
shape.graphics.lineStyle(style.lineSize, style.color);
shape
.
beginStroke
(
style
.
color
);
shape.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
shape
.
drawRect
(
rect
.
x
,
rect
.
y
,
rect
.
width
,
rect
.
height
);
shape
.
endStroke
();
this
.
graphicDebugLayer
.
addChild
(
shape
);
this
.
graphicDebugLayer
.
addChild
(
shape
);
}
}
public drawCircle(x: number, y: number, radius: number, style: GraphicDebug.Style = { color: 0x
ff00
00, lineSize: 1 }) {
public
drawCircle
(
x
:
number
,
y
:
number
,
radius
:
number
,
style
:
GraphicDebug
.
Style
=
{
color
:
0x
00ff
00
,
lineSize
:
1
})
{
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
let
shape
=
new
engine
.
Shape
();
let
shape
=
new
engine
.
Shape
();
shape.graphics.lineStyle(style.lineSize, style.color);
shape
.
beginStroke
(
style
.
color
);
shape.graphics.drawCircle(x, y, radius);
shape
.
drawCircle
(
x
,
y
,
radius
);
shape
.
endStroke
();
this
.
graphicDebugLayer
.
addChild
(
shape
);
this
.
graphicDebugLayer
.
addChild
(
shape
);
}
}
public drawLine(line: GraphicDebug.Line, style: GraphicDebug.Style = { color: 0x
ff00
00, lineSize: 1 }) {
public
drawLine
(
line
:
GraphicDebug
.
Line
,
style
:
GraphicDebug
.
Style
=
{
color
:
0x
00ff
00
,
lineSize
:
1
})
{
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
let
shape
=
new
engine
.
Shape
();
let
shape
=
new
engine
.
Shape
();
shape.graphics.lineStyle(style.lineSize, style.color);
shape
.
beginStroke
(
style
.
color
);
shape.graphics.moveTo(line.startX, line.startY);
shape
.
moveTo
(
line
.
startX
,
line
.
startY
);
shape.graphics.lineTo(line.endX, line.endY);
shape
.
lineTo
(
line
.
endX
,
line
.
endY
);
shape
.
endStroke
();
this
.
graphicDebugLayer
.
addChild
(
shape
);
this
.
graphicDebugLayer
.
addChild
(
shape
);
}
}
public updateLine(key: string, line: GraphicDebug.Line, style: GraphicDebug.Style = { color: 0x
ff00
00, lineSize: 1 }) {
public
updateLine
(
key
:
string
,
line
:
GraphicDebug
.
Line
,
style
:
GraphicDebug
.
Style
=
{
color
:
0x
00ff
00
,
lineSize
:
1
})
{
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
let
shape
:
engine
.
Shape
=
this
.
shapeMap
[
key
];
let
shape
:
engine
.
Shape
=
this
.
shapeMap
[
key
];
if
(
!
shape
)
{
if
(
!
shape
)
{
...
@@ -83,13 +94,14 @@ export default class DebugMgr extends engine.Container {
...
@@ -83,13 +94,14 @@ export default class DebugMgr extends engine.Container {
this
.
shapeMap
[
key
]
=
shape
;
this
.
shapeMap
[
key
]
=
shape
;
}
}
shape.graphics.clear();
shape
.
clear
();
shape.graphics.lineStyle(style.lineSize, style.color);
shape
.
beginStroke
(
style
.
color
);
shape.graphics.moveTo(line.startX, line.startY);
shape
.
moveTo
(
line
.
startX
,
line
.
startY
);
shape.graphics.lineTo(line.endX, line.endY);
shape
.
lineTo
(
line
.
endX
,
line
.
endY
);
shape
.
endStroke
();
}
}
public updateRect(key: string, rect: engine.Rectangle, style: GraphicDebug.Style = { color: 0x
ff00
00, lineSize: 1 }) {
public
updateRect
(
key
:
string
,
rect
:
engine
.
Rectangle
,
style
:
GraphicDebug
.
Style
=
{
color
:
0x
00ff
00
,
lineSize
:
1
})
{
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
let
shape
:
engine
.
Shape
=
this
.
shapeMap
[
key
];
let
shape
:
engine
.
Shape
=
this
.
shapeMap
[
key
];
if
(
!
shape
)
{
if
(
!
shape
)
{
...
@@ -98,12 +110,13 @@ export default class DebugMgr extends engine.Container {
...
@@ -98,12 +110,13 @@ export default class DebugMgr extends engine.Container {
this
.
shapeMap
[
key
]
=
shape
;
this
.
shapeMap
[
key
]
=
shape
;
}
}
shape.graphics.clear();
shape
.
clear
();
shape.graphics.lineStyle(style.lineSize, style.color);
shape
.
beginStroke
(
style
.
color
);
shape.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
shape
.
drawRect
(
rect
.
x
,
rect
.
y
,
rect
.
width
,
rect
.
height
);
shape
.
endStroke
();
}
}
public updateCircle(key: string, x: number, y: number, radius: number, style: GraphicDebug.Style = { color: 0x
ff00
00, lineSize: 1 }) {
public
updateCircle
(
key
:
string
,
x
:
number
,
y
:
number
,
radius
:
number
,
style
:
GraphicDebug
.
Style
=
{
color
:
0x
00ff
00
,
lineSize
:
1
})
{
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
let
shape
:
engine
.
Shape
=
this
.
shapeMap
[
key
];
let
shape
:
engine
.
Shape
=
this
.
shapeMap
[
key
];
if
(
!
shape
)
{
if
(
!
shape
)
{
...
@@ -112,16 +125,16 @@ export default class DebugMgr extends engine.Container {
...
@@ -112,16 +125,16 @@ export default class DebugMgr extends engine.Container {
this
.
shapeMap
[
key
]
=
shape
;
this
.
shapeMap
[
key
]
=
shape
;
}
}
shape.graphics.clear();
shape
.
clear
();
shape.graphics.lineStyle(style.lineSize, style.color);
shape
.
beginStroke
(
style
.
color
);
shape.graphics.drawCircle(x, y, radius);
shape
.
drawCircle
(
x
,
y
,
radius
);
shape
.
endStroke
();
}
}
public
clearShape
(
key
:
string
)
{
public
clearShape
(
key
:
string
)
{
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
if
(
!
this
.
enabled
||
!
this
.
enabledGraphic
)
return
;
let
shape
:
engine
.
Shape
=
this
.
shapeMap
[
key
];
let
shape
:
engine
.
Shape
=
this
.
shapeMap
[
key
];
if
(
!
shape
)
{
if
(
!
shape
)
{
console.warn("collider is nonexistent");
return
;
return
;
}
}
...
@@ -129,15 +142,38 @@ export default class DebugMgr extends engine.Container {
...
@@ -129,15 +142,38 @@ export default class DebugMgr extends engine.Container {
shape
.
destroy
();
shape
.
destroy
();
}
}
init
(
context
:
engine
.
Container
)
{
context
.
addChild
(
this
);
MTimer
.
onFrame
(
"DebugMgr"
,
this
.
onUpdate
,
this
);
}
private
lastFrameData
:
{
runTime
:
number
,
frameCount
:
number
}
=
{
runTime
:
0
,
frameCount
:
0
};
private
curFrameData
:
{
runTime
:
number
,
frameCount
:
number
}
=
{
runTime
:
0
,
frameCount
:
0
};
private
resetTimer
=
0
;
private
onUpdate
(
dt
:
number
)
{
this
.
curFrameData
.
runTime
+=
dt
;
this
.
curFrameData
.
frameCount
+=
1
;
this
.
resetTimer
+=
dt
;
let
average
=
(
this
.
curFrameData
.
runTime
+
this
.
lastFrameData
.
runTime
)
/
(
this
.
curFrameData
.
frameCount
+
this
.
lastFrameData
.
frameCount
)
if
(
this
.
resetTimer
>
200
)
{
this
.
labelFPS
.
text
=
Math
.
round
(
1000
/
average
).
toString
();
this
.
lastFrameData
.
runTime
=
this
.
curFrameData
.
runTime
;
this
.
lastFrameData
.
frameCount
=
this
.
curFrameData
.
frameCount
;
this
.
curFrameData
.
runTime
=
0
;
this
.
curFrameData
.
frameCount
=
0
;
this
.
resetTimer
=
0
;
}
}
private
static
_instance
:
DebugMgr
=
null
;
private
static
_instance
:
DebugMgr
=
null
;
public
static
get
instance
():
DebugMgr
{
public
static
get
instance
():
DebugMgr
{
if
(
!
this
.
_instance
)
{
if
(
!
this
.
_instance
)
{
if (engine.gameStage) {
this
.
_instance
=
new
DebugMgr
();
this._instance = new DebugMgr();
engine.gameStage.addChild(this._instance);
} else {
console.error("stage is null,DebugMgr can not instantiate");
}
}
}
return
this
.
_instance
;
return
this
.
_instance
;
...
@@ -155,7 +191,4 @@ export namespace GraphicDebug {
...
@@ -155,7 +191,4 @@ export namespace GraphicDebug {
endX
:
number
;
endX
:
number
;
endY
:
number
;
endY
:
number
;
}
}
}
}
\ No newline at end of file
*/
\ No newline at end of file
src/custom/ShootPlanet/DropBlinkMgr.ts
→
src/custom/ShootPlanet/
Mgr/
DropBlinkMgr.ts
View file @
2848e78e
import
Drop
from
"./Drop"
;
import
Drop
from
".
.
/Drop"
;
import
{
arrayRemove
}
from
"./GUtils
"
;
import
MTimer
from
"../MTimer
"
;
export
default
class
DropBlinkMgr
{
export
default
class
DropBlinkMgr
{
private
static
_instance
:
DropBlinkMgr
=
null
;
private
static
_instance
:
DropBlinkMgr
=
null
;
...
@@ -26,9 +26,14 @@ export default class DropBlinkMgr {
...
@@ -26,9 +26,14 @@ export default class DropBlinkMgr {
}
}
public
static
init
()
{
public
static
init
()
{
engine
.
gameStage
.
addEventListener
(
engine
.
Event
.
ENTER_FRAME
,
DropBlinkMgr
.
instance
.
onUpdate
,
DropBlinkMgr
.
instance
);
MTimer
.
onFrame
(
"DropBlinkMgr"
,
DropBlinkMgr
.
instance
.
onUpdate
,
DropBlinkMgr
.
instance
);
// engine.gameStage.addEventListener(engine.Event.ENTER_FRAME, DropBlinkMgr.instance.onUpdate, DropBlinkMgr.instance);
}
}
/* public static destroy() {
engine.gameStage.addEventListener(engine.Event.ENTER_FRAME, DropBlinkMgr.instance.onUpdate, DropBlinkMgr.instance);
} */
private
frameTimer
:
number
=
0
;
private
frameTimer
:
number
=
0
;
public
onUpdate
()
{
public
onUpdate
()
{
...
...
src/custom/ShootPlanet/Mgr/TextureMgr.ts
0 → 100644
View file @
2848e78e
type
ImgType
=
"star"
|
"ring"
|
"fireworks"
|
"fireworks_line_0"
|
"fireworks_line_1"
;
export
namespace
TextureMgr
{
const
uuids
:
{
[
key
in
ImgType
]:
string
[]
}
=
{
"star"
:
[
"e79f4e51-dbca-45fb-b95a-f52a708e0990"
,
"1a1b529f-bf68-42cb-8a3e-01b21119b322"
,
"999d65ba-f7c8-4939-9868-5f974a278752"
,
"c5743fdf-aadf-4139-b03a-cfd047f85220"
,
"2aaa2535-d4b9-44c4-8fc2-700c8310e534"
],
"ring"
:
[
"b3c78176-5650-4d49-bc00-cfaf048c5940"
,
"134e2eec-e393-4ba3-b8cc-f72270bf17c2"
,
"49092176-3b1c-4ea5-8e02-6050fc5809dd"
,
"15c46813-ac79-4c5f-8a52-e8cded6dadff"
,
"64e64fd6-0426-493e-b003-dcafc7e06eb5"
],
"fireworks"
:
[
"84246c84-3f73-4483-abee-54a0c4db7d6f"
,
"818f5806-9eb4-4e59-ac1f-9bfb6ab06b9b"
,
"fffc4086-409e-453a-9a98-11a6d4236b72"
],
"fireworks_line_0"
:
[
"c76f6d87-7f84-45ed-a9ac-cf8d4dd47026"
,
"1fc4fb96-73b7-4250-8886-3c6976eb1139"
,
"65be7718-f6cd-44d9-89d0-5daf81068316"
],
"fireworks_line_1"
:
[
"10901339-4976-4d38-a3b9-47b7e9025144"
,
"0692b423-6f14-4ba7-884a-7c177f1583c8"
,
"2ddd9477-12de-4f13-bb35-5b255f1624bd"
]
}
const
caches
:
{
[
uuid
:
string
]:
engine
.
Texture
}
=
{};
export
function
get
(
type
:
ImgType
,
index
:
number
)
{
const
uuid
=
uuids
[
type
][
index
];
if
(
!
caches
[
uuid
])
{
caches
[
uuid
]
=
RES
.
getRes
(
uuid
);
}
return
caches
[
uuid
];
}
}
\ No newline at end of file
src/custom/ShootPlanet/MoveObject.ts
View file @
2848e78e
...
@@ -5,8 +5,8 @@ import Game from "./Game";
...
@@ -5,8 +5,8 @@ import Game from "./Game";
export
default
class
MoveObjcet
extends
GameObject
{
export
default
class
MoveObjcet
extends
GameObject
{
public
physics
:
Physics
=
null
;
public
physics
:
Physics
=
null
;
constructor
(
context
?:
Game
)
{
constructor
()
{
super
(
context
);
super
();
this
.
physics
=
this
.
addComponent
(
Physics
);
this
.
physics
=
this
.
addComponent
(
Physics
);
}
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/MovieClipMgr.ts
View file @
2848e78e
import
Pool
,
{
PoolGroup
,
PoolElement
}
from
"./Pool"
;
import
{
PoolGroup
,
PoolElement
}
from
"./Pool"
;
export
default
class
MovieClipMgr
{
export
default
class
MovieClipMgr
{
private
static
_instance
:
MovieClipMgr
=
null
;
private
static
_instance
:
MovieClipMgr
=
null
;
...
@@ -10,9 +10,9 @@ export default class MovieClipMgr {
...
@@ -10,9 +10,9 @@ export default class MovieClipMgr {
return
this
.
_instance
;
return
this
.
_instance
;
}
}
private
movieClipData
:
{
[
name
:
string
]:
engine
.
MovieClipData
}
=
{};
//
private movieClipData: { [name: string]: engine.MovieClipData } = {};
private
pool
=
new
class
extends
PoolGroup
<
PoolMovieClip
>
{
/*
private pool = new class extends PoolGroup<PoolMovieClip>{
createPool(key: string) {
createPool(key: string) {
return new class extends Pool<PoolMovieClip>{
return new class extends Pool<PoolMovieClip>{
createElement() {
createElement() {
...
@@ -20,10 +20,10 @@ export default class MovieClipMgr {
...
@@ -20,10 +20,10 @@ export default class MovieClipMgr {
}
}
}();
}();
}
}
}();
}();
*/
public
load
(
name
:
string
):
boolean
{
public
load
(
name
:
string
):
boolean
{
if
(
typeof
this
.
movieClipData
[
name
]
==
"undefined"
)
{
/*
if (typeof this.movieClipData[name] == "undefined") {
const data = RES.getRes(name + "_json");
const data = RES.getRes(name + "_json");
const txtr = RES.getRes(name + "_png");
const txtr = RES.getRes(name + "_png");
if (!data || !txtr) {
if (!data || !txtr) {
...
@@ -33,26 +33,28 @@ export default class MovieClipMgr {
...
@@ -33,26 +33,28 @@ export default class MovieClipMgr {
this.movieClipData[name] = new engine.MovieClipDataFactory(data, txtr).generateMovieClipData(name);
this.movieClipData[name] = new engine.MovieClipDataFactory(data, txtr).generateMovieClipData(name);
return true;
return true;
} else
} else
return
true
;
return true; */
return
false
;
}
}
public
create
(
name
:
string
)
{
public
create
(
name
:
string
)
{
if
(
typeof
this
.
movieClipData
[
name
]
==
"undefined"
)
{
/* if (typeof this.movieClipData[name] == "undefined") {
if
(
!
this
.
load
(
name
))
{
if (!this.load(name)) {
return
null
;
return null;
}
}
}
}
return
new
PoolMovieClip
(
this
.
movieClipData
[
name
]);
return new PoolMovieClip(this.movieClipData[name]); */
return
null
;
}
}
public
get
(
name
:
string
):
PoolMovieClip
{
/*
public get(name: string): PoolMovieClip {
return
this
.
pool
.
get
(
name
);
return this.pool.
spwan
(name);
}
}
public recycle(name: string, clip: PoolMovieClip) {
public recycle(name: string, clip: PoolMovieClip) {
this.pool.recycle(name, clip);
this.pool.recycle(name, clip);
clip.destroy();
clip.destroy();
}
}
*/
}
}
class
PoolMovieClip
extends
engine
.
MovieClip
implements
PoolElement
{
class
PoolMovieClip
extends
engine
.
MovieClip
implements
PoolElement
{
...
@@ -60,15 +62,16 @@ class PoolMovieClip extends engine.MovieClip implements PoolElement {
...
@@ -60,15 +62,16 @@ class PoolMovieClip extends engine.MovieClip implements PoolElement {
onElementRecycle
()
{
}
onElementRecycle
()
{
}
playOnComplete
():
Promise
<
void
>
{
playOnComplete
():
Promise
<
void
>
{
this
.
gotoAndPlay
(
0
,
1
);
//TODO
// this.gotoAndPlay(0, 1);
return
new
Promise
<
void
>
(
resolve
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
this
.
once
(
engine
.
Event
.
COMPLETE
,
resolve
,
this
);
this
.
once
(
engine
.
Event
.
COMPLETE
,
resolve
,
this
);
});
});
}
}
autoRecyclePlay
(
name
:
string
)
{
autoRecyclePlay
(
name
:
string
)
{
this
.
playOnComplete
().
then
(()
=>
{
/*
this.playOnComplete().then(() => {
MovieClipMgr.instance.recycle(name, this);
MovieClipMgr.instance.recycle(name, this);
});
});
*/
}
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/NetUtils.ts
View file @
2848e78e
import
Net
from
"./Net"
;
import
Net
from
"./Net"
;
import
{
NetManager
}
from
"../../../libs/tw/manager/NetManager"
;
import
{
Buried
}
from
"../../../libs/tw/util/Buried"
;
import
{
MUtils
}
from
"./MUtils"
;
import
{
MUtils
}
from
"./MUtils"
;
import
GameMgr
from
"../Mgr/GameMgr"
;
export
namespace
NetUtils
{
export
namespace
NetUtils
{
export
function
createSgin
(
ticketId
:
number
,
score
:
number
,
gameData
:
any
,
submitToken
:
string
):
string
{
return
window
[
'duiba_md5'
](
ticketId
+
''
+
score
+
''
+
gameData
+
''
+
submitToken
);
}
export
function
getOrderId
()
{
return
Net
.
cache
[
NetUtils
.
getCFG
()[
"doJoin"
]][
"orderId"
];
}
export
function
gameSubmit
(
params
:
{
orderId
:
any
,
score
:
any
,
submitToken
:
any
},
onSuccess
:
(
res
:
any
)
=>
void
,
onFail
?:
(
res
:
any
)
=>
any
)
{
let
sgin
=
createSgin
(
params
.
orderId
,
params
.
score
,
"[]"
,
params
.
submitToken
);
Net
.
sendPost
(
'/hdtool/recon/ngame/ngameSubmit'
,
{
orderId
:
params
.
orderId
,
score
:
params
.
score
,
gameData
:
"[]"
,
sgin
:
sgin
,
dynamicData
:
JSON
.
stringify
(
`{t2:
${
new
Date
().
getTime
()}
}`
),
rankId
:
window
[
"rankId"
]
},
onSuccess
,
onFail
);
}
export
function
ajaxElement
(
onSuccess
:
(
res
:
any
)
=>
void
,
onFail
?:
(
res
:
any
)
=>
void
)
{
let
cfg
=
NetUtils
.
getCFG
();
Net
.
sendPost
(
cfg
[
"getElement"
],
{
hdType
:
cfg
[
"hdType"
],
hdToolId
:
cfg
[
"hdToolId"
],
actId
:
cfg
[
"actId"
],
preview
:
cfg
[
"preview"
]
},
onSuccess
,
onFail
);
}
function
doBuried
(
appIdParam
:
string
,
netManager
:
NetManager
,
callback
:
string
)
{
//初始化埋点数据
Buried
.
init
();
var
appId
=
NetUtils
.
getCFG
()[
"appId"
];
var
oaId
=
NetUtils
.
getCFG
()[
"appId"
];
let
data
=
Buried
.
createExposure
(
appId
+
`.110.
${
appIdParam
}
.1`
,
`202.
${
oaId
}
.0.0`
);
netManager
[
callback
](
data
);
console
.
log
(
"exposure"
,
data
);
}
export
function
doClickBuried
(
appIdParam
:
string
)
{
doBuried
(
appIdParam
,
NetManager
.
ins
,
"clickLog"
);
}
export
function
doShowBuried
(
appIdParam
:
string
)
{
doBuried
(
appIdParam
,
NetManager
.
ins
,
"showLog"
);
}
export
function
encryptSeq
(
seq
:
number
)
{
export
function
encryptSeq
(
seq
:
number
)
{
return
Math
.
round
(
5
*
seq
-
MUtils
.
random
(
0
,
4
));
return
Math
.
round
(
5
*
seq
-
MUtils
.
random
(
0
,
4
));
}
}
...
@@ -84,19 +29,4 @@ export namespace NetUtils {
...
@@ -84,19 +29,4 @@ export namespace NetUtils {
let
end
=
splitArr
[
1
].
indexOf
(
"/"
);
let
end
=
splitArr
[
1
].
indexOf
(
"/"
);
return
windowUrl
.
substr
(
start
,
end
);
return
windowUrl
.
substr
(
start
,
end
);
}
}
export
function
visit
()
{
return
new
Promise
<
any
>
((
resolve
,
reject
)
=>
{
Net
.
sendGet
(
Net
.
Url
.
visit
,
undefined
,
(
res
)
=>
{
GameMgr
.
instance
.
allPeriodEnd
=
res
.
data
.
allPeriodEnd
;
GameMgr
.
instance
.
leftTimes
=
res
.
data
.
leftTimes
;
GameMgr
.
instance
.
leftShareTimes
=
res
.
data
.
leftShareTimes
;
GameMgr
.
instance
.
minEnableCaptchaScore
=
res
.
data
.
minEnableCaptchaScore
;
resolve
(
res
);
},
(
res
)
=>
{
reject
(
res
);
})
});
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/ParticleMgr.ts
deleted
100644 → 0
View file @
b812e83c
import
Pool
from
"./Pool"
;
import
Bullet
from
"./Bullet"
;
import
{
MConst
}
from
"./MConst"
;
import
PoolMgr
from
"./PoolMgr"
;
import
GameMgr
from
"./GameMgr"
;
import
GameObject
from
"./GameObject"
;
/* export default class ParticleMgr {
private data: Bullet[] = [];
private layer: engine.Container = null;
constructor(layer: engine.Container) {
this.layer = layer;
}
create(context: MainScene) {
if (this.data.length > 0) {
let e = this.data.pop();
e.onElementInit();
return e;
} else {
let b = new Bullet(context);
this.layer.addChild(b);
return b;
}
}
destroy(bullet: Bullet) {
bullet.onElementRecycle();
this.data.push(bullet);
}
} */
\ No newline at end of file
src/custom/ShootPlanet/PhycicsSystem.ts
View file @
2848e78e
...
@@ -2,24 +2,31 @@ import Physics from "./Physics";
...
@@ -2,24 +2,31 @@ import Physics from "./Physics";
import
Collider
,
{
CircleCollider
,
RectCollider
,
ColliderType
,
ColliderGroup
,
PointCollider
}
from
"./Collider"
;
import
Collider
,
{
CircleCollider
,
RectCollider
,
ColliderType
,
ColliderGroup
,
PointCollider
}
from
"./Collider"
;
import
{
arrayRemove
}
from
"./GUtils"
;
import
{
arrayRemove
}
from
"./GUtils"
;
import
MTimer
from
"./MTimer"
;
import
MTimer
from
"./MTimer"
;
import
DebugMgr
from
"./Mgr/DebugMgr"
;
let
instanceId1
:
number
=
null
;
let
instanceId1
:
number
=
null
;
let
instanceId2
:
number
=
null
;
let
instanceId2
:
number
=
null
;
export
default
class
PhycicsSystem
{
export
default
class
PhycicsSystem
{
private
static
_instance
:
PhycicsSystem
=
null
;
private
static
_instance
:
PhycicsSystem
=
null
;
public
static
get
instance
():
PhycicsSystem
{
public
static
get
instance
():
PhycicsSystem
{
if
(
!
this
.
_instance
)
{
if
(
!
PhycicsSystem
.
_instance
)
{
this
.
_instance
=
new
PhycicsSystem
();
PhycicsSystem
.
_instance
=
new
PhycicsSystem
();
}
}
return
this
.
_instance
;
return
PhycicsSystem
.
_instance
;
}
}
public
static
init
()
{
public
static
init
()
{
const
ins
=
PhycicsSystem
.
instance
;
const
ins
=
PhycicsSystem
.
instance
;
engine
.
gameStage
.
addEventListener
(
engine
.
Event
.
ENTER_FRAME
,
ins
.
onUpdate
,
ins
);
// engine.gameStage.addEventListener(engine.Event.ENTER_FRAME, ins.onUpdate, ins);
MTimer
.
onFrame
(
"PhycicsSystem"
,
ins
.
onUpdate
,
ins
);
}
}
/* public static destroy() {
const ins = PhycicsSystem.instance;
engine.gameStage.removeEventListener(engine.Event.ENTER_FRAME, ins.onUpdate, ins)
} */
private
_enabled
:
boolean
=
false
;
private
_enabled
:
boolean
=
false
;
public
set
enabled
(
v
:
boolean
)
{
public
set
enabled
(
v
:
boolean
)
{
this
.
_enabled
=
v
;
this
.
_enabled
=
v
;
...
@@ -98,11 +105,20 @@ export default class PhycicsSystem {
...
@@ -98,11 +105,20 @@ export default class PhycicsSystem {
return
false
;
return
false
;
});
});
// DebugMgr.instance.clearShape(collider.owner.instanceId.toString());
this
.
colliderList
[
collider
.
group
]
=
arrayRemove
(
this
.
colliderList
[
collider
.
group
],
collider
);
this
.
colliderList
[
collider
.
group
]
=
arrayRemove
(
this
.
colliderList
[
collider
.
group
],
collider
);
}
}
/**检测碰撞 */
/**检测碰撞 */
public
detectCollision
()
{
public
detectCollision
()
{
/* for (let i of this.colliderList) {
for (let j of i) {
this.drawCollider(j);
}
} */
//查找所有碰撞
//查找所有碰撞
let
i
=
0
,
let
i
=
0
,
j
=
0
,
j
=
0
,
...
@@ -153,6 +169,26 @@ export default class PhycicsSystem {
...
@@ -153,6 +169,26 @@ export default class PhycicsSystem {
}
}
}
}
}
}
private
drawCollider
(
collider
:
Collider
)
{
switch
(
collider
.
type
)
{
case
ColliderType
.
Circle
:
let
circleCollider
=
collider
as
CircleCollider
;
let
worldCenter
=
[];
collider
.
getWorldPosition
(
worldCenter
)
DebugMgr
.
instance
.
updateCircle
(
collider
.
owner
.
instanceId
.
toString
(),
worldCenter
[
0
],
worldCenter
[
1
],
circleCollider
.
radius
);
break
;
case
ColliderType
.
Rect
:
let
rectCollider
=
collider
as
RectCollider
;
let
worldPos
=
[];
rectCollider
.
getWorldPosition
(
worldPos
);
DebugMgr
.
instance
.
updateRect
(
rectCollider
.
owner
.
instanceId
.
toString
(),
new
engine
.
Rectangle
(
worldPos
[
0
],
worldPos
[
1
],
rectCollider
.
rect
.
width
,
rectCollider
.
rect
.
height
));
break
;
}
}
}
}
function
callDetectFunc
(
collider1
:
Collider
,
collider2
:
Collider
):
boolean
{
function
callDetectFunc
(
collider1
:
Collider
,
collider2
:
Collider
):
boolean
{
...
...
src/custom/ShootPlanet/PlayerController.ts
View file @
2848e78e
import
{
MConst
}
from
"./MConst"
;
import
{
MConfigs
}
from
"./MConfigs"
;
export
default
class
PlayerController
extends
engine
.
Container
{
export
default
class
PlayerController
extends
engine
.
Container
{
public
onTouchMove
:
(
deltaX
:
number
)
=>
void
=
null
;
public
onTouchMove
:
(
deltaX
:
number
)
=>
void
=
null
;
...
@@ -5,23 +8,30 @@ export default class PlayerController extends engine.Container {
...
@@ -5,23 +8,30 @@ export default class PlayerController extends engine.Container {
private
lastX
:
number
=
null
;
private
lastX
:
number
=
null
;
constructor
()
{
constructor
()
{
super
();
super
();
this
.
width
=
engine
.
gameStage
.
width
;
this
.
width
=
MConst
.
DesignResolution
.
width
;
this
.
height
=
engine
.
gameStage
.
height
;
this
.
height
=
MConst
.
DesignResolution
.
height
;
this
.
addEventListener
(
engine
.
MouseEvent
.
MOUSE_DOWN
,
(
e
:
engine
.
MouseEvent
)
=>
{
this
.
addEventListener
(
engine
.
MouseEvent
.
MOUSE_DOWN
,
(
e
:
engine
.
MouseEvent
)
=>
{
this
.
touchId
=
e
.
instanceId
;
this
.
touchId
=
e
.
instanceId
;
this
.
lastX
=
e
.
stage
X
;
this
.
lastX
=
e
.
client
X
;
},
this
);
},
this
);
this
.
addEventListener
(
engine
.
MouseEvent
.
MOUSE_MOVE
,
(
e
:
engine
.
MouseEvent
)
=>
{
this
.
addEventListener
(
engine
.
MouseEvent
.
MOUSE_MOVE
,
(
e
:
engine
.
MouseEvent
)
=>
{
if
(
e
.
instanceId
!=
this
.
touchId
||
this
.
touchId
==
null
||
this
.
lastX
==
null
)
return
;
if
(
e
.
instanceId
!=
this
.
touchId
||
this
.
touchId
==
null
||
this
.
lastX
==
null
)
return
;
this
.
onTouchMove
&&
this
.
onTouchMove
(
e
.
stage
X
-
this
.
lastX
)
this
.
onTouchMove
&&
this
.
onTouchMove
(
e
.
client
X
-
this
.
lastX
)
this
.
lastX
=
e
.
stage
X
;
this
.
lastX
=
e
.
client
X
;
},
this
);
},
this
);
this
.
remove
EventListener
(
engine
.
MouseEvent
.
MOUSE_UP
,
(
e
:
engine
.
MouseEvent
)
=>
{
this
.
add
EventListener
(
engine
.
MouseEvent
.
MOUSE_UP
,
(
e
:
engine
.
MouseEvent
)
=>
{
if
(
e
.
instanceId
!=
this
.
touchId
)
return
;
if
(
e
.
instanceId
!=
this
.
touchId
)
return
;
this
.
touchId
=
null
;
this
.
touchId
=
null
;
this
.
lastX
=
null
;
this
.
lastX
=
null
;
},
this
);
},
this
);
let
rect
=
new
engine
.
Rect
();
rect
.
width
=
750
;
rect
.
height
=
1624
;
rect
.
fillColor
=
"rgba(255,255,255,1)"
rect
.
alpha
=
0
;
this
.
addChild
(
rect
);
}
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/Pool.ts
View file @
2848e78e
import
{
MUtils
}
from
"./MUtils"
;
import
{
MUtils
}
from
"./MUtils"
;
import
MTweenMgr
from
"./MTween"
;
import
{
MTween
}
from
"./MTween"
;
export
default
abstract
class
Pool
<
T
extends
PoolElement
>
{
export
abstract
class
PoolGroup
<
T
extends
PoolElement
>
{
private
data
:
T
[]
=
[];
protected
data
:
{
[
key
:
string
]:
Pool
<
T
>
}
=
{}
public
recycle
(
key
:
string
,
element
:
T
)
{
public
get
(...
args
:
any
[]):
T
{
this
.
data
[
key
].
recycle
(
element
);
if
(
this
.
data
.
length
>
0
)
{
let
e
=
this
.
data
.
pop
();
e
.
onElementInit
();
return
e
;
}
else
{
return
this
.
createElement
(...
args
);
}
}
public
recycle
(
element
:
T
)
{
MTweenMgr
.
instance
.
removeTweens
(
element
);
element
.
onElementRecycle
();
for
(
let
i
of
this
.
data
)
{
if
(
i
===
element
)
return
;
}
this
.
data
.
push
(
element
);
}
}
p
rotected
abstract
createElement
(...
args
:
any
[]):
T
;
p
ublic
abstract
spwan
(...
args
:
any
[]):
T
;
}
}
export
abstract
class
PoolGroup
<
T
extends
PoolElement
>
{
export
abstract
class
Pool
<
T
extends
PoolElement
>
{
private
data
:
{
protected
data
:
T
[]
=
[];
[
key
:
string
]:
Pool
<
T
>
}
=
{};
public
get
(
key
:
string
):
T
{
public
recycle
(
element
:
T
)
{
return
this
.
getValue
(
key
).
get
();
element
.
onElementRecycle
();
}
this
.
data
.
push
(
element
);
public
recycle
(
key
:
string
,
element
:
T
)
{
this
.
getValue
(
key
).
recycle
(
element
);
}
private
getValue
(
key
:
string
)
{
this
.
data
[
key
]
=
this
.
data
[
key
]
||
this
.
createPool
(
key
);
return
this
.
data
[
key
];
}
}
p
rotected
abstract
createPool
(
key
:
string
):
Pool
<
T
>
;
p
ublic
abstract
spwan
(...
args
:
any
[]):
T
;
}
}
export
interface
PoolElement
{
export
interface
PoolElement
{
/**回收元素时的调用 */
/**回收元素时的调用 */
onElementRecycle
():
void
;
onElementRecycle
():
void
;
onElementInit
():
void
;
onElementInit
():
void
;
poolKey
?:
string
;
}
}
\ No newline at end of file
src/custom/ShootPlanet/PoolMgr.ts
View file @
2848e78e
import
Pool
,
{
PoolElement
}
from
"./Pool"
;
/* import
{ PoolElement } from "./Pool";
import GameObject from "./GameObject";
import GameObject from "./GameObject";
export default abstract class PoolMgr<T extends PoolElement & engine.Container>{
export default abstract class PoolMgr<T extends PoolElement & engine.Container>{
p
rotected
layer
:
engine
.
Container
=
null
;
p
ublic
layer: engine.Container = null;
p
rivate
pool
:
Pool
<
T
>
=
new
class
extends
Pool
<
T
>
{
p
ublic
pool: Pool<T> = new class extends Pool<T>{
private context: PoolMgr<T> = null;
private context: PoolMgr<T> = null;
constructor(context: PoolMgr<T>) {
constructor(context: PoolMgr<T>) {
super();
super();
...
@@ -29,4 +29,4 @@ export default abstract class PoolMgr<T extends PoolElement & engine.Container>{
...
@@ -29,4 +29,4 @@ export default abstract class PoolMgr<T extends PoolElement & engine.Container>{
}
}
abstract createElement(...args: any[]): T;
abstract createElement(...args: any[]): T;
}
} */
\ No newline at end of file
\ No newline at end of file
src/custom/ShootPlanet/Pools/BallPool.ts
0 → 100644
View file @
2848e78e
import
{
Pool
,
PoolGroup
}
from
"../Pool"
;
import
Ball
from
"../Ball"
;
import
Game
from
"../Game"
;
import
{
DataMgr
}
from
"../Mgr/DataMgr"
;
class
BallPool
extends
Pool
<
Ball
>
{
public
spwan
(
sizeIndex
:
number
)
{
let
element
:
Ball
=
null
;
if
(
this
.
data
.
length
>
0
)
{
element
=
this
.
data
.
shift
();
element
.
onElementInit
();
}
else
{
element
=
new
Ball
(
sizeIndex
);
}
DataMgr
.
game
.
_ballList
.
push
(
element
);
return
element
;
}
public
recycle
(
element
:
Ball
)
{
super
.
recycle
(
element
);
DataMgr
.
game
.
_ballList
=
DataMgr
.
game
.
_ballList
.
filter
(
e
=>
e
!==
element
);
}
};
class
BallPoolGroup
extends
PoolGroup
<
Ball
>
{
public
spwan
(
sizeIndex
:
number
)
{
const
key
=
sizeIndex
.
toString
();
if
(
!
this
.
data
[
key
])
{
this
.
data
[
key
]
=
new
BallPool
()
}
let
element
=
this
.
data
[
key
].
spwan
(
sizeIndex
);
element
.
poolKey
=
key
;
return
element
;
}
}
let
ballPool
:
BallPoolGroup
=
new
BallPoolGroup
();
export
default
ballPool
;
\ No newline at end of file
src/custom/ShootPlanet/Pools/BoomEffectPool.ts
0 → 100644
View file @
2848e78e
import
{
Pool
,
PoolElement
,
PoolGroup
}
from
"../Pool"
;
import
{
BoomEffectSprite
}
from
"../BoomEffect"
;
/* import BoomEffect from "../BoomEffect";
import { Pool, PoolGroup } from "../Pool";
class BoomEffectPool extends Pool<BoomEffect> {
public spwan(color: number, size: number): BoomEffect {
if (this.data.length > 0) {
const element = this.data.shift();
element.onElementInit();
return element;
} else {
return new BoomEffect(color, size);
}
}
}
class BoomEffectPoolGroup extends PoolGroup<BoomEffect> {
public spwan(color: number, size: number) {
const key = color.toString() + size.toString();
if (!this.data[key]) {
this.data[key] = new BoomEffectPool()
}
const element = this.data[key].spwan(color, size);
element.poolKey = key;
return element;
}
}
let boomEffectPool = new BoomEffectPoolGroup();
export default boomEffectPool;
*/
src/custom/ShootPlanet/Pools/BulletPool.ts
0 → 100644
View file @
2848e78e
import
Bullet
from
"../Bullet"
;
import
{
Pool
}
from
"../Pool"
;
class
BulletPool
extends
Pool
<
Bullet
>
{
public
spwan
()
{
if
(
this
.
data
.
length
>
0
)
{
const
element
=
this
.
data
.
shift
();
element
.
onElementInit
();
return
element
;
}
else
{
return
new
Bullet
();
}
}
}
let
bulletPool
:
BulletPool
=
new
BulletPool
();
export
default
bulletPool
;
\ No newline at end of file
src/custom/ShootPlanet/Pools/DropPool.ts
0 → 100644
View file @
2848e78e
import
{
Pool
,
PoolGroup
}
from
"../Pool"
;
import
Drop
from
"../Drop"
;
class
DropPool
extends
Pool
<
Drop
>
{
public
spwan
(
id
:
number
)
{
if
(
this
.
data
.
length
>
0
)
{
const
element
=
this
.
data
.
shift
();
element
.
onElementInit
();
return
element
;
}
else
{
return
new
Drop
(
id
);
}
}
}
class
DropPoolGroup
extends
PoolGroup
<
Drop
>
{
public
spwan
(
id
:
string
)
{
if
(
!
this
.
data
[
id
])
{
this
.
data
[
id
]
=
new
DropPool
()
}
return
this
.
data
[
id
].
spwan
(
id
);
}
}
let
dropPool
:
DropPoolGroup
=
new
DropPoolGroup
();
export
default
dropPool
;
\ No newline at end of file
src/custom/ShootPlanet/ShootPlanet.ts
View file @
2848e78e
import
Game
from
"./Game"
;
import
PhycicsSystem
from
"./PhycicsSystem"
;
import
MTimer
from
"./MTimer"
;
import
{
MTween
}
from
"./MTween"
;
import
DropBlinkMgr
from
"./Mgr/DropBlinkMgr"
;
import
Ball
from
"./Ball"
;
import
MEvent
from
"./MEvent"
;
import
{
DataMgr
}
from
"./Mgr/DataMgr"
;
import
DebugMgr
from
"./Mgr/DebugMgr"
;
import
FrameAnimation
from
"./Component/FrameAnimation"
;
import
Drop
from
"./Drop"
;
import
{
SpBoomEffectMgr
}
from
"./SpBoomEffect"
;
/**
/**
* Created by rockyl on 2019-11-22.
* Created by rockyl on 2019-11-22.
*/
*/
export
class
ShootPlanet
extends
engine
.
Container
{
export
class
ShootPlanet
extends
engine
.
Container
{
public
game
:
Game
=
null
;
private
onFrame
:
MEvent
<
(
t
:
number
)
=>
void
>
=
new
MEvent
();
constructor
()
{
constructor
()
{
super
();
super
();
this
.
customProperty
();
this
.
game
=
new
Game
(
this
);
this
.
width
=
750
;
this
.
height
=
1624
;
this
.
addEventListener
(
engine
.
Event
.
REMOVED_FROM_STAGE
,
this
.
onDestroy
,
this
);
this
.
init
();
this
.
init
();
let
rect
=
new
engine
.
Rect
();
rect
.
width
=
100
;
rect
.
height
=
100
;
this
.
addChild
(
rect
);
}
}
private
init
()
{
private
init
()
{
RES
.
getRes
=
function
(
uuid
:
string
)
{
PhycicsSystem
.
init
();
return
engine
.
Texture
.
from
(
uuid
);
MTimer
.
init
();
}
MTween
.
init
();
DropBlinkMgr
.
init
();
DataMgr
.
init
(
this
.
game
);
DebugMgr
.
instance
.
init
(
this
);
MTimer
.
onFrame
(
"FrameAnimation"
,
FrameAnimation
.
onUpdate
,
FrameAnimation
);
MTimer
.
onFrame
(
"SpBoomEffectMgr"
,
SpBoomEffectMgr
.
onUpdate
,
SpBoomEffectMgr
);
}
private
onDestroy
()
{
MTimer
.
destroy
();
}
private
customProperty
()
{
window
[
"RES"
]
=
{
getRes
:
function
(
uuid
:
string
)
{
return
engine
.
Texture
.
from
(
uuid
);
}
};
Math
.
clamp
=
function
(
target
:
number
,
min
:
number
,
max
:
number
)
{
Math
.
clamp
=
function
(
target
:
number
,
min
:
number
,
max
:
number
)
{
if
(
target
>
max
)
target
=
max
;
if
(
target
>
max
)
target
=
max
;
if
(
target
<
min
)
target
=
min
;
if
(
target
<
min
)
target
=
min
;
return
target
;
return
target
;
}
}
Object
.
defineProperty
(
engine
.
Point
,
'length'
,
{
Object
.
defineProperty
(
engine
.
Point
.
prototype
,
'length'
,
{
get
:
function
()
{
get
:
function
()
{
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
);
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
);
}
}
});
});
engine
.
DisplayObject
.
prototype
.
destroy
=
function
()
{
this
.
parent
.
removeChild
(
this
);
}
}
}
}
}
...
...
src/custom/ShootPlanet/SoundMgr.ts
View file @
2848e78e
...
@@ -34,34 +34,31 @@ export default class SoundMgr {
...
@@ -34,34 +34,31 @@ export default class SoundMgr {
this
.
_musicEnabled
=
v
;
this
.
_musicEnabled
=
v
;
}
}
private
music
:
engine
.
=
null
;
//
private music: engine. = null;
private
musicChannel
:
engine
.
SoundChannel
=
null
;
//
private musicChannel: engine.SoundChannel = null;
private
loopChannelMap
:
{
[
name
:
string
]:
engine
.
SoundChannel
}
=
{}
//
private loopChannelMap: { [name: string]: engine.SoundChannel } = {}
private
effectPool
:
{
[
name
:
string
]:
PoolSound
[]
}
=
{}
private
effectPool
:
{
[
name
:
string
]:
PoolSound
[]
}
=
{}
public
firstSeted
=
false
;
public
firstSeted
=
false
;
public
setMusic
(
url
:
string
)
{
public
setMusic
(
url
:
string
)
{
this
.
music
=
RES
.
getRes
(
url
);
// this.music = RES.getRes(url);
/* if (this.musicChannel) {
this.playMusic();
} */
}
}
public
playMusic
()
{
public
playMusic
()
{
if
(
this
.
music
==
null
)
{
/*
if (this.music == null) {
console.warn("music do not set");
console.warn("music do not set");
return;
return;
}
}
this.musicChannel && this.musicChannel.stop();
this.musicChannel && this.musicChannel.stop();
this
.
musicChannel
=
this
.
music
.
play
(
0
,
0
);
this.musicChannel = this.music.play(0, 0);
*/
}
}
public
stopMusic
()
{
public
stopMusic
()
{
this
.
musicChannel
&&
(
this
.
musicChannel
.
stop
());
//
this.musicChannel && (this.musicChannel.stop());
}
}
public
playEffect
(
name
:
string
,
loop
:
boolean
=
false
)
{
public
playEffect
(
name
:
string
,
loop
:
boolean
=
false
)
{
if
(
!
this
.
effectEnabled
)
return
;
/*
if (!this.effectEnabled) return;
let poolSound = this.createSound(name, loop);
let poolSound = this.createSound(name, loop);
let channel = poolSound.sound.play(0, loop ? 0 : 1);
let channel = poolSound.sound.play(0, loop ? 0 : 1);
...
@@ -77,19 +74,19 @@ export default class SoundMgr {
...
@@ -77,19 +74,19 @@ export default class SoundMgr {
resolve();
resolve();
}, this);
}, this);
});
});
}
}
*/
}
}
public
stopLoopEffect
(
name
:
string
)
{
public
stopLoopEffect
(
name
:
string
)
{
if
(
this
.
loopChannelMap
[
name
])
{
/*
if (this.loopChannelMap[name]) {
this.loopChannelMap[name].stop();
this.loopChannelMap[name].stop();
}
}
*/
}
}
private
t
:
number
=
0
;
private
t
:
number
=
0
;
private
createSound
(
name
:
string
,
loop
:
boolean
):
PoolSound
{
private
createSound
(
name
:
string
,
loop
:
boolean
):
PoolSound
{
let
soundList
=
this
.
effectPool
[
name
];
/*
let soundList = this.effectPool[name];
if (!soundList || soundList.length <= 0) {
if (!soundList || soundList.length <= 0) {
let poolSound = new PoolSound(name, RES.getRes(name), loop);
let poolSound = new PoolSound(name, RES.getRes(name), loop);
if (poolSound.name == "shoot_mp3") {
if (poolSound.name == "shoot_mp3") {
...
@@ -98,18 +95,19 @@ export default class SoundMgr {
...
@@ -98,18 +95,19 @@ export default class SoundMgr {
return poolSound;
return poolSound;
} else {
} else {
return soundList.pop();
return soundList.pop();
}
} */
return
null
;
}
}
private
recycleSound
(
poolSound
:
PoolSound
)
{
private
recycleSound
(
poolSound
:
PoolSound
)
{
delete
this
.
loopChannelMap
[
poolSound
.
name
];
/*
delete this.loopChannelMap[poolSound.name];
this.effectPool[poolSound.name] = this.effectPool[poolSound.name] || [];
this.effectPool[poolSound.name] = this.effectPool[poolSound.name] || [];
this
.
effectPool
[
poolSound
.
name
].
push
(
poolSound
);
this.effectPool[poolSound.name].push(poolSound);
*/
}
}
}
}
class
PoolSound
{
class
PoolSound
{
private
loop
=
false
;
/*
private loop = false;
public onRecycle = (sound: PoolSound) => { }
public onRecycle = (sound: PoolSound) => { }
public sound: engine.Sound = null;
public sound: engine.Sound = null;
public name: string = null;
public name: string = null;
...
@@ -117,5 +115,5 @@ class PoolSound {
...
@@ -117,5 +115,5 @@ class PoolSound {
this.name = name;
this.name = name;
this.sound = sound;
this.sound = sound;
this.loop = loop;
this.loop = loop;
}
}
*/
}
}
\ No newline at end of file
src/custom/ShootPlanet/SpBoomEffect.ts
0 → 100644
View file @
2848e78e
import
{
TextureMgr
}
from
"./Mgr/TextureMgr"
;
import
{
MUtils
}
from
"./MUtils"
;
import
MTimer
from
"./MTimer"
;
import
{
Pool
,
PoolGroup
,
PoolElement
}
from
"./Pool"
;
const
InitSpeedValue
:
number
=
0.08
;
const
alphaDuration
:
number
=
300
;
const
alphaPerFrame
:
number
=
1
/
(
alphaDuration
/
(
1000
/
60
));
const
InitAcceleration
:
number
=
-
0.00005
;
const
noAlphaDuration
:
number
=
200
/
(
1000
/
60
);
class
Line
{
public
sprite
:
engine
.
Sprite
=
null
;
private
direction
:
engine
.
Point
=
null
;
private
speedValue
:
number
=
InitSpeedValue
;
constructor
(
parent
:
engine
.
Container
,
type
:
number
,
color
:
number
,
rotation
:
number
)
{
const
sprite
=
new
engine
.
Sprite
(
TextureMgr
.
get
((
"fireworks_line_"
+
type
)
as
any
,
color
));
parent
.
addChild
(
sprite
);
sprite
.
anchorX
=
sprite
.
width
/
2
;
// sprite.y = -sprite.height;
/* let mask = new engine.Graphics();
mask.beginFill(0xffffff);
mask.drawRect(0, 0, sprite.width, 200);
mask.endFill();
parent.addChild(mask);
sprite.mask = mask; */
sprite
.
rotation
=
rotation
;
// mask.rotation = rotation;
// mask.anchorX = sprite.anchorX;
this
.
sprite
=
sprite
;
//计算方向
let
dir
=
MUtils
.
getVector
(
rotation
+
90
)
this
.
direction
=
dir
;
}
private
frameTimer
=
0
;
public
init
()
{
this
.
sprite
.
y
=
-
this
.
sprite
.
height
;
this
.
sprite
.
alpha
=
1
;
this
.
sprite
.
x
=
0
;
this
.
sprite
.
y
=
0
;
this
.
frameTimer
=
0
;
this
.
speedValue
=
InitSpeedValue
;
}
public
onUpdate
(
dt
:
number
)
{
this
.
sprite
.
x
+=
this
.
direction
.
x
*
this
.
speedValue
*
dt
;
this
.
sprite
.
y
+=
this
.
direction
.
y
*
this
.
speedValue
*
dt
;
if
(
this
.
frameTimer
>
noAlphaDuration
)
{
this
.
sprite
.
alpha
-=
alphaPerFrame
*
MTimer
.
dtFactor
;
}
this
.
frameTimer
++
;
/* if (this.speedValue < InitSpeedValue * 0.4) {
} */
/* this.speedValue += InitAcceleration * dt;
if (this.speedValue < 0) {
this.speedValue = 0;
} */
}
}
export
namespace
SpBoomEffectMgr
{
export
let
list
:
SpBoomEffect
[]
=
[];
export
function
onUpdate
(
dt
:
number
)
{
let
filter
:
SpBoomEffect
[]
=
[];
for
(
let
i
of
list
)
{
if
(
i
.
onUpdate
(
dt
))
{
filter
.
push
(
i
);
}
}
list
=
filter
;
}
}
class
SpBoomEffect
extends
engine
.
Container
implements
PoolElement
{
private
lines
:
Line
[]
=
[];
public
onUpdate
(
dt
:
number
)
{
for
(
let
i
of
this
.
lines
)
{
i
.
onUpdate
(
dt
);
}
if
(
this
.
lines
[
0
].
sprite
.
alpha
<=
0
)
{
spBoomEffectPool
.
recycle
(
this
.
poolKey
,
this
);
return
false
;
}
return
true
;
}
constructor
(
color
:
number
,
size
:
number
)
{
super
();
this
.
scaleX
=
this
.
scaleY
=
0.5
*
size
+
0.5
;
this
.
rotation
=
MUtils
.
random
(
0
,
90
);
for
(
let
i
=
0
;
i
<
16
;
i
++
)
{
let
line
=
new
Line
(
this
,
i
%
2
,
color
,
i
*
22.5
);
this
.
lines
.
push
(
line
);
}
SpBoomEffectMgr
.
list
.
push
(
this
);
}
onElementInit
()
{
this
.
visible
=
true
;
this
.
alpha
=
1
;
for
(
let
i
of
this
.
lines
)
{
i
.
init
();
}
SpBoomEffectMgr
.
list
.
push
(
this
);
}
onElementRecycle
()
{
this
.
visible
=
false
;
}
poolKey
:
string
;
}
class
SpBoomEffectPool
extends
Pool
<
SpBoomEffect
>
{
public
spwan
(
color
:
number
,
size
:
number
):
SpBoomEffect
{
if
(
this
.
data
.
length
>
0
)
{
const
element
=
this
.
data
.
shift
();
element
.
onElementInit
();
return
element
;
}
else
{
return
new
SpBoomEffect
(
color
,
size
);
}
}
}
class
SpBoomEffectPoolGroup
extends
PoolGroup
<
SpBoomEffect
>
{
public
spwan
(
color
:
number
,
size
:
number
)
{
const
key
=
color
.
toString
()
+
size
;
if
(
!
this
.
data
[
key
])
{
this
.
data
[
key
]
=
new
SpBoomEffectPool
()
}
const
element
=
this
.
data
[
key
].
spwan
(
color
,
size
);
element
.
poolKey
=
key
;
return
element
;
}
}
let
spBoomEffectPool
:
SpBoomEffectPoolGroup
=
new
SpBoomEffectPoolGroup
();
export
default
spBoomEffectPool
;
src/custom/ShootPlanet/UILayer.ts
0 → 100644
View file @
2848e78e
import
{
MConst
}
from
"./MConst"
;
export
default
class
UILayer
extends
engine
.
Container
{
constructor
()
{
super
();
this
.
width
=
MConst
.
DesignResolution
.
width
;
this
.
height
=
MConst
.
DesignResolution
.
height
;
}
}
\ No newline at end of file
src/custom/ShootPlanet/meta.json
View file @
2848e78e
{
{
"name"
:
"Test1"
,
"name"
:
"ShootPlanet"
,
"props"
:
{
"props"
:
{},
},
"assets"
:
[
"assets"
:
[
{
{
"url"
:
"//yun.duiba.com.cn/aurora/af90069732223c75818c4799b3130bd0f0ad4ff8.png"
,
"url"
:
"//yun.duiba.com.cn/aurora/af90069732223c75818c4799b3130bd0f0ad4ff8.png"
,
"ext"
:
".png"
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/05c41456de4c00c1483fc4f7f0b9b4523611639a.png"
,
"uuid"
:
"a25bc02b-ceae-41a0-9a0f-0b93239991b0"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/44e26ee861316295f6f41a66f3babd89ab26befe.png"
,
"uuid"
:
"d99368b8-af5d-4d9e-981e-7bce3e1c1e84"
,
"ext"
:
".jpg"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/448c4a329ee1f0417c119d813157abc98373a641.png"
,
"uuid"
:
"83144d98-b464-48d2-95ac-5b189f134ba7"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/ff9e4e7d73cd934fed1d0ebd6d75f9d3c1007bf0.png"
,
"uuid"
:
"30fd41be-d702-4511-93d8-5f4609ea4c7d"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/ef6f4b0a082fbba2b46676c170d1ea3e1192813a.png"
,
"uuid"
:
"6211fb97-ba4a-4b79-b178-09dcf63c16d4"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/d54ca738eb758cce049d17484e9f2828dca488f4.png"
,
"uuid"
:
"d8daa113-0d75-4139-9e81-c54b7522c890"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/e0e575987ca98675a02ce8a45e4cc10837accf52.png"
,
"uuid"
:
"fbd26824-9f87-4784-b825-1d824de97023"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/947dc2602f827a38aac5e3db747e0c056cd25fda.png"
,
"uuid"
:
"39843f75-8caa-4cee-bff5-91fb759b691b"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/265b357ab662f116ddfb28561aa68e73cfd455f5.png"
,
"uuid"
:
"bd94b3e6-3c99-490f-95ef-ca0c056d7727"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/7f651660509a1a65edb537e6ddbb322aad865a5d.png"
,
"uuid"
:
"d8eab9fc-104e-4b39-88d6-455ed8632703"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/23925c752d7091d16587fda9e66f697f9f088a6f.png"
,
"uuid"
:
"48f98d84-d30e-4dfe-aa92-c45bde5cefd8"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/eb19ad1517122edb595f71ce99348d1c6963a03a.png"
,
"uuid"
:
"8d42fd9e-907b-4587-9a6f-a634909b8b8a"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/b95848ec6c510347c040f0c11f0d5685fcc110aa.png"
,
"uuid"
:
"09bdff41-2fe3-4298-ad3a-1d2eaf6af778"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/b496f6d0a7c0592910f8e401fec85132846791d4.png"
,
"uuid"
:
"64e64fd6-0426-493e-b003-dcafc7e06eb5"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/69b2f45bc53b8cf619516dc003142ea53a231650.png"
,
"uuid"
:
"15c46813-ac79-4c5f-8a52-e8cded6dadff"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/ba722374a8d157b8c8d383c7fcab67ae13f3a7cc.png"
,
"uuid"
:
"49092176-3b1c-4ea5-8e02-6050fc5809dd"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/8a9ed6505d18483361890f0f5a843824fb4a3457.png"
,
"uuid"
:
"134e2eec-e393-4ba3-b8cc-f72270bf17c2"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/d6391cb9b2d00689bb510137796e8731ea98634e.png"
,
"uuid"
:
"b3c78176-5650-4d49-bc00-cfaf048c5940"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/579d259f801eaa795ead6fe4d51ea3c767e6f392.png"
,
"uuid"
:
"2aaa2535-d4b9-44c4-8fc2-700c8310e534"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/42bc95fc3d175e621e48fb18294e0b2aa0448089.png"
,
"uuid"
:
"c5743fdf-aadf-4139-b03a-cfd047f85220"
,
"ext"
:
".png"
},
{
"url"
:
" //yun.duiba.com.cn/aurora/assets/afff371d4452f4e857b282a25828ed3f500fa849.png"
,
"uuid"
:
"999d65ba-f7c8-4939-9868-5f974a278752"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/2bbe18fa5bb36cc585eae9a09266045e2e7c7d2e.png"
,
"uuid"
:
"1a1b529f-bf68-42cb-8a3e-01b21119b322"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/3f62afe9aeace2a22926f95e6852ab995d4d3ff8.png"
,
"uuid"
:
"e79f4e51-dbca-45fb-b95a-f52a708e0990"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/bea5eaeb4d8234dbc9d411e88d81361abd94bc3f.png"
,
"uuid"
:
"f7221f86-f376-40ce-b0e8-f7ea573ec780"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/7c168eccc053c3f13e6d75e7fe072603a363d1ad.png"
,
"uuid"
:
"c9dbd728-1844-4910-b1ef-e84ce10dc422"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/18585d2fb775f402c0e1c03b0b9963eacd9ab4a3.png"
,
"uuid"
:
"41182131-7050-4b95-9dce-45275b70738d"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/89bfff5b59c0b58566ff45342aba96f597e023a8.png"
,
"uuid"
:
"17d8e000-b290-4972-bcab-cb819a6cf51b"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/6033bbe3a30a4fc1b0040b451a073745c8a4251b.png"
,
"uuid"
:
"3f7faebf-64da-44a4-8152-0c35fcc29fe5"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/65378e37b388fddb8fe5124a8e9bc49ed1a716fb.png"
,
"uuid"
:
"217164f4-a185-429c-8706-818137a4e438"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/5f33588232aca7ce0a1850422d37740ce0a2ffcc.png"
,
"uuid"
:
"b4d821e8-8274-4b60-95d0-47da803ac5cf"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/5fd194c102e8612cd39ce6001347b38b2d0c8a92.png"
,
"uuid"
:
"53c65221-3fbc-41d9-8cef-8a846876fe06"
,
"ext"
:
".png"
},
{
"url"
:
""
,
"uuid"
:
""
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/4b4af30efa87c1ec74e361a505053639f1d8e471.png"
,
"uuid"
:
"ddf5128e-be66-4c00-8505-e4167aac37bc"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/6b0842ba39345e2a77105fc8118c1d867e040925.png"
,
"uuid"
:
"84246c84-3f73-4483-abee-54a0c4db7d6f"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/9bd552a1c56753c2f2f21fc9b6036ee85448bc4b.png"
,
"uuid"
:
"818f5806-9eb4-4e59-ac1f-9bfb6ab06b9b"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/096db2033ffd30cfeb054342c2a8af8c9b0f46b7.png"
,
"uuid"
:
"fffc4086-409e-453a-9a98-11a6d4236b72"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/704c371640166a3400d99e9eb8b56f64a3da7683.png"
,
"uuid"
:
"10901339-4976-4d38-a3b9-47b7e9025144"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/a50ab9c665f406c9b871fbc253c571b19800c949.png"
,
"uuid"
:
"c76f6d87-7f84-45ed-a9ac-cf8d4dd47026"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/9ffe79cc377c2e76744f1794c1d6f3c3539bb25e.png"
,
"uuid"
:
"1fc4fb96-73b7-4250-8886-3c6976eb1139"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/9c8d28ad86b02f9250f395ddfabfbc587e0bc4cf.png"
,
"uuid"
:
"0692b423-6f14-4ba7-884a-7c177f1583c8"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/79e8a046f640c98fd449cec18bbefb12e7684235.png"
,
"uuid"
:
"65be7718-f6cd-44d9-89d0-5daf81068316"
,
"ext"
:
".png"
},
{
"url"
:
"//yun.duiba.com.cn/aurora/assets/dd5a9c4b4cb94bd0049890c0aad320ec539a7e16.png"
,
"uuid"
:
"2ddd9477-12de-4f13-bb35-5b255f1624bd"
,
"ext"
:
".png"
}
}
]
]
}
}
\ No newline at end of file
src/custom/ShootPlanet/test.html
0 → 100644
View file @
2848e78e
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"UTF-8"
>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
/>
<meta
name=
"apple-mobile-web-app-capable"
content=
"yes"
>
<meta
name=
"apple-mobile-web-app-status-bar-style"
content=
"black-translucent"
>
<meta
content=
"telephone=no"
name=
"format-detection"
/>
<title>
我的奖品
</title>
<script>
!
function
(
e
,
i
)
{
var
t
=
e
.
documentElement
,
n
=
navigator
.
userAgent
.
match
(
/iphone|ipod|ipad/gi
),
a
=
n
?
Math
.
min
(
i
.
devicePixelRatio
,
3
)
:
1
,
m
=
"orientationchange"
in
window
?
"orientationchange"
:
"resize"
;
t
.
dataset
.
dpr
=
a
;
for
(
var
d
,
l
,
c
=
!
1
,
o
=
e
.
getElementsByTagName
(
"meta"
),
r
=
0
;
r
<
o
.
length
;
r
++
)
l
=
o
[
r
],
"viewport"
==
l
.
name
&&
(
c
=
!
0
,
d
=
l
);
if
(
c
)
d
.
content
=
"width=device-width,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0,user-scalable=no"
;
else
{
var
o
=
e
.
createElement
(
"meta"
);
o
.
name
=
"viewport"
,
o
.
content
=
"width=device-width,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0,user-scalable=no"
,
t
.
firstElementChild
.
appendChild
(
o
)
}
var
s
=
function
()
{
var
e
=
t
.
clientWidth
;
e
/
a
>
640
&&
(
e
=
640
*
a
),
window
.
remScale
=
e
/
640
,
t
.
style
.
fontSize
=
200
*
(
e
/
640
)
+
"px"
};
s
(),
e
.
addEventListener
&&
i
.
addEventListener
(
m
,
s
,
!
1
)
}(
document
,
window
);
</script>
<script
type=
"text/javascript"
>
if
(
localStorage
&&
localStorage
.
iswebp
)
{
document
.
getElementsByTagName
(
'html'
)[
0
].
setAttribute
(
'duiba-webp'
,
'true'
)
}
</script>
</head>
<body>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"https://yun.duiba.com.cn/h5/common/base_201710241714.css"
>
<link
href=
"//yun.duiba.com.cn/h5/activity_custom/skins/nanjing-record-190807/index.6748f280.css"
rel=
"stylesheet"
>
<div
id=
"db-content"
style=
"display: none;"
>
<!--<a href="javascript:history.go(-1)" class="back1" ></a>-->
<div
class=
"recordBox"
>
<!-- 填充 -->
</div>
<div
class=
"nomore"
>
已经没有更多了!
</div>
<div
style=
"display: none"
class=
"noData"
>
暂无数据
</div>
</div>
<script>
var
CFG
=
CFG
||
{};
CFG
.
needCouponModal
=
false
;
CFG
.
projectId
=
'projectx/'
+
location
.
pathname
.
split
(
'/'
)[
2
];
CFG
.
asyncFiles
=
[
'//yun.duiba.com.cn/h5/activity_custom/skins/nanjing-record-190807/components.5560b2c5.js'
,
'//yun.duiba.com.cn/h5/activity_custom/skins/nanjing-record-190807/components.0e433876.css'
]
</script>
<script
type=
"text/javascript"
crossorigin=
"anonymous"
src=
"https://yun.duiba.com.cn/h5/common/base_201812191516.js"
></script>
<script
type=
"text/javascript"
crossOrigin=
"anonymous"
src=
"//yun.duiba.com.cn/h5/activity_custom/skins/nanjing-record-190807/index.5815e161.js"
></script>
<script
type=
"text/javascript"
src=
"https://m1.cmbc.com.cn/CMBC_MBServer/scripts/js/cmbcForClient.js"
></script>
<script>
var
titleName
=
document
.
title
var
title
=
{
"title"
:
titleName
,
// 标题名
"leftButton"
:
{
// 左按钮
"exist"
:
"true"
,
// true:显示左按钮,false:也显示左按钮,客户端不调用左按钮的返回事件
"name"
:
"返回"
,
// 按钮的说明
"func"
:
"window.history.go(-1)"
// 点击左按钮时,客户端回调服务器的方法
},
"rightButton"
:
{
"exist"
:
"false"
// 不显示右按钮
}
}
setTitleBar
(
title
);
</script>
<script>
/* var oHead = document.querySelector('body');
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = '//yun.duiba.com.cn/webapp/js/vconsole.min.js';
oHead.appendChild(oScript);
oScript.onload = function () {
var vConsole = new VConsole();
} */
</script>
</body>
</html>
\ No newline at end of file
src/custom/ShootPlanet/test.json
0 → 100644
View file @
2848e78e
{
"file"
:
"num2.png"
,
"frames"
:
{
"."
:
{
"x"
:
3
,
"y"
:
215
,
"w"
:
16
,
"h"
:
17
,
"offX"
:
7
,
"offY"
:
49
,
"sourceW"
:
29
,
"sourceH"
:
66
},
"k"
:
{
"x"
:
155
,
"y"
:
3
,
"w"
:
42
,
"h"
:
65
,
"offX"
:
6
,
"offY"
:
0
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"0"
:
{
"x"
:
3
,
"y"
:
144
,
"w"
:
44
,
"h"
:
65
,
"offX"
:
2
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"1"
:
{
"x"
:
145
,
"y"
:
74
,
"w"
:
27
,
"h"
:
65
,
"offX"
:
7
,
"offY"
:
0
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"2"
:
{
"x"
:
53
,
"y"
:
74
,
"w"
:
41
,
"h"
:
64
,
"offX"
:
3
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"3"
:
{
"x"
:
100
,
"y"
:
74
,
"w"
:
39
,
"h"
:
65
,
"offX"
:
5
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"4"
:
{
"x"
:
3
,
"y"
:
3
,
"w"
:
48
,
"h"
:
64
,
"offX"
:
0
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"5"
:
{
"x"
:
53
,
"y"
:
144
,
"w"
:
39
,
"h"
:
65
,
"offX"
:
5
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"6"
:
{
"x"
:
106
,
"y"
:
3
,
"w"
:
43
,
"h"
:
65
,
"offX"
:
3
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"7"
:
{
"x"
:
203
,
"y"
:
3
,
"w"
:
42
,
"h"
:
64
,
"offX"
:
3
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"8"
:
{
"x"
:
3
,
"y"
:
73
,
"w"
:
44
,
"h"
:
65
,
"offX"
:
2
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
},
"9"
:
{
"x"
:
57
,
"y"
:
3
,
"w"
:
43
,
"h"
:
65
,
"offX"
:
2
,
"offY"
:
1
,
"sourceW"
:
48
,
"sourceH"
:
66
}
}
}
\ No newline at end of file
src/custom/ShootPlanet/test.ts
0 → 100644
View file @
2848e78e
let
t
=
{
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment