Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
ai_mz_02
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
template admin
ai_mz_02
Commits
46d5e231
Commit
46d5e231
authored
Feb 24, 2022
by
limingzhe
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 项目名
parent
46e9e036
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
37 additions
and
3296 deletions
+37
-3296
ai_mz_01.meta
assets/ai_mz_01.meta
+0
-12
scene.meta
assets/ai_mz_01/scene.meta
+0
-12
ai_mz_01.js
assets/ai_mz_01/scene/ai_mz_01.js
+0
-3228
ai_mz_01.js.meta
assets/ai_mz_01/scene/ai_mz_01.js.meta
+0
-9
ai_mz_02.fire
assets/ai_mz_02/scene/ai_mz_02.fire
+10
-10
ai_mz_02.js
assets/ai_mz_02/scene/ai_mz_02.js
+27
-25
No files found.
assets/ai_mz_01.meta
deleted
100644 → 0
View file @
46e9e036
{
"ver": "1.1.2",
"uuid": "63b29c15-e518-4cbf-903a-b7fb2083343f",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}
\ No newline at end of file
assets/ai_mz_01/scene.meta
deleted
100644 → 0
View file @
46e9e036
{
"ver": "1.1.2",
"uuid": "e2fe7439-afa6-476f-9d0d-961234d3d77e",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}
\ No newline at end of file
assets/ai_mz_01/scene/ai_mz_01.js
deleted
100644 → 0
View file @
46e9e036
// Learn cc.Class:
// - https://docs.cocos.com/creator/manual/en/scripting/class.html
// Learn Attribute:
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
// import { getSprNode } from "./util";
import
{
getSprNode
,
playAudioByUrl
,
showBtnAnima
,
getScaleRateBy2Node
,
localPosTolocalPos
,
randomSortByArr
,
loadDragonBones
,
playAudio
,
showTrebleFirework
,
getSprNodeByUrl
,
setSprNodeMaxLen
,
delayCall
,
asyncDelay
,
RandomInt
,
exchangeNodePos
,
onHomeworkFinish
,
getMaxScale
,
removeFromArr
}
from
"
../script/util
"
;
cc
.
Class
({
extends
:
cc
.
Component
,
properties
:
{
baseWidth
:
{
default
:
1920
,
type
:
cc
.
Integer
},
baseHeight
:
{
default
:
1200
,
type
:
cc
.
Integer
}
},
onLoad
()
{
cc
.
debug
.
setDisplayStats
(
false
);
this
.
initSceneData
();
this
.
initSize
();
},
initSceneData
()
{
this
.
_imageResList
=
[];
this
.
_audioResList
=
[];
this
.
_animaResList
=
[];
this
.
_timeoutIds
=
[];
this
.
_intervalIds
=
[];
},
_designSize
:
null
,
_frameSize
:
null
,
_mapScaleMin
:
null
,
_mapScaleMax
:
null
,
_cocosScale
:
null
,
canvas
:
null
,
initSize
()
{
// 注意cc.winSize只有在适配后(修改fitHeight/fitWidth后)才能获取到正确的值,因此使用cc.getFrameSize()来获取初始的屏幕大小
let
screen_size
=
cc
.
view
.
getFrameSize
().
width
/
cc
.
view
.
getFrameSize
().
height
let
design_size
=
cc
.
Canvas
.
instance
.
designResolution
.
width
/
cc
.
Canvas
.
instance
.
designResolution
.
height
let
f
=
screen_size
>=
design_size
cc
.
Canvas
.
instance
.
fitHeight
=
f
cc
.
Canvas
.
instance
.
fitWidth
=
!
f
const
frameSize
=
cc
.
view
.
getFrameSize
();
this
.
_frameSize
=
frameSize
;
this
.
_designSize
=
cc
.
view
.
getDesignResolutionSize
();
let
sx
=
cc
.
winSize
.
width
/
frameSize
.
width
;
let
sy
=
cc
.
winSize
.
height
/
frameSize
.
height
;
this
.
_cocosScale
=
Math
.
min
(
sx
,
sy
);
sx
=
frameSize
.
width
/
this
.
_designSize
.
width
;
sy
=
frameSize
.
height
/
this
.
_designSize
.
height
;
this
.
_mapScaleMin
=
Math
.
min
(
sx
,
sy
)
*
this
.
_cocosScale
;
this
.
_mapScaleMax
=
Math
.
max
(
sx
,
sy
)
*
this
.
_cocosScale
;
this
.
canvas
=
cc
.
find
(
'
Canvas
'
);
// cc.log('cc.Canvas: ', cc.Canvas);
},
start
()
{
let
getData
=
this
.
getData
.
bind
(
this
);
if
(
window
&&
window
.
courseware
)
{
getData
=
window
.
courseware
.
getData
;
}
getData
((
data
)
=>
{
console
.
log
(
'
data:
'
,
data
);
this
.
data
=
data
||
this
.
getDefaultData
();
console
.
log
(
'
this.data:
'
,
this
.
data
);
this
.
preloadItem
()
})
},
_imageResList
:
null
,
_audioResList
:
null
,
_animaResList
:
null
,
preloadItem
()
{
this
.
addPreloadImage
();
this
.
addPreloadAudio
();
this
.
addPreloadAnima
();
this
.
preload
();
},
getData
(
func
)
{
if
(
window
&&
window
.
courseware
)
{
window
.
courseware
.
getData
(
func
,
'
dfzx_cocos_dqq
'
);
return
;
}
const
middleLayer
=
cc
.
find
(
'
middleLayer
'
);
if
(
middleLayer
)
{
const
middleLayerComponent
=
middleLayer
.
getComponent
(
'
middleLayer
'
);
middleLayerComponent
.
getData
(
func
);
return
;
}
func
(
this
.
getDefaultData
());
},
getDefaultData
()
{
return
{
"
aiClassData
"
:{
"
time
"
:
60
,
"
startTime
"
:
0
,
"
itemArr
"
:[{
"
gId
"
:
"
0
"
,
"
data
"
:{
"
name
"
:
"
镜头
"
,
"
camera
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#84f466
"
},
"
nickName
"
:
"
镜头
"
},{
"
gId
"
:
"
2
"
,
"
data
"
:{
"
name
"
:
"
龙骨
"
,
"
anima
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffa4e6
"
},
"
nickName
"
:
"
龙骨
"
,
"
skeJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/e3ab840baf83c0b0d571e2420536286f.json
"
,
"
name
"
:
"
鱼_ske.json
"
},
"
texJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/d181f59eb6a4ad6cf124587ca6b34c0e.json
"
,
"
name
"
:
"
鱼_tex.json
"
},
"
texPngData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/f566cca10fd83f62a465b144ac73d483.png
"
,
"
name
"
:
"
鱼_tex.png
"
},
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
1
,
"
x
"
:
"
-0.2
"
}]},{
"
gId
"
:
"
4
"
,
"
data
"
:{
"
name
"
:
"
按钮
"
,
"
pic
"
:
true
,
"
commonProp
"
:
true
},
"
nickName
"
:
"
按钮
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
2
,
"
x
"
:
"
0.2
"
}],
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/790525a2e3b223339c8dfcd6a97361ba.png
"
},{
"
gId
"
:
"
2
"
,
"
data
"
:{
"
name
"
:
"
龙骨
"
,
"
anima
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffa4e6
"
},
"
nickName
"
:
"
龙骨
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
2.975
,
"
x
"
:
"
0.2
"
,
"
y
"
:
"
-0.2
"
,
"
times
"
:
"
1
"
}],
"
skeJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/bd29690a750530cf6e822f6e418ed1ae.json
"
,
"
name
"
:
"
小汽车_ske.json
"
},
"
texJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/bb18572d3c4bb94f8a9afc8ea726c90d.json
"
,
"
name
"
:
"
小汽车_tex.json
"
},
"
texPngData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/84bce64cd4259e604a458d08ddd75bec.png
"
,
"
name
"
:
"
小汽车_tex.png
"
}},{
"
gId
"
:
"
1
"
,
"
data
"
:{
"
name
"
:
"
图片
"
,
"
pic
"
:
true
,
"
fill
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffde00
"
},
"
nickName
"
:
"
图片
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
0.012
}],
"
isFill
"
:
true
,
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/35f003bb6d0e410494d606fd4055ddb4.png
"
},{
"
gId
"
:
"
5
"
,
"
data
"
:{
"
name
"
:
"
重玩按钮
"
,
"
pic
"
:
true
,
"
commonProp
"
:
true
},
"
nickName
"
:
"
重玩按钮
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
5
,
"
y
"
:
"
-0.3
"
}],
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/3a552c7843003f6803267a03546db24b.png
"
}]}}
},
preload
()
{
const
preloadArr
=
this
.
_imageResList
.
concat
(
this
.
_audioResList
).
concat
(
this
.
_animaResList
);
cc
.
assetManager
.
loadAny
(
preloadArr
,
null
,
null
,
(
err
,
data
)
=>
{
// console.log(' preload data, ', data);
this
.
addServerListener
();
// if (window && window["air"]) {
// window["air"].hideAirClassLoading();
// }
});
},
addServerListener
()
{
if
(
window
&&
window
[
"
air
"
])
{
// cc.find('Canvas').opacity = 0;
window
.
air
.
onCourseInScreen
=
(
next
)
=>
{
// cc.find('Canvas').opacity = 255;
this
.
loadEnd
();
next
();
}
window
.
air
.
hideAirClassLoading
();
}
else
{
this
.
loadEnd
();
}
if
(
window
.
air
)
{
window
.
air
.
osmoHandwritingCallback
=
(
data
)
=>
{
if
(
!
data
)
{
console
.
log
(
'
data is not exist!!!
'
);
return
;
}
console
.
log
(
'
osmoHandwritingCallback data:
'
,
data
);
if
(
typeof
(
data
)
==
'
string
'
)
{
console
.
log
(
'
data is string
'
);
const
dataObj
=
JSON
.
parse
(
data
);
this
.
photoEnd
(
dataObj
);
return
;
}
// 哲学逻辑
this
.
photoEnd
(
data
);
}
}
},
addPreloadImage
()
{
const
itemArr
=
this
.
data
.
aiClassData
.
itemArr
;
for
(
let
i
=
0
;
i
<
itemArr
.
length
;
i
++
)
{
const
item
=
itemArr
[
i
];
this
.
_imageResList
.
push
({
url
:
item
.
pic_url
||
''
});
const
picArr
=
item
.
data
.
picArr
if
(
picArr
)
{
for
(
let
j
=
0
;
j
<
picArr
.
length
;
j
++
)
{
this
.
_imageResList
.
push
({
url
:
picArr
[
j
].
pic_url
||
''
});
}
}
}
},
addPreloadAudio
()
{
const
itemArr
=
this
.
data
.
aiClassData
.
itemArr
;
for
(
let
i
=
0
;
i
<
itemArr
.
length
;
i
++
)
{
const
item
=
itemArr
[
i
];
this
.
_audioResList
.
push
({
url
:
item
.
audio_url
||
''
});
const
audioArr
=
item
.
data
.
audioArr
if
(
audioArr
)
{
for
(
let
j
=
0
;
j
<
audioArr
.
length
;
j
++
)
{
this
.
_audioResList
.
push
({
url
:
audioArr
[
j
].
audio_url
||
''
});
}
}
}
},
addPreloadAnima
()
{
const
itemArr
=
this
.
data
.
aiClassData
.
itemArr
;
for
(
let
i
=
0
;
i
<
itemArr
.
length
;
i
++
)
{
const
item
=
itemArr
[
i
];
this
.
_animaResList
.
push
({
url
:
item
.
skeJsonData
?.
url
||
''
});
this
.
_animaResList
.
push
({
url
:
item
.
texJsonData
?.
url
||
''
});
this
.
_animaResList
.
push
({
url
:
item
.
texPngData
?.
url
||
''
});
const
animaArr
=
item
.
data
.
animaArr
if
(
animaArr
)
{
for
(
let
j
=
0
;
j
<
animaArr
.
length
;
j
++
)
{
this
.
_animaResList
.
push
({
url
:
animaArr
[
j
].
skeJsonData
?.
url
||
''
});
this
.
_animaResList
.
push
({
url
:
animaArr
[
j
].
texJsonData
?.
url
||
''
});
this
.
_animaResList
.
push
({
url
:
animaArr
[
j
].
texPngData
?.
url
||
''
});
}
}
}
},
loadEnd
()
{
this
.
initData
();
this
.
initView
();
// this.initMusic();
},
initMusic
()
{
cc
.
assetManager
.
loadRemote
(
this
.
data
.
bg_audio_url
,
(
err
,
clip
)
=>
{
cc
.
audioEngine
.
setMusicVolume
(
0.3
);
const
audioID
=
cc
.
audioEngine
.
playMusic
(
clip
,
true
);
});
},
aiClassLayer
:
null
,
myActionArr
:
null
,
recordTestCount
:
null
,
initData
()
{
this
.
recordTestCount
=
0
;
this
.
curAiClassTime
=
0
;
this
.
myActionArr
=
[];
this
.
initAudioEffect
();
},
rightClip
:
null
,
wrongClip
:
null
,
bigStarClip
:
null
,
btnClip
:
null
,
finishClip
:
null
,
selectClip
:
null
,
starCountClip
:
null
,
initAudioEffect
()
{
this
.
rightClip
=
cc
.
find
(
'
Canvas/res/audio/right
'
).
getComponent
(
cc
.
AudioSource
).
clip
;
this
.
wrongClip
=
cc
.
find
(
'
Canvas/res/audio/wrong
'
).
getComponent
(
cc
.
AudioSource
).
clip
;
this
.
bigStarClip
=
cc
.
find
(
'
Canvas/res/audio/big_star
'
).
getComponent
(
cc
.
AudioSource
).
clip
;
this
.
btnClip
=
cc
.
find
(
'
Canvas/res/audio/btn
'
).
getComponent
(
cc
.
AudioSource
).
clip
;
this
.
finishClip
=
cc
.
find
(
'
Canvas/res/audio/finish
'
).
getComponent
(
cc
.
AudioSource
).
clip
;
this
.
selectClip
=
cc
.
find
(
'
Canvas/res/audio/select
'
).
getComponent
(
cc
.
AudioSource
).
clip
;
this
.
starCountClip
=
cc
.
find
(
'
Canvas/res/audio/star_count
'
).
getComponent
(
cc
.
AudioSource
).
clip
;
},
initView
()
{
this
.
showMask
();
this
.
initAiClass
();
},
showMask
()
{
return
;
const
mask
=
getSprNode
(
'
lianzi
'
);
mask
.
anchorY
=
0
;
mask
.
y
=
-
this
.
canvas
.
height
/
2
;
const
sx
=
this
.
canvas
.
width
/
mask
.
width
;
const
sy
=
this
.
canvas
.
height
/
mask
.
height
;
mask
.
scale
=
Math
.
max
(
sx
,
sy
);
this
.
canvas
.
addChild
(
mask
,
20
);
this
.
mask
=
mask
;
},
hideMask
()
{
return
;
if
(
this
.
mask
)
{
cc
.
tween
(
this
.
mask
)
.
to
(
0.7
,
{
y
:
this
.
canvas
.
height
/
2
})
.
call
(()
=>
{
this
.
aiClassStart
();
this
.
mask
.
active
=
false
;
})
.
start
();
}
},
jumpTargetTime
()
{
console
.
log
(
"
in jumpTargetTime
"
)
const
time
=
this
.
data
.
aiClassData
.
startTime
;
if
(
!
time
)
{
return
;
}
this
.
curAiClassTime
=
Number
(
time
);
const
itemArr
=
this
.
aiClassItemArr
;
for
(
let
i
=
0
;
i
<
itemArr
?.
length
;
i
++
)
{
const
keyArrData
=
itemArr
[
i
].
data
.
keyArrData
;
// console.log('keyArrData.length:', keyArrData.length);
for
(
let
j
=
0
;
j
<
keyArrData
?.
length
;
j
++
)
{
const
keyData
=
keyArrData
[
j
];
if
(
keyData
.
isStart
)
{
continue
;
}
if
(
keyData
.
time
<=
time
)
{
if
(
itemArr
[
i
].
data
.
gId
==
4
||
itemArr
[
i
].
data
.
gId
==
5
)
{
}
else
{
this
.
showJumpKeyData
(
itemArr
[
i
],
keyData
);
if
(
itemArr
[
i
].
data
.
gId
==
2
)
{
console
.
log
(
'
keyData:
'
,
JSON
.
stringify
(
keyData
)
);
console
.
log
(
'
opacity:
'
,
itemArr
[
i
].
opacity
)
console
.
log
(
'
active:
'
,
itemArr
[
i
].
active
)
console
.
log
(
'
i:
'
,
i
)
}
}
keyData
.
isStart
=
true
;
}
else
{
break
;
}
}
}
},
aiClassStart
()
{
this
.
isAiClassStart
=
true
;
},
initAiClass
()
{
this
.
initAiClassLayer
();
this
.
initAiClassItemArr
();
},
initAiClassLayer
()
{
this
.
aiClassLayer
=
new
cc
.
Node
();
this
.
aiClassLayer
.
width
=
this
.
canvas
.
width
;
this
.
aiClassLayer
.
height
=
this
.
canvas
.
height
;
this
.
canvas
.
addChild
(
this
.
aiClassLayer
);
},
initAiClassItemArr
()
{
this
.
aiClassItemArr
=
[];
const
promiseArr
=
[];
const
itemDataArr
=
this
.
data
.
aiClassData
.
itemArr
;
for
(
let
i
=
0
;
i
<
itemDataArr
.
length
;
i
++
)
{
const
itemData
=
itemDataArr
[
i
];
itemData
.
itemIndex
=
i
;
console
.
log
(
'
load itemData:
'
,
JSON
.
stringify
(
itemData
));
// console.log(' load item : ', JSON.stringify(item));
let
item
;
switch
(
itemData
.
gId
.
toString
())
{
case
'
0
'
:
item
=
this
.
getAiCameraItem
(
itemData
);
break
;
case
'
1
'
:
item
=
this
.
getAiPicItem
(
itemData
);
break
;
case
'
2
'
:
item
=
this
.
getAiAnimaItem
(
itemData
);
break
;
case
'
3
'
:
item
=
this
.
getAiAudioItem
(
itemData
);
break
case
'
4
'
:
item
=
this
.
getNormalBtnItem
(
itemData
);
// item = this.getAiQuestionItem(itemData);
break
case
'
5
'
:
item
=
this
.
getReplayBtnItem
(
itemData
);
// item = this.getAiSpeechTestItem(itemData);
break
}
promiseArr
.
push
(
item
);
// if (this.isDestroy) {
// return;
// }
// if (itemData.gId != '0') {
// item.active = false;
// }
// item.data = itemData;
// this.aiClassItemArr.push(item);
}
Promise
.
all
(
promiseArr
).
then
((
result
)
=>
{
console
.
log
(
result
)
//['成功了', 'success']
this
.
allItemLoadEnd
(
result
);
}).
catch
((
error
)
=>
{
console
.
log
(
error
)
})
},
allItemLoadEnd
(
result
)
{
console
.
log
(
'
in allItemLoadEnd:
'
,
result
);
for
(
let
i
=
0
;
i
<
result
.
length
;
i
++
)
{
const
item
=
result
[
i
];
if
(
this
.
isDestroy
)
{
return
;
}
const
{
itemData
}
=
item
;
if
(
itemData
.
gId
!=
'
0
'
)
{
item
.
active
=
false
;
}
item
.
data
=
itemData
;
this
.
aiClassItemArr
.
push
(
item
);
}
this
.
jumpTargetTime
();
this
.
hideMask
();
},
getAiCameraItem
(
itemData
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
const
node
=
this
.
aiClassLayer
;
node
.
isCamera
=
true
;
node
.
itemData
=
itemData
;
resolve
(
node
);
})
},
getAiPicItem
(
itemData
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
getSprNodeByUrl
(
itemData
.
pic_url
,
(
spr
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
const
sprNode
=
spr
.
node
;
let
zIndex
=
1
;
let
scale
=
this
.
_mapScaleMin
;
if
(
itemData
.
isFill
==
true
)
{
zIndex
=
0
;
scale
=
getMaxScale
(
sprNode
,
this
.
canvas
.
width
,
this
.
canvas
.
height
);
}
sprNode
.
scale
=
scale
sprNode
.
baseS
=
sprNode
.
scale
;
this
.
aiClassLayer
.
addChild
(
sprNode
,
zIndex
+
0.0001
*
itemData
.
itemIndex
);
sprNode
.
itemData
=
itemData
;
resolve
(
sprNode
);
});
})
},
getAiAnimaItem
(
itemData
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
const
data
=
itemData
;
const
animaNode
=
new
cc
.
Node
();
// animaNode.name = 'anima_' + data.index;
let
zIndex
=
1
;
this
.
aiClassLayer
.
addChild
(
animaNode
,
zIndex
+
0.0001
*
itemData
.
itemIndex
);
const
dragonDisplay
=
animaNode
.
addComponent
(
dragonBones
.
ArmatureDisplay
);
if
(
!
data
.
texPngData
)
{
return
}
const
image
=
data
.
texPngData
.
url
//"http://staging-teach.cdn.ireadabc.com/5a0c5af3e952acd0ac83a6e5c6f03ff1.png";
const
ske
=
data
.
skeJsonData
.
url
//"http://staging-teach.cdn.ireadabc.com/bd825dcceea298d1146be8067ae3d17f.json";
const
atlas
=
data
.
texJsonData
.
url
//"http://staging-teach.cdn.ireadabc.com/246f8991b729fa3e5a7f4802de828efa.json";
cc
.
loader
.
load
(
image
,
(
error
,
texture
)
=>
{
cc
.
loader
.
load
({
url
:
atlas
,
type
:
'
txt
'
},
(
error
,
atlasJson
)
=>
{
cc
.
loader
.
load
({
url
:
ske
,
type
:
'
txt
'
},
(
error
,
dragonBonesJson
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
const
atlas
=
new
dragonBones
.
DragonBonesAtlasAsset
();
atlas
.
atlasJson
=
atlasJson
;
atlas
.
texture
=
texture
;
const
asset
=
new
dragonBones
.
DragonBonesAsset
();
asset
.
dragonBonesJson
=
dragonBonesJson
;
dragonDisplay
.
dragonAtlasAsset
=
atlas
;
dragonDisplay
.
dragonAsset
=
asset
;
let
json
=
JSON
.
parse
(
asset
.
dragonBonesJson
);
let
armatures
=
json
[
"
armature
"
];
// console.log('armatures: ', armatures);
let
armatureNames
=
[];
for
(
let
i
=
0
;
i
<
armatures
.
length
;
i
++
)
{
armatureNames
.
push
(
armatures
[
i
].
name
);
}
// console.log('armatureNames: ', armatureNames);
if
(
armatureNames
.
length
>
0
)
{
let
defaultArmatureName
=
armatureNames
[
0
];
dragonDisplay
.
armatureName
=
defaultArmatureName
;
// let animationNames = dragonDisplay.getAnimationNames(defaultArmatureName);
let
defaultArmature
=
armatures
[
0
];
let
animations
=
defaultArmature
.
animation
;
let
animationNames
=
[];
for
(
let
i
=
0
;
i
<
animations
.
length
;
i
++
)
{
animationNames
.
push
(
animations
[
i
].
name
);
}
animaNode
.
animationNames
=
animationNames
;
}
animaNode
.
scale
=
this
.
_mapScaleMin
;
animaNode
.
baseS
=
animaNode
.
scale
;
animaNode
.
itemData
=
itemData
;
resolve
(
animaNode
);
});
});
});
})
},
getAiAudioItem
(
itemData
)
{
console
.
log
(
'
in getAiAudioItem:
'
,
itemData
);
return
new
Promise
((
resolve
,
reject
)
=>
{
this
.
getAudioClipByUrl
(
itemData
.
audio_url
,
(
clip
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
console
.
log
(
'
in getAudioClipByUrl end:
'
,
clip
);
if
(
clip
)
{
const
audioNode
=
new
cc
.
Node
();
const
as
=
audioNode
.
addComponent
(
cc
.
AudioSource
);
as
.
clip
=
clip
;
audioNode
.
itemData
=
itemData
;
resolve
(
audioNode
);
}
else
{
reject
();
}
})
})
},
getReplayBtnItem
(
itemData
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
getSprNodeByUrl
(
itemData
.
pic_url
,
(
spr
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
const
sprNode
=
spr
.
node
;
let
zIndex
=
1
;
let
scale
=
this
.
_mapScaleMin
;
sprNode
.
scale
=
scale
sprNode
.
baseS
=
sprNode
.
scale
;
this
.
aiClassLayer
.
addChild
(
sprNode
,
zIndex
+
0.0001
*
itemData
.
itemIndex
);
sprNode
.
itemData
=
itemData
;
sprNode
.
on
(
'
touchstart
'
,
()
=>
{
this
.
normalBtnClick
(
sprNode
);
})
resolve
(
sprNode
);
});
})
},
getNormalBtnItem
(
itemData
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
getSprNodeByUrl
(
itemData
.
pic_url
,
(
spr
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
const
sprNode
=
spr
.
node
;
let
zIndex
=
1
;
let
scale
=
this
.
_mapScaleMin
;
sprNode
.
scale
=
scale
sprNode
.
baseS
=
sprNode
.
scale
;
this
.
aiClassLayer
.
addChild
(
sprNode
,
zIndex
+
0.0001
*
itemData
.
itemIndex
);
sprNode
.
itemData
=
itemData
;
sprNode
.
on
(
'
touchstart
'
,
()
=>
{
this
.
normalBtnClick
(
sprNode
);
})
resolve
(
sprNode
);
});
})
},
getAiSpeechTestItem
(
itemData
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
const
baseLayer
=
new
cc
.
Node
();
// this.aiClassLayer.addChild(questionLayer);
let
picNodeArr
=
[];
let
animaNodeArr
=
[];
let
audioNodeArr
=
[];
const
checkLayerFinish
=
()
=>
{
if
(
this
.
isDestroy
)
{
this
.
reject
();
}
if
(
itemData
.
data
.
picArr
&&
picNodeArr
.
length
!=
itemData
.
data
.
picArr
.
length
)
{
return
;
}
if
(
itemData
.
data
.
animaArr
&&
animaNodeArr
.
length
!=
itemData
.
data
.
animaArr
.
length
)
{
return
;
}
if
(
itemData
.
data
.
audioArr
&&
audioNodeArr
.
length
!=
itemData
.
data
.
audioArr
.
length
)
{
return
;
}
picNodeArr
.
sort
((
a
,
b
)
=>
{
return
a
.
index
-
b
.
index
;
})
animaNodeArr
.
sort
((
a
,
b
)
=>
{
return
a
.
index
-
b
.
index
;
})
audioNodeArr
.
sort
((
a
,
b
)
=>
{
return
a
.
index
-
b
.
index
;
})
baseLayer
.
picNodeArr
=
picNodeArr
;
baseLayer
.
animaNodeArr
=
animaNodeArr
;
baseLayer
.
audioNodeArr
=
audioNodeArr
;
baseLayer
.
itemData
=
itemData
;
resolve
(
baseLayer
);
}
console
.
log
(
'
itemData:
'
,
itemData
);
const
picDataArr
=
itemData
.
data
.
picArr
||
[];
for
(
let
i
=
0
;
i
<
picDataArr
.
length
;
i
++
)
{
this
.
getOneAiPic
(
picDataArr
[
i
].
pic_url
,
false
,
(
sprNode
)
=>
{
sprNode
.
index
=
i
;
sprNode
.
active
=
false
;
this
.
aiClassLayer
.
addChild
(
sprNode
,
sprNode
.
zIndex
+
0.0001
*
itemData
.
itemIndex
);
picNodeArr
.
push
(
sprNode
);
checkLayerFinish
();
})
}
const
animaArr
=
itemData
.
data
.
animaArr
||
[];
for
(
let
i
=
0
;
i
<
animaArr
.
length
;
i
++
)
{
this
.
getOneAiAnima
(
animaArr
[
i
],
(
animaNode
)
=>
{
animaNode
.
index
=
i
;
animaNode
.
active
=
false
;
let
zIndex
=
i
;
this
.
aiClassLayer
.
addChild
(
animaNode
,
zIndex
+
0.0001
*
itemData
.
itemIndex
);
animaNodeArr
.
push
(
animaNode
);
checkLayerFinish
();
})
}
const
audioArr
=
itemData
.
data
.
audioArr
||
[];
for
(
let
i
=
0
;
i
<
audioArr
.
length
;
i
++
)
{
this
.
getOneAiAudio
(
audioArr
[
i
].
audio_url
,
(
audioNode
)
=>
{
audioNode
.
index
=
i
;
audioNode
.
active
=
false
;
audioNodeArr
.
push
(
audioNode
);
checkLayerFinish
();
})
}
})
},
getAiQuestionItem
(
itemData
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
const
questionLayer
=
new
cc
.
Node
();
// this.aiClassLayer.addChild(questionLayer);
let
picNodeArr
=
[];
let
animaNodeArr
=
[];
let
audioNodeArr
=
[];
const
checkLayerFinish
=
()
=>
{
if
(
this
.
isDestroy
)
{
reject
();
}
if
(
picNodeArr
.
length
!=
itemData
.
data
.
picArr
.
length
)
{
return
;
}
if
(
animaNodeArr
.
length
!=
itemData
.
data
.
animaArr
.
length
)
{
return
;
}
if
(
audioNodeArr
.
length
!=
itemData
.
data
.
audioArr
.
length
)
{
return
;
}
picNodeArr
.
sort
((
a
,
b
)
=>
{
return
a
.
index
-
b
.
index
;
})
animaNodeArr
.
sort
((
a
,
b
)
=>
{
return
a
.
index
-
b
.
index
;
})
audioNodeArr
.
sort
((
a
,
b
)
=>
{
return
a
.
index
-
b
.
index
;
})
questionLayer
.
picNodeArr
=
picNodeArr
;
questionLayer
.
animaNodeArr
=
animaNodeArr
;
questionLayer
.
audioNodeArr
=
audioNodeArr
;
questionLayer
.
itemData
=
itemData
;
resolve
(
questionLayer
);
}
console
.
log
(
'
itemData:
'
,
itemData
);
const
picDataArr
=
itemData
.
data
.
picArr
;
for
(
let
i
=
0
;
i
<
picDataArr
.
length
;
i
++
)
{
this
.
getOneAiPic
(
picDataArr
[
i
].
pic_url
,
false
,
(
sprNode
)
=>
{
sprNode
.
index
=
i
;
sprNode
.
active
=
false
;
this
.
aiClassLayer
.
addChild
(
sprNode
,
sprNode
.
zIndex
+
0.0001
*
itemData
.
itemIndex
);
picNodeArr
.
push
(
sprNode
);
checkLayerFinish
();
})
}
const
animaArr
=
itemData
.
data
.
animaArr
;
for
(
let
i
=
0
;
i
<
animaArr
.
length
;
i
++
)
{
this
.
getOneAiAnima
(
animaArr
[
i
],
(
animaNode
)
=>
{
animaNode
.
index
=
i
;
animaNode
.
active
=
false
;
let
zIndex
=
i
;
this
.
aiClassLayer
.
addChild
(
animaNode
,
zIndex
+
0.0001
*
itemData
.
itemIndex
);
animaNodeArr
.
push
(
animaNode
);
checkLayerFinish
();
})
}
const
audioArr
=
itemData
.
data
.
audioArr
;
for
(
let
i
=
0
;
i
<
audioArr
.
length
;
i
++
)
{
this
.
getOneAiAudio
(
audioArr
[
i
].
audio_url
,
(
audioNode
)
=>
{
audioNode
.
index
=
i
;
audioNode
.
active
=
false
;
audioNodeArr
.
push
(
audioNode
);
checkLayerFinish
();
})
}
})
},
getOneAiPic
(
pic_url
,
isFill
,
cb
)
{
if
(
!
pic_url
)
{
cb
(
new
cc
.
Node
());
return
;
}
getSprNodeByUrl
(
pic_url
,
(
spr
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
const
sprNode
=
spr
.
node
;
let
zIndex
=
1
;
let
scale
=
this
.
_mapScaleMin
;
if
(
isFill
==
true
)
{
zIndex
=
0
;
scale
=
getMaxScale
(
sprNode
,
this
.
canvas
.
width
,
this
.
canvas
.
height
);
}
sprNode
.
scale
=
scale
sprNode
.
baseS
=
sprNode
.
scale
;
sprNode
.
zIndex
=
zIndex
;
cb
(
sprNode
);
});
},
getOneAiAnima
(
data
,
cb
)
{
if
(
!
data
?.
texPngData
?.
url
||
!
data
?.
skeJsonData
?.
url
||
!
data
?.
texJsonData
?.
url
)
{
cb
(
new
cc
.
Node
())
return
;
}
const
animaNode
=
new
cc
.
Node
();
// this.aiClassLayer.addChild(animaNode);
const
dragonDisplay
=
animaNode
.
addComponent
(
dragonBones
.
ArmatureDisplay
);
const
image
=
data
.
texPngData
.
url
//"http://staging-teach.cdn.ireadabc.com/5a0c5af3e952acd0ac83a6e5c6f03ff1.png";
const
ske
=
data
.
skeJsonData
.
url
//"http://staging-teach.cdn.ireadabc.com/bd825dcceea298d1146be8067ae3d17f.json";
const
atlas
=
data
.
texJsonData
.
url
//"http://staging-teach.cdn.ireadabc.com/246f8991b729fa3e5a7f4802de828efa.json";
cc
.
loader
.
load
(
image
,
(
error
,
texture
)
=>
{
cc
.
loader
.
load
({
url
:
atlas
,
type
:
'
txt
'
},
(
error
,
atlasJson
)
=>
{
cc
.
loader
.
load
({
url
:
ske
,
type
:
'
txt
'
},
(
error
,
dragonBonesJson
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
const
atlas
=
new
dragonBones
.
DragonBonesAtlasAsset
();
atlas
.
atlasJson
=
atlasJson
;
atlas
.
texture
=
texture
;
const
asset
=
new
dragonBones
.
DragonBonesAsset
();
asset
.
dragonBonesJson
=
dragonBonesJson
;
dragonDisplay
.
dragonAtlasAsset
=
atlas
;
dragonDisplay
.
dragonAsset
=
asset
;
let
json
=
JSON
.
parse
(
asset
.
dragonBonesJson
);
let
armatures
=
json
[
"
armature
"
];
// console.log('armatures: ', armatures);
let
armatureNames
=
[];
for
(
let
i
=
0
;
i
<
armatures
.
length
;
i
++
)
{
armatureNames
.
push
(
armatures
[
i
].
name
);
}
// console.log('armatureNames: ', armatureNames);
if
(
armatureNames
.
length
>
0
)
{
let
defaultArmatureName
=
armatureNames
[
0
];
dragonDisplay
.
armatureName
=
defaultArmatureName
;
// let animationNames = dragonDisplay.getAnimationNames(defaultArmatureName);
let
defaultArmature
=
armatures
[
0
];
let
animations
=
defaultArmature
.
animation
;
let
animationNames
=
[];
for
(
let
i
=
0
;
i
<
animations
.
length
;
i
++
)
{
animationNames
.
push
(
animations
[
i
].
name
);
}
animaNode
.
animationNames
=
animationNames
;
}
animaNode
.
scale
=
this
.
_mapScaleMin
;
animaNode
.
baseS
=
animaNode
.
scale
;
cb
(
animaNode
);
});
});
});
},
getOneAiAudio
(
audio_url
,
cb
)
{
console
.
log
(
'
in getOneAiAudio:
'
,
audio_url
);
if
(
!
audio_url
)
{
cb
(
new
cc
.
Node
());
return
;
}
this
.
getAudioClipByUrl
(
audio_url
,
(
clip
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
if
(
clip
)
{
const
audioNode
=
new
cc
.
Node
();
const
as
=
audioNode
.
addComponent
(
cc
.
AudioSource
);
as
.
clip
=
clip
;
cb
(
audioNode
);
}
else
{
cb
();
}
})
},
normalBtnClick
(
sprNode
)
{
const
{
itemData
}
=
sprNode
;
},
getAudioClipByUrl
(
audio_url
,
cb
)
{
if
(
audio_url
)
{
cc
.
assetManager
.
loadRemote
(
audio_url
,
(
err
,
audioClip
)
=>
{
cb
(
audioClip
);
});
}
else
{
cb
();
}
},
showItemKeyData
(
item
,
keyData
)
{
console
.
log
(
'
in showItemKeyData
'
);
switch
(
item
.
data
.
gId
.
toString
())
{
case
'
0
'
:
this
.
showCameraKeyData
(
item
,
keyData
);
break
;
case
'
1
'
:
this
.
showPicKeyData
(
item
,
keyData
);
break
;
case
'
2
'
:
this
.
showAnimaKeyData
(
item
,
keyData
);
break
;
case
'
3
'
:
this
.
showAudioKeyData
(
item
,
keyData
);
break
;
case
'
4
'
:
this
.
showNormalBtnKeyData
(
item
,
keyData
);
// this.showQuestionKeyData(item, keyData);
break
;
// case '5':
// this.showSpeechTestKeyData(item, keyData);
// break;
}
},
getItemPropertyAiClass
(
item
,
key
)
{
let
tempNum
=
1
;
if
(
item
.
isCamera
)
{
tempNum
=
-
1
;
}
switch
(
key
)
{
case
'
x
'
:
return
item
[
key
]
/
this
.
canvas
.
width
*
tempNum
;
case
'
y
'
:
return
item
[
key
]
/
this
.
canvas
.
height
*
tempNum
;
case
'
scaleX
'
:
case
'
scaleY
'
:
return
item
[
key
]
/
(
item
.
baseS
||
1
);
}
return
item
[
key
];
},
setItemPropertyAiClass
(
item
,
key
,
data
)
{
let
tempNum
=
1
;
if
(
item
.
isCamera
)
{
tempNum
=
-
1
;
}
switch
(
key
)
{
case
"
x
"
:
data
*=
this
.
canvas
.
width
*
tempNum
;
break
;
case
"
y
"
:
data
*=
this
.
canvas
.
height
*
tempNum
;
break
;
case
'
scaleX
'
:
case
'
scaleY
'
:
data
*=
(
item
.
baseS
||
1
);
break
;
case
'
active
'
:
data
=
JSON
.
parse
(
data
);
// case 'zIndex':
// data += 10.0001 * item.itemIndex;
}
item
[
key
]
=
data
;
},
showJumpKeyData
(
item
,
keyData
)
{
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
}
}
if
(
item
.
opacity
>
0
)
{
item
.
active
=
true
;
}
else
{
item
.
active
=
false
;
}
},
showCameraKeyData
(
item
,
keyData
)
{
console
.
log
(
'
in showCameraKeyData
'
);
if
(
item
.
curKeyActionArr
)
{
this
.
cleanCurKeyActionArr
(
item
);
}
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
}
}
const
actionArr
=
[];
const
keyArrData
=
item
.
data
.
keyArrData
;
const
index
=
keyArrData
.
indexOf
(
keyData
);
const
nextKeyData
=
keyArrData
[
index
+
1
];
if
(
nextKeyData
)
{
// 动作变化
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
nextKeyData
[
key
]
&&
(
nextKeyData
[
key
]
!=
keyData
[
key
]))
{
const
changeTime
=
nextKeyData
.
time
-
keyData
.
time
;
const
changeData
=
{};
changeData
[
key
]
=
nextKeyData
[
key
];
const
action
=
this
.
addMyAction
(
item
,
changeTime
,
changeData
);
actionArr
.
push
(
action
);
}
}
console
.
log
(
'
actionArr:
'
,
actionArr
);
item
.
curKeyActionArr
=
actionArr
;
}
},
showPicKeyData
(
item
,
keyData
)
{
if
(
item
.
curKeyActionArr
)
{
this
.
cleanCurKeyActionArr
(
item
);
}
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
}
}
if
(
item
.
opacity
>
0
)
{
item
.
active
=
true
;
}
else
{
item
.
active
=
false
;
}
const
actionArr
=
[];
const
keyArrData
=
item
.
data
.
keyArrData
;
const
index
=
keyArrData
.
indexOf
(
keyData
);
const
nextKeyData
=
keyArrData
[
index
+
1
];
if
(
nextKeyData
)
{
// 动作变化
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
nextKeyData
[
key
]
&&
(
nextKeyData
[
key
]
!=
keyData
[
key
]))
{
const
changeTime
=
nextKeyData
.
time
-
keyData
.
time
;
const
changeData
=
{};
changeData
[
key
]
=
nextKeyData
[
key
];
const
action
=
this
.
addMyAction
(
item
,
changeTime
,
changeData
);
actionArr
.
push
(
action
);
}
}
item
.
curKeyActionArr
=
actionArr
;
}
},
showAnimaKeyData
(
item
,
keyData
)
{
if
(
item
.
curKeyActionArr
)
{
this
.
cleanCurKeyActionArr
(
item
);
}
let
animation
=
item
.
animationNames
[
0
];
let
times
=
-
1
;
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
}
else
{
switch
(
key
)
{
case
'
animation
'
:
animation
=
keyData
[
key
];
break
;
case
'
times
'
:
times
=
keyData
[
key
];
break
;
}
}
}
if
(
item
.
opacity
>
0
)
{
item
.
active
=
true
;
}
else
{
item
.
active
=
false
;
}
const
keyArrData
=
item
.
data
.
keyArrData
;
const
index
=
keyArrData
.
indexOf
(
keyData
);
const
nextKeyData
=
keyArrData
[
index
+
1
];
const
actionArr
=
[];
if
(
nextKeyData
)
{
// 动作变化
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
nextKeyData
[
key
]
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
&&
(
nextKeyData
[
key
]
!=
keyData
[
key
]))
{
const
changeTime
=
nextKeyData
.
time
-
keyData
.
time
;
const
changeData
=
{};
changeData
[
key
]
=
nextKeyData
[
key
];
const
action
=
this
.
addMyAction
(
item
,
changeTime
,
changeData
);
actionArr
.
push
(
action
);
}
}
item
.
curKeyActionArr
=
actionArr
;
}
const
dragonDisplay
=
item
.
getComponent
(
dragonBones
.
ArmatureDisplay
);
dragonDisplay
.
playAnimation
(
animation
,
Number
(
times
));
console
.
log
(
'
anima _ name:
'
,
animation
);
console
.
log
(
'
anima _ times:
'
,
times
);
},
showAudioKeyData
(
item
,
keyData
)
{
console
.
log
(
'
in showAudioKeyData item
'
,
item
);
console
.
log
(
'
in showAudioKeyData keyData
'
,
keyData
);
const
as
=
item
.
getComponent
(
cc
.
AudioSource
);
const
times
=
keyData
.
times
||
1
;
let
curTimes
=
0
const
playAudioKey
=
()
=>
{
playAudio
(
as
.
clip
,
()
=>
{
curTimes
++
;
if
(
times
<=
0
||
curTimes
<
times
)
{
playAudioKey
();
}
})
}
playAudioKey
();
},
showQuestionKeyData
(
item
,
keyData
)
{
console
.
log
(
'
~~item:
'
,
item
);
console
.
log
(
'
~~keyData:
'
,
keyData
);
const
{
panelGroup
}
=
keyData
;
for
(
let
i
=
0
;
i
<
5
;
i
++
)
{
const
groupData
=
panelGroup
[
i
].
data
;
const
groupItem
=
item
.
picNodeArr
[
i
];
for
(
let
key
in
groupData
)
{
if
(
groupItem
[
key
]
!=
null
&&
groupData
[
key
]
!=
null
&&
groupData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
groupItem
,
key
,
groupData
[
key
])
switch
(
i
)
{
case
1
:
groupItem
.
lightSpr
=
item
.
picNodeArr
[
5
];
this
.
setItemPropertyAiClass
(
groupItem
.
lightSpr
,
key
,
groupData
[
key
])
break
;
case
2
:
groupItem
.
lightSpr
=
item
.
picNodeArr
[
6
];
this
.
setItemPropertyAiClass
(
groupItem
.
lightSpr
,
key
,
groupData
[
key
])
break
;
}
}
}
if
(
groupItem
.
opacity
>
0
)
{
groupItem
.
active
=
true
;
}
else
{
groupItem
.
active
=
false
;
}
}
console
.
log
(
'
~panelGroup:
'
,
panelGroup
);
console
.
log
(
'
~item.animaNodeArr:
'
,
item
.
animaNodeArr
);
const
animaStartIndex
=
5
;
for
(
let
i
=
animaStartIndex
;
i
<
panelGroup
.
length
;
i
++
)
{
const
groupData
=
panelGroup
[
i
].
data
;
const
groupItem
=
item
.
animaNodeArr
[
i
-
animaStartIndex
];
let
animation
=
groupItem
.
animationNames
&&
groupItem
.
animationNames
[
0
];
let
times
=
-
1
;
for
(
let
key
in
groupData
)
{
if
(
groupItem
[
key
]
!=
null
&&
groupData
[
key
]
!=
null
&&
groupData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
groupItem
,
key
,
groupData
[
key
])
}
else
{
switch
(
key
)
{
case
'
animation
'
:
animation
=
keyData
[
key
];
break
;
case
'
times
'
:
times
=
keyData
[
key
];
break
;
}
}
}
groupItem
.
curAnimation
=
animation
;
if
(
i
==
panelGroup
.
length
-
1
)
{
groupItem
.
active
=
true
;
this
.
normalAnima
=
groupItem
;
const
dragonDisplay
=
groupItem
.
getComponent
(
dragonBones
.
ArmatureDisplay
);
if
(
dragonDisplay
)
{
dragonDisplay
.
playAnimation
(
animation
,
Number
(
times
));
}
}
}
const
replayBtn
=
item
.
picNodeArr
[
4
];
replayBtn
.
active
=
false
;
this
.
replayBtn
=
replayBtn
;
if
(
keyData
.
appearTime
)
{
this
.
showAppearAnima
(
item
,
keyData
,
()
=>
{
this
.
showQuestionKeyDataStart
(
item
,
keyData
);
});
}
else
{
this
.
showQuestionKeyDataStart
(
item
,
keyData
);
}
},
showSpeechTestKeyData
(
item
,
keyData
)
{
console
.
log
(
'
in showSpeechTestKeyData item:
'
,
item
);
console
.
log
(
'
keyData:
'
,
keyData
);
const
{
panelGroup
}
=
keyData
;
// for(let i=0; i<5; i++) {
// const groupData = panelGroup[i].data;
// const groupItem = item.picNodeArr[i];
// for( let key in groupData ) {
// if (groupItem[key] != null && groupData[key] != null && groupData[key] != '') {
// this.setItemPropertyAiClass(groupItem, key, groupData[key])
// switch(i) {
// case 1:
// groupItem.lightSpr = item.picNodeArr[5];
// this.setItemPropertyAiClass(groupItem.lightSpr, key, groupData[key])
// break;
// case 2:
// groupItem.lightSpr = item.picNodeArr[6];
// this.setItemPropertyAiClass(groupItem.lightSpr, key, groupData[key])
// break;
// }
// }
// }
// if (groupItem.opacity > 0) {
// groupItem.active = true;
// } else {
// groupItem.active = false;
// }
// }
console
.
log
(
'
~panelGroup:
'
,
panelGroup
);
console
.
log
(
'
~item.animaNodeArr:
'
,
item
.
animaNodeArr
);
const
animaStartIndex
=
0
;
for
(
let
i
=
animaStartIndex
;
i
<
panelGroup
.
length
;
i
++
)
{
const
groupData
=
panelGroup
[
i
].
data
;
const
groupItem
=
item
.
animaNodeArr
[
i
-
animaStartIndex
];
let
animation
=
groupItem
.
animationNames
&&
groupItem
.
animationNames
[
0
];
let
times
=
-
1
;
for
(
let
key
in
groupData
)
{
if
(
groupItem
[
key
]
!=
null
&&
groupData
[
key
]
!=
null
&&
groupData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
groupItem
,
key
,
groupData
[
key
])
}
else
{
switch
(
key
)
{
case
'
animation
'
:
animation
=
keyData
[
key
];
break
;
case
'
times
'
:
times
=
keyData
[
key
];
break
;
}
}
}
groupItem
.
curAnimation
=
animation
;
if
(
i
==
panelGroup
.
length
-
1
)
{
groupItem
.
active
=
true
;
this
.
normalAnima
=
groupItem
;
const
dragonDisplay
=
groupItem
.
getComponent
(
dragonBones
.
ArmatureDisplay
);
if
(
dragonDisplay
)
{
dragonDisplay
.
playAnimation
(
animation
,
Number
(
times
));
}
}
}
// const replayBtn = item.picNodeArr[4];
// replayBtn.active = false;
// this.replayBtn = replayBtn;
// if (keyData.appearTime) {
// this.showAppearAnima(item, keyData, () => {
// this.showSpeechTestKeyDataStart(item, keyData);
// });
// } else {
this
.
showSpeechTestKeyDataStart
(
item
);
// }
},
showNormalBtnKeyData
(
item
,
keyData
)
{
if
(
item
.
curKeyActionArr
)
{
this
.
cleanCurKeyActionArr
(
item
);
}
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
}
}
// if (item.opacity > 0) {
// item.active = true;
// } else {
// item.active = false;
// }
// const actionArr = [];
// const keyArrData = item.data.keyArrData;
// const index = keyArrData.indexOf(keyData);
// const nextKeyData = keyArrData[index + 1];
// if (nextKeyData) {
// // 动作变化
// for( let key in keyData ) {
// if (item[key] != null && nextKeyData[key] && (nextKeyData[key] != keyData[key])) {
// const changeTime = nextKeyData.time - keyData.time;
// const changeData = {};
// changeData[key] = nextKeyData[key];
// const action = this.addMyAction(item, changeTime, changeData);
// actionArr.push(action);
// }
// }
// item.curKeyActionArr = actionArr;
// }
},
showSpeechTestKeyDataStart
(
item
)
{
this
.
isAiClassStart
=
false
;
console
.
log
(
'
item.data~~:
'
,
item
.
data
)
const
text
=
item
.
data
.
data
.
labelArr
[
0
].
value
;
this
.
startRecord
(
text
,
item
);
},
startRecord
(
text
,
item
)
{
console
.
log
(
'
in startRecord .. text:
'
,
text
);
console
.
log
(
'
item:
'
,
item
);
const
time
=
Number
(
item
.
data
.
data
.
labelArr
[
1
].
value
)
||
4
;
const
spellingLetter
=
item
.
data
.
data
.
labelArr
[
2
]?.
value
;
if
(
window
.
courseware
)
{
//开始录音
if
(
spellingLetter
)
{
console
.
log
(
'
~letter:
'
,
spellingLetter
);
window
.
courseware
.
startTest
(
text
,
{
"
pronounce
"
:
spellingLetter
});
}
else
{
window
.
courseware
.
startTest
(
text
);
}
}
this
.
_timeoutIds
.
push
(
setTimeout
(()
=>
{
if
(
!
window
.
courseware
)
return
this
.
recrodEnd
({
"
dtLastResponse
"
:
"
2021-09-17 13:36:26:109
"
,
"
refText
"
:
"
I haven't found anything out about him yet.
"
,
"
recordId
"
:
"
6144295213f0a2200000ed93
"
,
"
eof
"
:
1
,
"
result
"
:
{
"
pronunciation
"
:
75
,
"
resource_version
"
:
"
3.1.0
"
,
"
fluency
"
:
60
,
"
rhythm
"
:
90
,
"
kernel_version
"
:
"
5.2.4
"
,
"
overall
"
:
74
,
"
integrity
"
:
100
,
"
duration
"
:
"
6.779
"
,
"
rear_tone
"
:
"
fall
"
,
"
speed
"
:
96
,
},
"
tokenId
"
:
"
6144295408558b08dd000001
"
,
"
applicationId
"
:
"
154838659000009e
"
},
item
)
console
.
log
(
'
record 11
'
)
window
.
courseware
&&
window
.
courseware
.
stopTest
((
data
)
=>
{
console
.
log
(
'
record 22
'
,
data
);
data
=
JSON
.
parse
(
data
);
this
.
recrodEnd
(
data
,
item
);
});
//结束录音
},
time
*
1000
));
},
recrodEnd
(
data
,
item
)
{
console
.
log
(
'
record end
'
);
let
score
=
data
.
result
.
overall
;
this
.
recordTestCount
++
;
if
(
this
.
recordTestCount
>=
2
)
{
console
.
log
(
'
panelGroupShowEnd 2
'
)
this
.
panelGroupShowEnd
(
item
);
return
;
}
if
(
score
>=
80
)
{
this
.
showAnimaRight
(
item
,
()
=>
{
});
this
.
showPanelGroupAudio
(
item
,
0
,
()
=>
{
console
.
log
(
'
panelGroupShowEnd 1
'
)
this
.
panelGroupShowEnd
(
item
);
});
}
else
{
this
.
showAnimaWrong
(
item
,
()
=>
{
});
this
.
showPanelGroupAudio
(
item
,
1
,
()
=>
{
this
.
showAnimaNormal
(
item
);
this
.
showSpeechTestKeyDataStart
(
item
);
});
}
},
showAppearAnima
(
item
,
keyData
,
callback
)
{
const
appearAnim
=
(
node
,
time
,
cb
)
=>
{
node
.
opacity
=
0
;
cc
.
tween
(
node
)
.
to
(
time
,
{
opacity
:
255
})
.
call
(()
=>
{
cb
()
})
.
start
()
}
const
picNodeArr
=
item
.
picNodeArr
;
for
(
let
i
=
0
;
i
<
4
;
i
++
)
{
appearAnim
(
picNodeArr
[
i
],
keyData
.
appearTime
,
()
=>
{
if
(
i
==
0
)
{
callback
&&
callback
();
// this.showQuestionKeyDataStart(item, keyData);
}
})
}
},
showDisappearAnima
(
item
,
keyData
)
{
const
appearAnim
=
(
node
,
time
,
cb
)
=>
{
node
.
opacity
=
255
;
cc
.
tween
(
node
)
.
to
(
time
,
{
opacity
:
0
})
.
call
(()
=>
{
cb
()
})
.
start
()
}
const
picNodeArr
=
item
.
picNodeArr
;
for
(
let
i
=
0
;
i
<
picNodeArr
.
length
;
i
++
)
{
appearAnim
(
picNodeArr
[
i
],
keyData
.
disappearTime
,
()
=>
{
if
(
i
==
0
)
{
this
.
showQuestionKeyDataStart
(
item
,
keyData
);
}
})
}
},
showQuestionKeyDataStart
(
item
,
keyData
)
{
this
.
isAiClassStart
=
false
;
const
option1
=
item
.
picNodeArr
[
1
];
const
option2
=
item
.
picNodeArr
[
2
];
const
commit
=
item
.
picNodeArr
[
3
];
const
replay
=
item
.
picNodeArr
[
4
];
const
option1Light
=
item
.
picNodeArr
[
5
];
const
option2Light
=
item
.
picNodeArr
[
6
];
const
hideOptionLight
=
()
=>
{
option1Light
.
active
=
false
;
option2Light
.
active
=
false
;
option1
.
active
=
true
;
option2
.
active
=
true
;
}
let
selectedId
=
-
1
;
option1
.
on
(
'
touchstart
'
,
()
=>
{
console
.
log
(
'
option1 click
'
)
if
(
selectedId
==
0
)
{
return
;
}
hideOptionLight
();
option1Light
.
active
=
true
;
option1
.
active
=
false
;
selectedId
=
0
;
this
.
showPanelGroupAudio
(
item
,
0
);
})
option2
.
on
(
'
touchstart
'
,
()
=>
{
if
(
selectedId
==
1
)
{
return
;
}
hideOptionLight
();
option2Light
.
active
=
true
;
option2
.
active
=
false
;
selectedId
=
1
;
this
.
showPanelGroupAudio
(
item
,
1
);
})
commit
.
on
(
'
touchstart
'
,
()
=>
{
console
.
log
(
'
commit click
'
)
if
(
selectedId
==
-
1
)
{
return
;
}
this
.
commitQuestion
(
selectedId
,
item
,
keyData
);
this
.
showDisappearAnima
(
item
,
keyData
);
})
replay
.
on
(
'
touchstart
'
,
()
=>
{
console
.
log
(
'
replay click
'
)
})
option1Light
.
on
(
'
touchstart
'
,
()
=>
{
// console.log('option1Light click')
// option1.active = true;
// option1Light.active = false;
})
option2Light
.
on
(
'
touchstart
'
,
()
=>
{
// console.log('option2Light click')
// option2.active = true;
// option2Light.active = false;
})
},
hideQuestion
(
item
)
{
const
picNodeArr
=
item
.
picNodeArr
;
},
commitQuestion
(
id
,
item
,
keyData
)
{
console
.
log
(
'
in commit question :
'
,
item
.
data
);
const
option
=
item
.
data
.
data
.
checkBox
.
option
[
id
]
let
isAnimaEnd
=
false
;
let
isAudioEnd
=
false
;
const
timeContinue
=
()
=>
{
// if (isAnimaEnd && isAudioEnd) {
this
.
panelGroupShowEnd
();
// }
}
console
.
log
(
'
提交答案:
'
,
id
)
if
(
option
.
isRight
)
{
// this.showQuestionRight(item);
this
.
showAnimaRight
(
item
,
()
=>
{
});
this
.
showPanelGroupAudio
(
item
,
2
,
()
=>
{
isAudioEnd
=
true
;
timeContinue
();
});
this
.
showCorrectParticle
();
}
else
{
// this.showQuestionWrong(item);
this
.
showAnimaWrong
(
item
,
()
=>
{
});
this
.
showPanelGroupAudio
(
item
,
3
,
()
=>
{
isAudioEnd
=
true
;
timeContinue
();
});
}
},
showCorrectParticle
()
{
const
correctNode
=
cc
.
find
(
"
Canvas/res/anim/correct
"
);
const
pNode
=
cc
.
instantiate
(
correctNode
);
this
.
canvas
.
addChild
(
pNode
,
5
);
const
dragonDisplay
=
pNode
.
getComponent
(
dragonBones
.
ArmatureDisplay
);
dragonDisplay
.
playAnimation
(
'
newAnimation
'
,
1
);
},
panelGroupShowEnd
(
item
)
{
this
.
isAiClassStart
=
true
;
this
.
hideAiPanelGroup
(
item
);
},
hideAiPanelGroup
(
item
)
{
const
animaNodeArr
=
item
.
animaNodeArr
;
for
(
let
i
=
0
;
i
<
animaNodeArr
.
length
;
i
++
)
{
animaNodeArr
[
i
].
active
=
false
;
}
},
showPanelGroupAudio
(
item
,
index
,
cb
=
null
)
{
const
audioNodeArr
=
item
.
audioNodeArr
;
const
clip
=
audioNodeArr
[
index
].
getComponent
(
cc
.
AudioSource
).
clip
;
playAudio
(
clip
,
()
=>
{
cb
&&
cb
()
})
},
showQuestionRight
(
item
)
{
this
.
showAnimaRight
(
item
);
},
showQuestionWrong
(
item
)
{
this
.
showAnimaWrong
(
item
);
},
showAnimaRight
(
item
)
{
this
.
normalAnima
.
active
=
false
;
const
rightAnimaNode
=
item
.
animaNodeArr
[
0
];
rightAnimaNode
.
active
=
true
;
const
dragonDisplay
=
rightAnimaNode
.
getComponent
(
dragonBones
.
ArmatureDisplay
)
dragonDisplay
.
playAnimation
(
rightAnimaNode
.
curAnimation
,
-
1
);
},
showAnimaWrong
(
item
)
{
this
.
normalAnima
.
active
=
false
;
const
wrongAnimaNode
=
item
.
animaNodeArr
[
1
];
wrongAnimaNode
.
active
=
true
;
const
dragonDisplay
=
wrongAnimaNode
.
getComponent
(
dragonBones
.
ArmatureDisplay
)
dragonDisplay
.
playAnimation
(
wrongAnimaNode
.
curAnimation
,
-
1
);
// this.replayBtn.active = true;
},
showAnimaNormal
(
item
)
{
this
.
normalAnima
.
active
=
true
;
item
.
animaNodeArr
[
0
].
active
=
false
;
item
.
animaNodeArr
[
1
].
active
=
false
;
// const dragonDisplay = this.normalAnima.getComponent(dragonBones.ArmatureDisplay);
// if (dragonDisplay) {
// dragonDisplay.playAnimation(this.normalAnima.curAnimation, -1);
// }
// const dragonDisplay = wrongAnimaNode.getComponent(dragonBones.ArmatureDisplay)
// dragonDisplay.playAnimation(wrongAnimaNode.curAnimation, -1);
},
cleanCurKeyActionArr
(
item
)
{
const
actionArr
=
item
.
curKeyActionArr
;
for
(
let
i
=
0
;
i
<
actionArr
.
length
;
i
++
)
{
removeFromArr
(
this
.
myActionArr
,
actionArr
[
i
]);
}
},
addMyAction
(
item
,
changeTime
,
changeData
)
{
const
frameChangeData
=
{};
for
(
let
key
in
changeData
)
{
const
itemProp
=
this
.
getItemPropertyAiClass
(
item
,
key
)
if
(
itemProp
!=
null
)
{
const
totalChangeNum
=
changeData
[
key
]
-
itemProp
;
frameChangeData
[
key
]
=
totalChangeNum
/
changeTime
;
}
}
const
actionData
=
{
item
,
changeTime
,
changeData
,
frameChangeData
,
curChangeTime
:
0
}
this
.
myActionArr
.
push
(
actionData
);
return
actionData
;
},
finishMyAction
(
myAction
)
{
const
{
item
,
changeData
}
=
myAction
;
for
(
let
key
in
changeData
)
{
this
.
setItemPropertyAiClass
(
item
,
key
,
changeData
[
key
]);
}
removeFromArr
(
this
.
myActionArr
,
myAction
);
},
checkAiClassItemStart
()
{
const
itemArr
=
this
.
aiClassItemArr
;
const
needShowKeyDataArr
=
[];
let
curQuestionData
=
{};
for
(
let
i
=
0
;
i
<
itemArr
?.
length
;
i
++
)
{
const
keyArrData
=
itemArr
[
i
].
data
.
keyArrData
;
// console.log('keyArrData.length:', keyArrData.length);
for
(
let
j
=
0
;
j
<
keyArrData
?.
length
;
j
++
)
{
const
keyData
=
keyArrData
[
j
];
if
(
keyData
.
isStart
)
{
continue
;
}
if
(
keyData
.
time
<=
this
.
curAiClassTime
)
{
if
(
itemArr
[
i
].
data
.
gId
==
4
||
itemArr
[
i
].
data
.
gId
==
5
)
{
curQuestionData
.
item
=
itemArr
[
i
];
curQuestionData
.
keyData
=
keyData
;
// this.showItemKeyData(itemArr[i], keyData);
// keyData.isStart = true;
// return;
}
else
{
needShowKeyDataArr
.
push
([
itemArr
[
i
],
keyData
]);
}
break
;
}
}
}
let
realTime
=
this
.
curAiClassTime
;
if
(
curQuestionData
.
keyData
)
{
const
{
item
,
keyData
}
=
curQuestionData
;
realTime
=
keyData
.
time
;
this
.
showItemKeyData
(
item
,
keyData
);
keyData
.
isStart
=
true
;
}
for
(
let
i
=
0
;
i
<
needShowKeyDataArr
.
length
;
i
++
)
{
const
item
=
needShowKeyDataArr
[
i
][
0
];
const
keyData
=
needShowKeyDataArr
[
i
][
1
];
if
(
keyData
.
time
<=
realTime
)
{
this
.
showItemKeyData
(
item
,
keyData
);
keyData
.
isStart
=
true
;
}
}
},
updateAiClass
(
dt
)
{
if
(
!
this
.
isAiClassStart
)
{
return
;
}
this
.
curAiClassTime
+=
dt
;
this
.
checkAiClassItemStart
();
},
updateMyAction
(
dt
)
{
const
arr
=
this
.
myActionArr
;
for
(
let
i
=
0
;
i
<
arr
?.
length
;
i
++
)
{
const
{
item
,
changeTime
,
changeData
,
frameChangeData
}
=
arr
[
i
];
for
(
let
key
in
frameChangeData
)
{
const
itemProp
=
this
.
getItemPropertyAiClass
(
item
,
key
);
itemProp
+=
frameChangeData
[
key
]
*
dt
;
this
.
setItemPropertyAiClass
(
item
,
key
,
itemProp
);
}
arr
[
i
].
curChangeTime
+=
dt
;
if
(
arr
[
i
].
curChangeTime
>=
changeTime
)
{
this
.
finishMyAction
(
arr
[
i
]);
}
}
},
update
(
dt
)
{
if
(
this
.
isDestroy
)
{
return
;
}
this
.
updateAiClass
(
dt
);
this
.
updateMyAction
(
dt
);
},
getLabel
(
text
)
{
const
labelNode
=
new
cc
.
Node
();
const
label
=
labelNode
.
addComponent
(
cc
.
Label
);
label
.
string
=
text
;
labelNode
.
color
=
cc
.
Color
.
BLACK
;
label
.
fontSize
=
20
;
return
labelNode
;
},
showTryAgain
()
{
const
time
=
0.3
;
cc
.
tween
(
this
.
tryagain
)
.
to
(
time
,
{
opacity
:
255
},
{
easing
:
"
cubicOut
"
})
.
delay
(
0.3
)
.
to
(
time
,
{
opacity
:
0
},
{
easing
:
"
cubicIn
"
})
.
start
();
},
gameEnd
()
{
console
.
log
(
'
game end !
'
)
this
.
isGameEnd
=
true
;
this
.
showRestart
();
this
.
showGoodjob
();
// this.showOneFirework(cc.v2(0, -this.canvas.height / 2), this.canvas, cc.find('paperBase').children, this.canvas.width / 2.5, this.canvas.height * 2, 100, 1);
playAudio
(
this
.
finishClip
);
const
camera
=
cc
.
find
(
'
Canvas/Main Camera
'
);
camera
.
zIndex
=
100
;
showTrebleFirework
(
camera
,
cc
.
find
(
'
RibbonNodeBase
'
).
children
);
onHomeworkFinish
();
this
.
endTesting
();
},
showGoodjob
()
{
const
icon
=
getSprNode
(
"
goodjob
"
);
icon
.
scale
=
this
.
_mapScaleMin
;
icon
.
baseS
=
icon
.
scale
;
this
.
canvas
.
addChild
(
icon
,
20
);
const
time
=
1
;
icon
.
scale
=
0
;
cc
.
tween
(
icon
)
.
to
(
0.8
,
{
scale
:
icon
.
baseS
},
{
easing
:
"
elasticOut
"
})
.
delay
(
1
)
.
to
(
0.5
,
{
scale
:
0
}
,
{
easing
:
"
cubicIn
"
})
.
start
();
},
showRestart
()
{
const
btn
=
getSprNode
(
"
btn_restart
"
);
btn
.
scale
=
this
.
_mapScaleMin
;
btn
.
baseS
=
btn
.
scale
;
this
.
canvas
.
addChild
(
btn
,
21
);
btn
.
on
(
cc
.
Node
.
EventType
.
TOUCH_START
,
()
=>
{
// btn.removeFromParent();
// this.initData();
// this.initStar();
// this.showChangeQuesAnim();
// playAudio(this.btnClip);
const
middleLayer
=
cc
.
find
(
'
middleLayer
'
);
if
(
middleLayer
)
{
middleLayer
.
getComponent
(
'
middleLayer
'
).
reloadBundle
();
}
})
const
time
=
0.9
;
btn
.
scale
=
0
;
cc
.
tween
(
btn
)
.
delay
(
2.5
)
.
to
(
time
,
{
scale
:
btn
.
baseS
},
{
easing
:
"
elasticOut
"
})
.
start
();
},
async
showOneFirework
(
pos
,
parentNode
,
nodeList
,
w
,
h
,
n
,
timeRate
=
1
)
{
for
(
let
i
=
0
;
i
<
3
;
i
++
)
{
this
.
showFirework
(
pos
,
parentNode
,
nodeList
,
w
,
h
,
n
,
timeRate
);
await
asyncDelay
(
0.1
);
}
},
showFirework
(
pos
,
parentNode
,
nodeList
,
width
=
200
,
height
=
500
,
number
=
30
,
timeRate
=
1
)
{
const
subTime
=
1
;
for
(
let
i
=
0
;
i
<
number
;
i
++
)
{
const
quad
=
this
.
createQuads
(
pos
,
parentNode
,
nodeList
);
const
targetX
=
RandomInt
(
width
/
2
,
-
width
/
2
);
const
targetY
=
RandomInt
(
height
);
cc
.
tween
(
quad
)
.
by
(
0.5
*
timeRate
,
{
x
:
targetX
})
.
by
((
2
+
subTime
*
Math
.
random
())
*
timeRate
,
{
x
:
targetX
*
2
})
.
start
();
cc
.
tween
(
quad
)
.
by
(
0.5
*
timeRate
,
{
y
:
targetY
},
{
easing
:
'
quadOut
'
})
.
to
((
3
+
subTime
*
Math
.
random
())
*
timeRate
,
{
y
:
-
parentNode
.
height
*
2
},
{
easing
:
'
quadIn
'
})
.
removeSelf
()
.
start
();
cc
.
tween
(
quad
)
.
delay
(
1
*
timeRate
)
.
to
((
0.5
+
subTime
*
Math
.
random
())
*
timeRate
,
{
opacity
:
0
})
.
start
();
}
},
createQuads
(
pos
,
parentNode
,
nodeList
)
{
const
quadBase
=
cc
.
instantiate
(
nodeList
[
RandomInt
(
nodeList
.
length
)]);
quadBase
.
x
=
pos
.
x
;
quadBase
.
y
=
pos
.
y
;
quadBase
.
z
=
pos
.
z
;
quadBase
.
angle
=
RandomInt
(
180
);
quadBase
.
parent
=
parentNode
;
const
quad
=
quadBase
.
getChildByName
(
'
quad
'
);
quad
.
x
=
0
;
quad
.
y
=
0
;
quad
.
angle
=
RandomInt
(
180
);
const
paper
=
quad
.
getChildByName
(
'
paper
'
);
paper
.
scaleX
=
Math
.
random
()
*
0.8
+
0.2
;
paper
.
scaleY
=
Math
.
random
()
*
0.8
+
0.2
;
quadBase
.
scaleX
=
Math
.
random
();
cc
.
tween
(
quadBase
)
.
to
((
1
-
quadBase
.
scaleX
)
*
0.3
,
{
scaleX
:
1
})
.
call
(()
=>
{
const
time
=
Math
.
random
()
*
0.2
;
cc
.
tween
(
quadBase
)
.
to
(
0.1
+
time
,
{
scaleX
:
-
1
})
.
to
(
0.1
+
time
,
{
scaleX
:
1
})
.
union
()
.
repeatForever
()
.
start
();
})
.
start
();
return
quadBase
;
},
initHotZone
()
{
this
.
initHotZoneBg
();
},
hotZoneBg
:
null
,
initHotZoneBg
()
{
this
.
hotZoneBg
=
new
cc
.
Node
();
this
.
hotZoneBg
.
name
=
'
hotZoneBg
'
;
this
.
hotZoneBg
.
parent
=
cc
.
find
(
'
Canvas
'
);
this
.
hotZoneBg
.
zIndex
=
4
;
if
(
!
this
.
data
.
bgItem
)
{
return
;
}
cc
.
loader
.
load
({
url
:
this
.
data
.
bgItem
.
url
},
(
err
,
img
)
=>
{
// this.addMask(this.hotZoneBg);
this
.
hotZoneBg
.
width
=
img
.
width
;
this
.
hotZoneBg
.
height
=
img
.
height
;
const
sprNode
=
new
cc
.
Node
();
sprNode
.
name
=
'
bgItemSpr
'
var
sf
=
new
cc
.
SpriteFrame
(
img
);
// const spr = this.hotZoneBg.addComponent(cc.Sprite);
const
spr
=
sprNode
.
addComponent
(
cc
.
Sprite
);
spr
.
spriteFrame
=
sf
sprNode
.
width
=
this
.
hotZoneBg
.
width
;
sprNode
.
height
=
this
.
hotZoneBg
.
height
;
sprNode
.
parent
=
this
.
hotZoneBg
;
window
[
'
bg
'
]
=
sprNode
const
sx
=
this
.
canvas
.
width
/
this
.
hotZoneBg
.
width
;
const
sy
=
(
this
.
canvas
.
height
)
/
this
.
hotZoneBg
.
height
;
const
s
=
Math
.
min
(
sx
,
sy
);
this
.
hotZoneBg
.
scale
=
s
;
// this.data.bgItem.isShowDebugLine = true;
this
.
initHotZoneItem
();
});
},
initHotZoneItem
()
{
this
.
picNodeArr
=
[];
this
.
data
.
hotZoneItemArr
.
forEach
((
item
)
=>
{
// console.log('item.gIdx: ', item.gIdx);
switch
(
item
.
gIdx
)
{
case
"
0
"
:
this
.
setOneHotZonePic
(
item
);
break
;
default
:
break
;
}
});
},
addMask
(
node
)
{
const
mask
=
node
.
addComponent
(
cc
.
Mask
);
mask
.
type
=
cc
.
Mask
.
Type
.
RECT
;
},
setOneDragAction
(
data
)
{
const
rate
=
(
this
.
hotZoneBg
.
scale
*
this
.
hotZoneBg
.
width
)
/
this
.
data
.
bgItem
.
rect
.
width
;
const
rectNode
=
new
cc
.
Node
();
rectNode
.
name
=
'
rect
'
+
data
.
index
;
this
.
hotZoneBg
.
addChild
(
rectNode
);
const
ctx
=
rectNode
.
addComponent
(
cc
.
Graphics
);
// 红色矩形
ctx
.
lineWidth
=
4
;
ctx
.
strokeColor
=
cc
.
Color
.
BLACK
;
ctx
.
fillColor
=
cc
.
Color
.
WHITE
.
setA
(
100
);
const
scale
=
rate
/
this
.
hotZoneBg
.
scaleY
;
rectNode
.
width
=
data
.
rect
.
width
*
scale
;
rectNode
.
height
=
data
.
rect
.
height
*
scale
;
rectNode
.
x
=
-
this
.
hotZoneBg
.
width
/
2
+
data
.
rect
.
x
*
scale
;
rectNode
.
y
=
this
.
hotZoneBg
.
height
/
2
-
data
.
rect
.
height
*
scale
-
data
.
rect
.
y
*
scale
;
const
{
x
,
y
,
width
,
height
}
=
rectNode
;
// rectNode.anchorX = rectNode.anchorY = 0;
if
(
this
.
data
.
bgItem
.
isShowDebugLine
)
{
ctx
.
rect
(
-
rectNode
.
width
/
2
,
-
rectNode
.
height
/
2
,
rectNode
.
width
,
rectNode
.
height
);
}
ctx
.
stroke
();
ctx
.
fill
();
rectNode
.
x
+=
rectNode
.
width
/
2
;
rectNode
.
y
+=
rectNode
.
height
/
2
;
rectNode
.
baseX
=
rectNode
.
x
;
rectNode
.
baseY
=
rectNode
.
y
;
rectNode
.
targetOff
();
rectNode
.
on
(
cc
.
Node
.
EventType
.
TOUCH_START
,
()
=>
{
if
(
rectNode
.
isDragEnd
)
{
if
(
rectNode
.
audioClip
)
{
cc
.
audioEngine
.
stopAllEffects
();
cc
.
audioEngine
.
playEffect
(
rectNode
.
audioClip
,
false
,
0.8
);
}
return
;
}
this
.
_curShowItem
=
rectNode
;
})
const
realRate
=
this
.
hotZoneBg
.
width
/
this
.
data
.
bgItem
.
rect
.
width
;
rectNode
.
targetPx
=
-
this
.
hotZoneBg
.
width
/
2
+
(
data
.
dragDot
.
x
-
this
.
data
.
bgItem
.
rect
.
x
)
*
realRate
;
rectNode
.
targetPy
=
this
.
hotZoneBg
.
height
/
2
-
(
data
.
dragDot
.
y
-
this
.
data
.
bgItem
.
rect
.
y
)
*
realRate
;
if
(
data
.
audio_url
)
{
cc
.
assetManager
.
loadRemote
(
data
.
audio_url
,
(
err
,
audioClip
)
=>
{
rectNode
.
audioClip
=
audioClip
;
});
}
console
.
log
(
'
setOneAction ~~ data:
'
,
data
)
const
actionData
=
data
[
'
actionData_
'
+
data
.
gIdx
];
if
(
!
actionData
)
{
return
;
}
if
(
actionData
.
type
==
'
text
'
)
{
const
label
=
this
.
setOneActionText
(
rectNode
,
actionData
);
label
.
node
.
scale
=
scale
*
data
.
fontScale
;
label
.
node
.
targetOff
();
// label.overflow = cc.Label.Overflow.NONE;
// label.node.setContentSize(new cc.Size(0, lineHeight));
label
[
"
_forceUpdateRenderData
"
](
true
);
}
else
if
(
actionData
.
type
==
'
pic
'
)
{
const
pic
=
this
.
setOneActionPic
(
rectNode
,
actionData
);
}
else
if
(
actionData
.
type
==
'
anima
'
)
{
const
anima
=
this
.
setOneActionAnima
(
rectNode
,
actionData
);
}
},
setOneAction
(
data
)
{
const
rate
=
(
this
.
hotZoneBg
.
scale
*
this
.
hotZoneBg
.
width
)
/
this
.
data
.
bgItem
.
rect
.
width
;
const
rectNode
=
new
cc
.
Node
();
rectNode
.
name
=
'
rect
'
+
data
.
index
;
this
.
hotZoneBg
.
addChild
(
rectNode
);
const
ctx
=
rectNode
.
addComponent
(
cc
.
Graphics
);
// 红色矩形
ctx
.
lineWidth
=
4
;
ctx
.
strokeColor
=
cc
.
Color
.
BLACK
;
ctx
.
fillColor
=
cc
.
Color
.
WHITE
.
setA
(
100
);
const
scale
=
rate
/
this
.
hotZoneBg
.
scaleY
;
rectNode
.
width
=
data
.
rect
.
width
*
scale
;
rectNode
.
height
=
data
.
rect
.
height
*
scale
;
rectNode
.
x
=
-
this
.
hotZoneBg
.
width
/
2
+
data
.
rect
.
x
*
scale
;
rectNode
.
y
=
this
.
hotZoneBg
.
height
/
2
-
data
.
rect
.
height
*
scale
-
data
.
rect
.
y
*
scale
;
const
{
x
,
y
,
width
,
height
}
=
rectNode
;
rectNode
.
anchorX
=
rectNode
.
anchorY
=
0
;
if
(
this
.
data
.
bgItem
.
isShowDebugLine
)
{
ctx
.
rect
(
0
,
0
,
rectNode
.
width
,
rectNode
.
height
);
}
ctx
.
stroke
();
ctx
.
fill
();
console
.
log
(
'
setOneAction ~~ data:
'
,
data
)
const
actionData
=
data
[
'
actionData_
'
+
data
.
gIdx
];
if
(
!
actionData
)
{
return
;
}
if
(
actionData
.
type
==
'
text
'
)
{
const
label
=
this
.
setOneActionText
(
rectNode
,
actionData
);
label
.
node
.
scale
=
scale
*
data
.
fontScale
;
// label.overflow = cc.Label.Overflow.NONE;
// label.node.setContentSize(new cc.Size(0, lineHeight));
label
[
"
_forceUpdateRenderData
"
](
true
);
}
else
if
(
actionData
.
type
==
'
pic
'
)
{
const
pic
=
this
.
setOneActionPic
(
rectNode
,
actionData
);
}
else
if
(
actionData
.
type
==
'
anima
'
)
{
const
anima
=
this
.
setOneActionAnima
(
rectNode
,
actionData
);
}
},
setOneActionText
(
rectNode
,
actionData
)
{
const
labelNode
=
new
cc
.
Node
();
labelNode
.
parent
=
rectNode
;
const
label
=
labelNode
.
addComponent
(
cc
.
Label
);
label
.
font
=
cc
.
find
(
'
Canvas/res/font/ahronbd-1
'
).
getComponent
(
cc
.
Label
).
font
;
label
.
string
=
actionData
.
text
;
// label.string = `<size=${size}><color=#751e00>${this.curGroup.title }</color></size>`
// label.lineHeight = size;
// label.horizontalAlign = cc.macro.TextAlignment.LEFT
// labelNode.anchorX = 0;
// labelNode.anchorY = 1
labelNode
.
color
=
cc
.
Color
.
BLACK
;
const
opArr
=
actionData
.
changeOption
// console.log('opArr', opArr);
const
tweenArr
=
[];
for
(
let
i
=
0
;
i
<
opArr
.
length
;
i
++
)
{
const
opData
=
opArr
[
i
];
console
.
log
(
'
opArr[0]
'
,
opArr
[
i
])
if
(
opData
[
0
]
==
'
fontColor
'
)
{
const
color
=
new
cc
.
Color
();
cc
.
Color
.
fromHEX
(
color
,
opData
[
1
]
);
labelNode
.
color
=
color
;
}
else
if
(
opData
[
0
]
==
'
opacity
'
)
{
// console.log('opData: ', opData)
labelNode
.
opacity
=
Number
(
opData
[
1
]
/
100
*
255
)
+
0.1
;
// console.log(labelNode.opacity);
tweenArr
.
push
({
item
:
labelNode
,
option
:
`{"
${
opData
[
0
]}
" :
${
opData
[
2
]
/
100
*
255
}
}`
,
optionName
:
opData
[
0
]},)
}
else
{
label
[
opData
[
0
]]
=
opData
[
1
];
tweenArr
.
push
({
item
:
label
,
option
:
`{"
${
opData
[
0
]}
" :
${
opData
[
2
]}
}`
,
optionName
:
opData
[
0
]})
}
}
// if (actionData.audio_url) {
// cc.assetManager.loadRemote(actionData.audio_url, (err, audioClip) => {
// labelNode.audioClip = audioClip;
// });
// }
label
.
lineHeight
=
label
.
fontSize
;
// labelNode.y += rectNode.height / 2;
// labelNode.x += rectNode.width / 2;
// rectNode.addComponent(cc.Button);
// rectNode.on('click', () => {
// if (labelNode.audioClip) {
// cc.audioEngine.stopAllEffects();
// cc.audioEngine.playEffect(labelNode.audioClip, false, 0.8);
// }
// if (labelNode.isClicked) {
// // return;
// }
// labelNode.isClicked = true;
// for (let i=0; i<tweenArr.length; i++) {
// const tweenData = tweenArr[i];
// if (tweenData.optionName == 'opacity') {
// console.log('~~~ ', tweenData.item[tweenData.optionName] );
// cc.tween(tweenData.item)
// .to(actionData.changeTime, JSON.parse(tweenData.option) )
// .start();
// }
// }
// });
return
label
;
},
setOneActionPic
(
rectNode
,
actionData
)
{
console
.
log
(
'
setOneActionPic actionData:
'
,
actionData
)
const
picNode
=
new
cc
.
Node
();
rectNode
.
addChild
(
picNode
);
cc
.
loader
.
load
({
url
:
actionData
.
pic_url
},
(
err
,
img
)
=>
{
const
spr
=
picNode
.
addComponent
(
cc
.
Sprite
);
spr
.
spriteFrame
=
new
cc
.
SpriteFrame
(
img
)
picNode
.
y
+=
rectNode
.
height
/
2
;
picNode
.
x
+=
rectNode
.
width
/
2
;
picNode
.
scaleX
=
rectNode
.
width
/
picNode
.
width
;
picNode
.
scaleY
=
rectNode
.
height
/
picNode
.
height
;
const
opArr
=
actionData
.
changeOption
const
tweenArr
=
[];
for
(
let
i
=
0
;
i
<
opArr
.
length
;
i
++
)
{
const
opData
=
opArr
[
i
];
console
.
log
(
'
opData: ~~~
'
,
opData
);
if
(
opData
[
0
]
==
'
opacity
'
)
{
picNode
.
opacity
=
Number
(
opData
[
1
]
/
100
*
255
)
+
0.1
;
console
.
log
(
picNode
.
opacity
);
tweenArr
.
push
({
item
:
picNode
,
option
:
`{"
${
opData
[
0
]}
" :
${
opData
[
2
]
/
100
*
255
}
}`
,
optionName
:
opData
[
0
]},)
}
else
{
// picNode[opData[0]] = Number(opData[1]);
// tweenArr.push({item: picNode, option: `{"${opData[0]}" : ${opData[2]}}`, optionName: opData[0]})
}
if
(
actionData
.
audio_url
)
{
cc
.
assetManager
.
loadRemote
(
actionData
.
audio_url
,
(
err
,
audioClip
)
=>
{
rectNode
.
audioClip
=
audioClip
;
});
}
rectNode
.
addComponent
(
cc
.
Button
);
rectNode
.
on
(
'
click
'
,
()
=>
{
if
(
rectNode
.
audioClip
)
{
cc
.
audioEngine
.
stopAllEffects
();
cc
.
audioEngine
.
playEffect
(
rectNode
.
audioClip
,
false
,
0.8
);
}
if
(
rectNode
.
isClicked
)
{
// return;
}
rectNode
.
isClicked
=
true
;
for
(
let
i
=
0
;
i
<
tweenArr
.
length
;
i
++
)
{
const
tweenData
=
tweenArr
[
i
];
if
(
tweenData
.
optionName
==
'
opacity
'
)
{
cc
.
tween
(
tweenData
.
item
)
.
to
(
actionData
.
changeTime
,
JSON
.
parse
(
tweenData
.
option
)
)
.
start
();
}
}
});
}
});
},
setOneActionAnima
(
rectNode
,
actionData
)
{
const
animaNode
=
new
cc
.
Node
();
rectNode
.
addChild
(
animaNode
);
if
(
actionData
.
audio_url
)
{
cc
.
assetManager
.
loadRemote
(
actionData
.
audio_url
,
(
err
,
audioClip
)
=>
{
rectNode
.
audioClip
=
audioClip
;
});
}
const
data
=
actionData
;
const
dragonDisplay
=
animaNode
.
addComponent
(
dragonBones
.
ArmatureDisplay
);
if
(
!
data
.
texPngData
)
{
return
}
const
image
=
data
.
texPngData
.
url
//"http://staging-teach.cdn.ireadabc.com/5a0c5af3e952acd0ac83a6e5c6f03ff1.png";
const
ske
=
data
.
skeJsonData
.
url
//"http://staging-teach.cdn.ireadabc.com/bd825dcceea298d1146be8067ae3d17f.json";
const
atlas
=
data
.
texJsonData
.
url
//"http://staging-teach.cdn.ireadabc.com/246f8991b729fa3e5a7f4802de828efa.json";
cc
.
loader
.
load
(
image
,
(
error
,
texture
)
=>
{
cc
.
loader
.
load
({
url
:
atlas
,
type
:
'
txt
'
},
(
error
,
atlasJson
)
=>
{
cc
.
loader
.
load
({
url
:
ske
,
type
:
'
txt
'
},
(
error
,
dragonBonesJson
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
const
atlas
=
new
dragonBones
.
DragonBonesAtlasAsset
();
atlas
.
atlasJson
=
atlasJson
;
atlas
.
texture
=
texture
;
const
asset
=
new
dragonBones
.
DragonBonesAsset
();
asset
.
dragonBonesJson
=
dragonBonesJson
;
dragonDisplay
.
dragonAtlasAsset
=
atlas
;
dragonDisplay
.
dragonAsset
=
asset
;
let
json
=
JSON
.
parse
(
asset
.
dragonBonesJson
);
let
armatures
=
json
[
"
armature
"
];
let
armatureNames
=
[];
for
(
let
i
=
0
;
i
<
armatures
.
length
;
i
++
)
{
armatureNames
.
push
(
armatures
[
i
].
name
);
}
// console.log('armatureNames: ', armatureNames);
let
animationNames
=
[];
if
(
armatureNames
.
length
>
0
)
{
let
defaultArmatureName
=
armatureNames
[
0
];
dragonDisplay
.
armatureName
=
defaultArmatureName
;
// let animationNames = dragonDisplay.getAnimationNames(defaultArmatureName);
let
defaultArmature
=
armatures
[
0
];
let
animations
=
defaultArmature
.
animation
;
for
(
let
i
=
0
;
i
<
animations
.
length
;
i
++
)
{
animationNames
.
push
(
animations
[
i
].
name
);
}
// rectNode.addComponent(cc.Button);
// rectNode.on('click', () => {
// if (rectNode.isClicked) {
// // return;
// }
// rectNode.isClicked = true;
// console.log('clicked');
// if (rectNode.audioClip) {
// cc.audioEngine.stopAllEffects();
// cc.director.emit('STOP_ALL_AUDIO')
// cc.audioEngine.playEffect(rectNode.audioClip, false, 0.8);
// }
// if (animationNames.length > 0) {
// dragonDisplay.playAnimation(animationNames[0], 1);
// }
// });
}
// animaNode.x = rectNode.x + rectNode.width / 2;
// animaNode.y = rectNode.y + rectNode.height / 2;
// const sx = rectNode.width / animaNode.width;
// const sy = rectNode.height / animaNode.height;
// const scale = Math.min(sx, sy);
// animaNode.scale = scale;
animaNode
.
y
+=
rectNode
.
height
/
2
;
animaNode
.
x
+=
rectNode
.
width
/
2
;
animaNode
.
scaleX
=
rectNode
.
width
/
animaNode
.
width
;
animaNode
.
scaleY
=
rectNode
.
height
/
animaNode
.
height
;
const
opArr
=
actionData
.
changeOption
const
tweenArr
=
[];
for
(
let
i
=
0
;
i
<
opArr
.
length
;
i
++
)
{
const
opData
=
opArr
[
i
];
console
.
log
(
'
opData: ~~~
'
,
opData
);
if
(
opData
[
0
]
==
'
opacity
'
)
{
animaNode
.
opacity
=
Number
(
opData
[
1
]
/
100
*
255
)
+
0.1
;
console
.
log
(
animaNode
.
opacity
);
tweenArr
.
push
({
item
:
animaNode
,
option
:
`{"
${
opData
[
0
]}
" :
${
opData
[
2
]
/
100
*
255
}
}`
,
optionName
:
opData
[
2
]
==
null
?
''
:
opData
[
0
]},)
}
else
{
// animaNode[opData[0]] = Number(opData[1]);
// tweenArr.push({item: animaNode, option: `{"${opData[0]}" : ${opData[2]}}`, optionName: opData[2] == null ? '' : opData[0]})
}
if
(
actionData
.
audio_url
)
{
cc
.
assetManager
.
loadRemote
(
actionData
.
audio_url
,
(
err
,
audioClip
)
=>
{
rectNode
.
audioClip
=
audioClip
;
});
}
rectNode
.
addComponent
(
cc
.
Button
);
rectNode
.
on
(
'
click
'
,
()
=>
{
if
(
rectNode
.
audioClip
)
{
cc
.
audioEngine
.
stopAllEffects
();
cc
.
audioEngine
.
playEffect
(
rectNode
.
audioClip
,
false
,
0.8
);
}
if
(
rectNode
.
isClicked
)
{
// return;
}
rectNode
.
isClicked
=
true
;
for
(
let
j
=
0
;
j
<
tweenArr
.
length
;
j
++
)
{
const
tweenData
=
tweenArr
[
j
];
console
.
log
(
'
tweenData:
'
,
tweenData
);
if
(
tweenData
.
optionName
)
{
cc
.
tween
(
tweenData
.
item
)
.
to
(
actionData
.
changeTime
,
JSON
.
parse
(
tweenData
.
option
))
.
start
();
}
}
if
(
animationNames
.
length
>
0
)
{
dragonDisplay
.
playAnimation
(
animationNames
[
0
],
1
);
}
});
}
});
});
});
},
setOneAnimaSmall
(
data
)
{
const
rate
=
(
this
.
hotZoneBg
.
scale
*
this
.
hotZoneBg
.
width
)
/
this
.
data
.
bgItem
.
rect
.
width
;
const
rectNode
=
new
cc
.
Node
();
rectNode
.
name
=
'
rect
'
+
data
.
index
;
this
.
hotZoneBg
.
addChild
(
rectNode
);
const
ctx
=
rectNode
.
addComponent
(
cc
.
Graphics
);
// 红色矩形
ctx
.
lineWidth
=
4
;
ctx
.
strokeColor
=
cc
.
Color
.
BLACK
;
ctx
.
fillColor
=
cc
.
Color
.
WHITE
.
setA
(
100
);
const
scale
=
rate
/
this
.
hotZoneBg
.
scaleY
;
rectNode
.
width
=
data
.
rect
.
width
*
scale
;
rectNode
.
height
=
data
.
rect
.
height
*
scale
;
rectNode
.
x
=
-
this
.
hotZoneBg
.
width
/
2
+
data
.
rect
.
x
*
scale
;
rectNode
.
y
=
this
.
hotZoneBg
.
height
/
2
-
data
.
rect
.
height
*
scale
-
data
.
rect
.
y
*
scale
;
rectNode
.
anchorX
=
rectNode
.
anchorY
=
0
;
if
(
this
.
data
.
bgItem
.
isShowDebugLine
)
{
ctx
.
rect
(
0
,
0
,
rectNode
.
width
,
rectNode
.
height
);
}
ctx
.
stroke
();
ctx
.
fill
();
const
animaNode
=
new
cc
.
Node
();
animaNode
.
name
=
'
anima_
'
+
data
.
index
;
this
.
hotZoneBg
.
addChild
(
animaNode
);
if
(
data
.
audio_url
)
{
cc
.
assetManager
.
loadRemote
(
data
.
audio_url
,
(
err
,
audioClip
)
=>
{
animaNode
.
audioClip
=
audioClip
;
});
}
const
dragonDisplay
=
animaNode
.
addComponent
(
dragonBones
.
ArmatureDisplay
);
if
(
!
data
.
texPngData
)
{
return
}
const
image
=
data
.
texPngData
.
url
//"http://staging-teach.cdn.ireadabc.com/5a0c5af3e952acd0ac83a6e5c6f03ff1.png";
const
ske
=
data
.
skeJsonData
.
url
//"http://staging-teach.cdn.ireadabc.com/bd825dcceea298d1146be8067ae3d17f.json";
const
atlas
=
data
.
texJsonData
.
url
//"http://staging-teach.cdn.ireadabc.com/246f8991b729fa3e5a7f4802de828efa.json";
cc
.
loader
.
load
(
image
,
(
error
,
texture
)
=>
{
cc
.
loader
.
load
({
url
:
atlas
,
type
:
'
txt
'
},
(
error
,
atlasJson
)
=>
{
cc
.
loader
.
load
({
url
:
ske
,
type
:
'
txt
'
},
(
error
,
dragonBonesJson
)
=>
{
if
(
this
.
isDestroy
)
{
return
;
}
const
atlas
=
new
dragonBones
.
DragonBonesAtlasAsset
();
atlas
.
atlasJson
=
atlasJson
;
atlas
.
texture
=
texture
;
const
asset
=
new
dragonBones
.
DragonBonesAsset
();
asset
.
dragonBonesJson
=
dragonBonesJson
;
dragonDisplay
.
dragonAtlasAsset
=
atlas
;
dragonDisplay
.
dragonAsset
=
asset
;
let
json
=
JSON
.
parse
(
asset
.
dragonBonesJson
);
let
armatures
=
json
[
"
armature
"
];
// console.log('armatures: ', armatures);
let
armatureNames
=
[];
for
(
let
i
=
0
;
i
<
armatures
.
length
;
i
++
)
{
armatureNames
.
push
(
armatures
[
i
].
name
);
}
// console.log('armatureNames: ', armatureNames);
if
(
armatureNames
.
length
>
0
)
{
let
defaultArmatureName
=
armatureNames
[
0
];
dragonDisplay
.
armatureName
=
defaultArmatureName
;
// let animationNames = dragonDisplay.getAnimationNames(defaultArmatureName);
let
defaultArmature
=
armatures
[
0
];
let
animations
=
defaultArmature
.
animation
;
let
animationNames
=
[];
for
(
let
i
=
0
;
i
<
animations
.
length
;
i
++
)
{
animationNames
.
push
(
animations
[
i
].
name
);
}
rectNode
.
addComponent
(
cc
.
Button
);
rectNode
.
on
(
'
click
'
,
()
=>
{
if
(
rectNode
.
isClicked
)
{
// return;
}
rectNode
.
isClicked
=
true
;
console
.
log
(
'
clicked
'
);
if
(
animaNode
.
audioClip
)
{
cc
.
audioEngine
.
stopAllEffects
();
cc
.
director
.
emit
(
'
STOP_ALL_AUDIO
'
)
cc
.
audioEngine
.
playEffect
(
animaNode
.
audioClip
,
false
,
0.8
);
}
if
(
animationNames
.
length
>
0
)
{
dragonDisplay
.
playAnimation
(
animationNames
[
0
],
1
);
}
});
}
animaNode
.
x
=
rectNode
.
x
+
rectNode
.
width
/
2
;
animaNode
.
y
=
rectNode
.
y
+
rectNode
.
height
/
2
;
const
sx
=
rectNode
.
width
/
animaNode
.
width
;
const
sy
=
rectNode
.
height
/
animaNode
.
height
;
const
scale
=
Math
.
min
(
sx
,
sy
);
animaNode
.
scale
=
scale
;
});
});
});
},
setOneHotZonePic
(
data
)
{
const
rate
=
(
this
.
hotZoneBg
.
scale
*
this
.
hotZoneBg
.
width
)
/
this
.
data
.
bgItem
.
rect
.
width
;
const
picNode
=
new
cc
.
Node
();
picNode
.
name
=
'
pic
'
+
data
.
index
;
picNode
.
data
=
data
;
this
.
hotZoneBg
.
addChild
(
picNode
);
this
.
picNodeArr
.
push
(
picNode
);
picNode
.
hitCount
=
0
;
cc
.
loader
.
load
({
url
:
data
.
pic_url
},
(
err
,
img
)
=>
{
const
spr
=
picNode
.
addComponent
(
cc
.
Sprite
);
spr
.
spriteFrame
=
new
cc
.
SpriteFrame
(
img
)
const
scale
=
rate
/
this
.
hotZoneBg
.
scaleY
;
picNode
.
width
=
data
.
rect
.
width
*
scale
;
picNode
.
height
=
data
.
rect
.
height
*
scale
;
picNode
.
x
=
-
this
.
hotZoneBg
.
width
/
2
+
data
.
rect
.
x
*
scale
;
picNode
.
y
=
this
.
hotZoneBg
.
height
/
2
-
data
.
rect
.
height
*
scale
-
data
.
rect
.
y
*
scale
;
picNode
.
x
+=
picNode
.
width
/
2
*
picNode
.
scaleX
;
picNode
.
y
+=
picNode
.
height
/
2
*
picNode
.
scaleX
;
getSprNodeByUrl
(
data
.
answer_pic_url
,
(
spr
)
=>
{
const
sprNode
=
spr
.
node
;
sprNode
.
active
=
false
;
picNode
.
addChild
(
sprNode
);
picNode
.
answerPic
=
sprNode
;
picNode
.
isLoadEnd
=
true
;
this
.
checkStart
();
})
// picNode.anchorX = picNode.anchorY = 0;
// if (data.audio_url) {
// this.addPicAudio(picNode);
// }
// this.addDragPoint(picNode, data)
});
},
addDragPoint
(
picNode
,
data
)
{
picNode
.
baseX
=
picNode
.
x
;
picNode
.
baseY
=
picNode
.
y
;
const
realRate
=
this
.
hotZoneBg
.
width
/
this
.
data
.
bgItem
.
rect
.
width
;
picNode
.
targetPx
=
-
this
.
hotZoneBg
.
width
/
2
+
(
data
.
dragDot
.
x
-
this
.
data
.
bgItem
.
rect
.
x
)
*
realRate
;
picNode
.
targetPy
=
this
.
hotZoneBg
.
height
/
2
-
(
data
.
dragDot
.
y
-
this
.
data
.
bgItem
.
rect
.
y
)
*
realRate
;
if
(
data
.
audio_url
)
{
cc
.
assetManager
.
loadRemote
(
data
.
audio_url
,
(
err
,
audioClip
)
=>
{
picNode
.
audioClip
=
audioClip
;
});
}
picNode
.
on
(
cc
.
Node
.
EventType
.
TOUCH_START
,
()
=>
{
if
(
picNode
.
isDragEnd
)
{
if
(
picNode
.
audioClip
)
{
cc
.
audioEngine
.
stopAllEffects
();
cc
.
audioEngine
.
playEffect
(
picNode
.
audioClip
,
false
,
0.8
);
}
return
;
}
this
.
_curShowItem
=
picNode
;
// picNode.x = -this.hotZoneBg.width / 2 + ( data.dragDot.x - this.data.bgItem.rect.x ) * realRate;
// picNode.y = this.hotZoneBg.height / 2 - (data.dragDot.y - this.data.bgItem.rect.y) * realRate;
})
},
setOnePic
(
data
)
{
const
rate
=
(
this
.
hotZoneBg
.
scale
*
this
.
hotZoneBg
.
width
)
/
this
.
data
.
bgItem
.
rect
.
width
;
const
picNode
=
new
cc
.
Node
();
picNode
.
name
=
'
pic
'
+
data
.
index
;
picNode
.
data
=
data
;
this
.
hotZoneBg
.
addChild
(
picNode
);
getSprNodeByUrl
(
data
.
pic_url
,
(
spr
)
=>
{
const
sprNode
=
spr
.
node
;
picNode
.
addChild
(
sprNode
);
const
scale
=
rate
/
this
.
hotZoneBg
.
scaleY
;
picNode
.
width
=
sprNode
.
width
=
data
.
rect
.
width
*
scale
;
picNode
.
height
=
sprNode
.
height
=
data
.
rect
.
height
*
scale
;
picNode
.
x
=
-
this
.
hotZoneBg
.
width
/
2
+
data
.
rect
.
x
*
scale
;
picNode
.
y
=
this
.
hotZoneBg
.
height
/
2
-
data
.
rect
.
height
*
scale
-
data
.
rect
.
y
*
scale
;
// sprNode.anchorX = sprNode.anchorY = 0;
})
// cc.loader.load({url: data.pic_url}, (err, img) => {
// const spr = picNode.addComponent(cc.Sprite);
// spr.spriteFrame = new cc.SpriteFrame(img)
// const scale = rate / this.hotZoneBg.scaleY;
// picNode.width = data.rect.width * scale;
// picNode.height = data.rect.height * scale;
// picNode.x = -this.hotZoneBg.width / 2 + data.rect.x * scale;
// picNode.y = this.hotZoneBg.height / 2 - data.rect.height * scale - data.rect.y * scale;
// picNode.anchorX = picNode.anchorY = 0;
// // if (data.audio_url) {
// // this.addPicAudio(picNode);
// // }
// });
// picNode.on('touchstart', () => {
// this.show
// })
},
setOneRect
(
data
)
{
const
rate
=
(
this
.
hotZoneBg
.
scale
*
this
.
hotZoneBg
.
width
)
/
this
.
data
.
bgItem
.
rect
.
width
;
const
rectNode
=
new
cc
.
Node
();
rectNode
.
name
=
'
rect
'
+
data
.
index
;
this
.
hotZoneBg
.
addChild
(
rectNode
);
const
ctx
=
rectNode
.
addComponent
(
cc
.
Graphics
);
// 红色矩形
ctx
.
lineWidth
=
4
;
ctx
.
strokeColor
=
cc
.
Color
.
BLACK
;
ctx
.
fillColor
=
cc
.
Color
.
WHITE
.
setA
(
100
);
const
scale
=
rate
/
this
.
hotZoneBg
.
scaleY
;
// console.log('scale: ', scale);
// console.log('scale2: ', scale / data.mapScale);
rectNode
.
width
=
data
.
rect
.
width
*
scale
;
rectNode
.
height
=
data
.
rect
.
height
*
scale
;
rectNode
.
x
=
-
this
.
hotZoneBg
.
width
/
2
+
data
.
rect
.
x
*
scale
;
rectNode
.
y
=
this
.
hotZoneBg
.
height
/
2
-
data
.
rect
.
height
*
scale
-
data
.
rect
.
y
*
scale
;
// rectNode.scale = 1 / data.mapScale;
rectNode
.
anchorX
=
rectNode
.
anchorY
=
0
;
if
(
this
.
data
.
bgItem
.
isShowDebugLine
)
{
ctx
.
rect
(
0
,
0
,
rectNode
.
width
,
rectNode
.
height
);
}
ctx
.
stroke
();
ctx
.
fill
();
// console.log('```data: ', data)
this
.
dragEndRectArr
.
push
(
rectNode
);
if
(
data
.
audio_url
)
{
cc
.
assetManager
.
loadRemote
(
data
.
audio_url
,
(
err
,
audioClip
)
=>
{
rectNode
.
audioClip
=
audioClip
;
});
}
// rectNode.addComponent(cc.Button);
// rectNode.on('click', () => {
// if (rectNode.isClicked) {
// // return;
// }
// rectNode.isClicked = true;
// console.log('clicked');
// if (rectNode.audioClip) {
// cc.audioEngine.stopAllEffects();
// cc.audioEngine.playEffect(rectNode.audioClip, false, 0.8);
// }
// });
},
addPicAudio
(
picNode
)
{
const
data
=
picNode
.
data
;
cc
.
assetManager
.
loadRemote
(
data
.
audio_url
,
(
err
,
audioClip
)
=>
{
picNode
.
audioClip
=
audioClip
;
});
picNode
.
addComponent
(
cc
.
Button
);
picNode
.
on
(
'
click
'
,
()
=>
{
if
(
picNode
.
audioClip
)
{
cc
.
audioEngine
.
stopAllEffects
();
cc
.
audioEngine
.
playEffect
(
picNode
.
audioClip
,
false
,
0.8
);
}
});
},
initListener
()
{
const
canvas
=
cc
.
find
(
'
Canvas
'
);
let
downFlag
=
false
;
const
touchMove
=
(
e
)
=>
{
this
.
canvasTouchMove
(
e
);
if
(
canvas
.
hasEventListener
(
cc
.
Node
.
EventType
.
MOUSE_MOVE
))
{
canvas
.
off
(
cc
.
Node
.
EventType
.
MOUSE_MOVE
,
mouseMove
)
}
}
const
mouseMove
=
(
e
)
=>
{
if
(
!
downFlag
)
{
return
;
}
this
.
canvasTouchMove
(
e
);
if
(
canvas
.
hasEventListener
(
cc
.
Node
.
EventType
.
TOUCH_MOVE
))
{
canvas
.
off
(
cc
.
Node
.
EventType
.
TOUCH_MOVE
,
touchMove
)
this
.
removeHtmlCanvasListener
(
'
touchmove
'
);
}
}
const
touchEnd
=
(
e
)
=>
{
downFlag
=
false
;
this
.
canvasTouchEnd
(
e
);
if
(
canvas
.
hasEventListener
(
cc
.
Node
.
EventType
.
MOUSE_UP
))
{
canvas
.
off
(
cc
.
Node
.
EventType
.
MOUSE_UP
,
mouseUp
)
}
if
(
canvas
.
hasEventListener
(
cc
.
Node
.
EventType
.
MOUSE_LEAVE
))
{
canvas
.
off
(
cc
.
Node
.
EventType
.
MOUSE_LEAVE
,
mouseUp
)
}
this
.
removeHtmlTouchEnd
();
}
const
mouseUp
=
(
e
)
=>
{
downFlag
=
false
;
this
.
canvasTouchEnd
(
e
);
if
(
canvas
.
hasEventListener
(
cc
.
Node
.
EventType
.
TOUCH_END
))
{
canvas
.
off
(
cc
.
Node
.
EventType
.
TOUCH_END
,
touchEnd
)
}
if
(
canvas
.
hasEventListener
(
cc
.
Node
.
EventType
.
TOUCH_CANCEL
))
{
canvas
.
off
(
cc
.
Node
.
EventType
.
TOUCH_CANCEL
,
touchEnd
)
}
}
canvas
.
on
(
cc
.
Node
.
EventType
.
TOUCH_MOVE
,
touchMove
)
canvas
.
on
(
cc
.
Node
.
EventType
.
MOUSE_MOVE
,
mouseMove
)
canvas
.
on
(
cc
.
Node
.
EventType
.
TOUCH_END
,
touchEnd
)
canvas
.
on
(
cc
.
Node
.
EventType
.
TOUCH_CANCEL
,
touchEnd
)
canvas
.
on
(
cc
.
Node
.
EventType
.
MOUSE_UP
,
mouseUp
)
},
removeHtmlCanvasListener
(
type
)
{
const
canvasHtml
=
document
.
querySelector
(
'
canvas
'
);
canvasHtml
.
addEventListener
(
type
,
(
e
)
=>
{})
},
removeHtmlTouchEnd
()
{
const
canvasHtml
=
document
.
querySelector
(
'
canvas
'
);
canvasHtml
.
removeEventListener
(
'
touchend
'
,
this
.
htmlCanvasTouchendFunc
,
this
);
},
canvasTouchMove
(
e
)
{
if
(
!
this
.
_curShowItem
)
{
return
;
}
const
pos
=
e
.
getLocation
();
this
.
_curShowItem
.
x
=
pos
.
x
-
e
.
currentTarget
.
width
/
2
;
this
.
_curShowItem
.
y
=
pos
.
y
-
e
.
currentTarget
.
height
/
2
;
// console.log('pos: ', pos.x);
},
canvasTouchEnd
(
e
)
{
if
(
!
this
.
_curShowItem
)
{
return
;
}
this
.
checkOnDragEndRect
();
this
.
_curShowItem
=
null
;
},
checkOnDragEndRect
()
{
console
.
log
(
'
emptyGroupArr:
'
,
this
.
emptyGroupArr
);
for
(
let
i
=
0
;
i
<
this
.
dragEndRectArr
.
length
;
i
++
)
{
const
rect
=
this
.
dragEndRectArr
[
i
];
const
worldPos
=
this
.
_curShowItem
.
parent
.
convertToWorldSpaceAR
(
cc
.
v2
(
this
.
_curShowItem
.
x
,
this
.
_curShowItem
.
y
));
const
worldRect
=
rect
.
getBoundingBoxToWorld
();
if
(
worldRect
.
contains
(
worldPos
))
{
console
.
log
(
'
rect in
'
)
this
.
checkIsDragEndTarget
(
rect
);
// removeItemFromArr(this.emptyGroupArr, letterGroup);
// this.showLetterSuccess(letterGroup);
// this.checkGroupEnd();
return
;
}
}
this
.
itemBack
();
},
itemBack
()
{
cc
.
audioEngine
.
playEffect
(
this
.
wrongClip
,
false
,
0.8
);
cc
.
tween
(
this
.
_curShowItem
)
.
to
(
0.5
,
{
x
:
this
.
_curShowItem
.
baseX
,
y
:
this
.
_curShowItem
.
baseY
},
{
easing
:
"
elasticOut
"
})
.
start
();
},
checkIsDragEndTarget
(
rect
)
{
const
worldPos
=
this
.
_curShowItem
.
parent
.
convertToWorldSpaceAR
(
cc
.
v2
(
this
.
_curShowItem
.
targetPx
,
this
.
_curShowItem
.
targetPy
));
const
worldRect
=
rect
.
getBoundingBoxToWorld
();
if
(
worldRect
.
contains
(
worldPos
))
{
this
.
_curShowItem
.
x
=
this
.
_curShowItem
.
targetPx
;
this
.
_curShowItem
.
y
=
this
.
_curShowItem
.
targetPy
;
this
.
_curShowItem
.
isDragEnd
=
true
;
cc
.
audioEngine
.
playEffect
(
this
.
rightClip
,
false
,
0.8
);
}
else
{
this
.
itemBack
();
}
},
onDestroy
()
{
this
.
isDestroy
=
true
;
this
.
_timeoutIds
.
forEach
(
id
=>
{
clearTimeout
(
id
);
});
this
.
_intervalIds
.
forEach
(
id
=>
{
clearInterval
(
id
);
});
}
});
assets/ai_mz_01/scene/ai_mz_01.js.meta
deleted
100644 → 0
View file @
46e9e036
{
"ver": "1.0.8",
"uuid": "3a6f64f9-5aa1-4c66-9688-fdf354bff7a2",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}
\ No newline at end of file
assets/ai_mz_02/scene/ai_mz_02.fire
View file @
46d5e231
...
@@ -107,8 +107,8 @@
...
@@ -107,8 +107,8 @@
},
},
"_contentSize": {
"_contentSize": {
"__type__": "cc.Size",
"__type__": "cc.Size",
"width": 1
920
,
"width": 1
624
,
"height":
120
0
"height":
75
0
},
},
"_anchorPoint": {
"_anchorPoint": {
"__type__": "cc.Vec2",
"__type__": "cc.Vec2",
...
@@ -119,8 +119,8 @@
...
@@ -119,8 +119,8 @@
"__type__": "TypedArray",
"__type__": "TypedArray",
"ctor": "Float64Array",
"ctor": "Float64Array",
"array": [
"array": [
960
,
812
,
600
,
375
,
0,
0,
0,
0,
0,
0,
...
@@ -172,8 +172,8 @@
...
@@ -172,8 +172,8 @@
},
},
"_contentSize": {
"_contentSize": {
"__type__": "cc.Size",
"__type__": "cc.Size",
"width": 1
920
,
"width": 1
624
,
"height":
120
0
"height":
75
0
},
},
"_anchorPoint": {
"_anchorPoint": {
"__type__": "cc.Vec2",
"__type__": "cc.Vec2",
...
@@ -2074,8 +2074,8 @@
...
@@ -2074,8 +2074,8 @@
},
},
"_contentSize": {
"_contentSize": {
"__type__": "cc.Size",
"__type__": "cc.Size",
"width": 1
920
,
"width": 1
624
,
"height":
120
0
"height":
75
0
},
},
"_anchorPoint": {
"_anchorPoint": {
"__type__": "cc.Vec2",
"__type__": "cc.Vec2",
...
@@ -2180,8 +2180,8 @@
...
@@ -2180,8 +2180,8 @@
"_enabled": true,
"_enabled": true,
"_designResolution": {
"_designResolution": {
"__type__": "cc.Size",
"__type__": "cc.Size",
"width": 1
920
,
"width": 1
624
,
"height":
120
0
"height":
75
0
},
},
"_fitWidth": false,
"_fitWidth": false,
"_fitHeight": false,
"_fitHeight": false,
...
...
assets/ai_mz_02/scene/ai_mz_02.js
View file @
46d5e231
...
@@ -13,11 +13,11 @@ cc.Class({
...
@@ -13,11 +13,11 @@ cc.Class({
properties
:
{
properties
:
{
baseWidth
:
{
baseWidth
:
{
default
:
1
920
,
default
:
1
624
,
type
:
cc
.
Integer
type
:
cc
.
Integer
},
},
baseHeight
:
{
baseHeight
:
{
default
:
120
0
,
default
:
75
0
,
type
:
cc
.
Integer
type
:
cc
.
Integer
}
}
},
},
...
@@ -117,7 +117,7 @@ cc.Class({
...
@@ -117,7 +117,7 @@ cc.Class({
getDefaultData
()
{
getDefaultData
()
{
return
{
"
aiClassData
"
:{
"
time
"
:
60
,
"
startTime
"
:
0
,
"
itemArr
"
:[{
"
gId
"
:
"
0
"
,
"
data
"
:{
"
name
"
:
"
镜头
"
,
"
camera
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#84f466
"
},
"
nickName
"
:
"
镜头
"
},{
"
gId
"
:
"
2
"
,
"
data
"
:{
"
name
"
:
"
龙骨
"
,
"
anima
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffa4e6
"
},
"
nickName
"
:
"
龙骨
"
,
"
skeJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/e3ab840baf83c0b0d571e2420536286f.json
"
,
"
name
"
:
"
鱼_ske.json
"
},
"
texJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/d181f59eb6a4ad6cf124587ca6b34c0e.json
"
,
"
name
"
:
"
鱼_tex.json
"
},
"
texPngData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/f566cca10fd83f62a465b144ac73d483.png
"
,
"
name
"
:
"
鱼_tex.png
"
},
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
1
,
"
x
"
:
""
,
"
anchorX
"
:
""
,
"
anchorY
"
:
""
,
"
scaleX
"
:
"
0.5
"
,
"
scaleY
"
:
"
0.5
"
}
]},{
"
gId
"
:
"
4
"
,
"
data
"
:{
"
name
"
:
"
按钮
"
,
"
pic
"
:
true
,
"
commonProp
"
:
true
},
"
nickName
"
:
"
按钮
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
2.037
,
"
x
"
:
"
0
"
,
"
y
"
:
"
0
"
}],
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/790525a2e3b223339c8dfcd6a97361ba.png
"
},{
"
gId
"
:
"
2
"
,
"
data
"
:{
"
name
"
:
"
龙骨
"
,
"
anima
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffa4e6
"
},
"
nickName
"
:
"
龙骨
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
2.975
,
"
x
"
:
""
,
"
y
"
:
""
,
"
times
"
:
"
1
"
,
"
anchorX
"
:
""
,
"
anchorY
"
:
""
,
"
scaleX
"
:
"
0.5
"
,
"
scaleY
"
:
"
0.5
"
}],
"
skeJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/bd29690a750530cf6e822f6e418ed1ae.json
"
,
"
name
"
:
"
小汽车_ske.json
"
},
"
texJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/bb18572d3c4bb94f8a9afc8ea726c90d.json
"
,
"
name
"
:
"
小汽车_tex.json
"
},
"
texPngData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/84bce64cd4259e604a458d08ddd75bec.png
"
,
"
name
"
:
"
小汽车_tex.png
"
}},{
"
gId
"
:
"
1
"
,
"
data
"
:{
"
name
"
:
"
图片
"
,
"
pic
"
:
true
,
"
fill
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffde00
"
},
"
nickName
"
:
"
图片
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
0.012
}],
"
isFill
"
:
true
,
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/35f003bb6d0e410494d606fd4055ddb4.png
"
},{
"
gId
"
:
"
5
"
,
"
data
"
:{
"
name
"
:
"
重玩按钮
"
,
"
pic
"
:
true
,
"
commonProp
"
:
true
},
"
nickName
"
:
"
重玩按钮
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
5
,
"
y
"
:
"
0
"
}],
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/3a552c7843003f6803267a03546db24b.png
"
},{
"
gId
"
:
"
1
"
,
"
data
"
:{
"
name
"
:
"
图片
"
,
"
pic
"
:
true
,
"
fill
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffde00
"
},
"
nickName
"
:
"
图片
"
,
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/c8abf7383d65bcbdba8f390785cece60.png
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
6
,
"
x
"
:
"
-0.2
"
}]}]}}
return
{
"
aiClassData
"
:{
"
time
"
:
60
,
"
startTime
"
:
0
,
"
itemArr
"
:[{
"
gId
"
:
"
0
"
,
"
data
"
:{
"
name
"
:
"
镜头
"
,
"
camera
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#84f466
"
},
"
nickName
"
:
"
镜头
"
},{
"
gId
"
:
"
2
"
,
"
data
"
:{
"
name
"
:
"
龙骨
"
,
"
anima
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffa4e6
"
},
"
nickName
"
:
"
龙骨
"
,
"
skeJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/e3ab840baf83c0b0d571e2420536286f.json
"
,
"
name
"
:
"
鱼_ske.json
"
},
"
texJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/d181f59eb6a4ad6cf124587ca6b34c0e.json
"
,
"
name
"
:
"
鱼_tex.json
"
},
"
texPngData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/f566cca10fd83f62a465b144ac73d483.png
"
,
"
name
"
:
"
鱼_tex.png
"
},
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
1
,
"
x
"
:
""
,
"
anchorX
"
:
""
,
"
anchorY
"
:
""
,
"
scaleX
"
:
"
0.5
"
,
"
scaleY
"
:
"
0.5
"
}
,{
"
panelGroup
"
:[],
"
time
"
:
4.375
,
"
x
"
:
""
,
"
anchorX
"
:
""
,
"
anchorY
"
:
""
,
"
scaleX
"
:
"
0.5
"
,
"
scaleY
"
:
"
0.5
"
,
"
times
"
:
""
,
"
active
"
:
"
false
"
}]},{
"
gId
"
:
"
4
"
,
"
data
"
:{
"
name
"
:
"
按钮
"
,
"
pic
"
:
true
,
"
commonProp
"
:
true
},
"
nickName
"
:
"
按钮
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
2.037
,
"
x
"
:
"
0
"
,
"
y
"
:
"
0
"
}],
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/790525a2e3b223339c8dfcd6a97361ba.png
"
},{
"
gId
"
:
"
2
"
,
"
data
"
:{
"
name
"
:
"
龙骨
"
,
"
anima
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffa4e6
"
},
"
nickName
"
:
"
龙骨
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
2.975
,
"
x
"
:
""
,
"
y
"
:
""
,
"
times
"
:
"
1
"
,
"
anchorX
"
:
""
,
"
anchorY
"
:
""
,
"
scaleX
"
:
"
0.5
"
,
"
scaleY
"
:
"
0.5
"
}],
"
skeJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/bd29690a750530cf6e822f6e418ed1ae.json
"
,
"
name
"
:
"
小汽车_ske.json
"
},
"
texJsonData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/bb18572d3c4bb94f8a9afc8ea726c90d.json
"
,
"
name
"
:
"
小汽车_tex.json
"
},
"
texPngData
"
:{
"
url
"
:
"
http://staging-teach.cdn.ireadabc.com/84bce64cd4259e604a458d08ddd75bec.png
"
,
"
name
"
:
"
小汽车_tex.png
"
}},{
"
gId
"
:
"
1
"
,
"
data
"
:{
"
name
"
:
"
图片
"
,
"
pic
"
:
true
,
"
fill
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffde00
"
},
"
nickName
"
:
"
图片
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
0.012
}],
"
isFill
"
:
true
,
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/35f003bb6d0e410494d606fd4055ddb4.png
"
},{
"
gId
"
:
"
5
"
,
"
data
"
:{
"
name
"
:
"
重玩按钮
"
,
"
pic
"
:
true
,
"
commonProp
"
:
true
},
"
nickName
"
:
"
重玩按钮
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
5
,
"
y
"
:
"
0
"
}],
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/3a552c7843003f6803267a03546db24b.png
"
},{
"
gId
"
:
"
1
"
,
"
data
"
:{
"
name
"
:
"
图片
"
,
"
pic
"
:
true
,
"
fill
"
:
true
,
"
commonProp
"
:
true
,
"
copy
"
:
true
,
"
color
"
:
"
#ffde00
"
},
"
nickName
"
:
"
图片
"
,
"
pic_url
"
:
"
http://staging-teach.cdn.ireadabc.com/c8abf7383d65bcbdba8f390785cece60.png
"
,
"
keyArrData
"
:[{
"
panelGroup
"
:[],
"
time
"
:
0.637
,
"
x
"
:
"
-0.2
"
},{
"
panelGroup
"
:[],
"
time
"
:
2.25
,
"
x
"
:
"
-0.2
"
,
"
active
"
:
"
false
"
}]}]}}
},
},
preload
()
{
preload
()
{
...
@@ -1103,18 +1103,18 @@ cc.Class({
...
@@ -1103,18 +1103,18 @@ cc.Class({
showJumpKeyData
(
item
,
keyData
)
{
showJumpKeyData
(
item
,
keyData
)
{
item
.
active
=
true
;
for
(
let
key
in
keyData
)
{
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
}
}
}
}
if
(
item
.
opacity
>
0
)
{
//
if (item.opacity > 0) {
item
.
active
=
true
;
//
item.active = true;
}
else
{
//
} else {
item
.
active
=
false
;
//
item.active = false;
}
//
}
},
},
...
@@ -1166,17 +1166,18 @@ cc.Class({
...
@@ -1166,17 +1166,18 @@ cc.Class({
this
.
cleanCurKeyActionArr
(
item
);
this
.
cleanCurKeyActionArr
(
item
);
}
}
item
.
active
=
true
;
for
(
let
key
in
keyData
)
{
for
(
let
key
in
keyData
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
if
(
item
[
key
]
!=
null
&&
keyData
[
key
]
!=
null
&&
keyData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
this
.
setItemPropertyAiClass
(
item
,
key
,
keyData
[
key
])
}
}
}
}
if
(
item
.
opacity
>
0
)
{
//
if (item.opacity > 0) {
item
.
active
=
true
;
//
item.active = true;
}
else
{
//
} else {
item
.
active
=
false
;
//
item.active = false;
}
//
}
const
actionArr
=
[];
const
actionArr
=
[];
...
@@ -1208,7 +1209,7 @@ cc.Class({
...
@@ -1208,7 +1209,7 @@ cc.Class({
if
(
item
.
curKeyActionArr
)
{
if
(
item
.
curKeyActionArr
)
{
this
.
cleanCurKeyActionArr
(
item
);
this
.
cleanCurKeyActionArr
(
item
);
}
}
item
.
active
=
true
;
let
animation
=
item
.
animationNames
[
0
];
let
animation
=
item
.
animationNames
[
0
];
let
times
=
-
1
;
let
times
=
-
1
;
for
(
let
key
in
keyData
)
{
for
(
let
key
in
keyData
)
{
...
@@ -1229,11 +1230,11 @@ cc.Class({
...
@@ -1229,11 +1230,11 @@ cc.Class({
}
}
}
}
if
(
item
.
opacity
>
0
)
{
//
if (item.opacity > 0) {
item
.
active
=
true
;
//
item.active = true;
}
else
{
//
} else {
item
.
active
=
false
;
//
item.active = false;
}
//
}
const
keyArrData
=
item
.
data
.
keyArrData
;
const
keyArrData
=
item
.
data
.
keyArrData
;
const
index
=
keyArrData
.
indexOf
(
keyData
);
const
index
=
keyArrData
.
indexOf
(
keyData
);
...
@@ -1297,6 +1298,7 @@ cc.Class({
...
@@ -1297,6 +1298,7 @@ cc.Class({
for
(
let
i
=
0
;
i
<
5
;
i
++
)
{
for
(
let
i
=
0
;
i
<
5
;
i
++
)
{
const
groupData
=
panelGroup
[
i
].
data
;
const
groupData
=
panelGroup
[
i
].
data
;
const
groupItem
=
item
.
picNodeArr
[
i
];
const
groupItem
=
item
.
picNodeArr
[
i
];
groupItem
.
active
=
true
;
for
(
let
key
in
groupData
)
{
for
(
let
key
in
groupData
)
{
if
(
groupItem
[
key
]
!=
null
&&
groupData
[
key
]
!=
null
&&
groupData
[
key
]
!=
''
)
{
if
(
groupItem
[
key
]
!=
null
&&
groupData
[
key
]
!=
null
&&
groupData
[
key
]
!=
''
)
{
this
.
setItemPropertyAiClass
(
groupItem
,
key
,
groupData
[
key
])
this
.
setItemPropertyAiClass
(
groupItem
,
key
,
groupData
[
key
])
...
@@ -1314,11 +1316,11 @@ cc.Class({
...
@@ -1314,11 +1316,11 @@ cc.Class({
}
}
}
}
if
(
groupItem
.
opacity
>
0
)
{
//
if (groupItem.opacity > 0) {
groupItem
.
active
=
true
;
//
groupItem.active = true;
}
else
{
//
} else {
groupItem
.
active
=
false
;
//
groupItem.active = false;
}
//
}
}
}
console
.
log
(
'
~panelGroup:
'
,
panelGroup
);
console
.
log
(
'
~panelGroup:
'
,
panelGroup
);
...
...
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