Commit 41e172cd authored by XieChuanJin's avatar XieChuanJin

基本完成

parent d05bb79b
...@@ -24,5 +24,6 @@ module.exports = { ...@@ -24,5 +24,6 @@ module.exports = {
'/customActivity/*': 'http://localhost:3000', '/customActivity/*': 'http://localhost:3000',
'/activtyShareCode/*': 'http://localhost:3000', '/activtyShareCode/*': 'http://localhost:3000',
'/projectx/*': 'http://localhost:3000', '/projectx/*': 'http://localhost:3000',
'/projectId/*': 'http://localhost:3000',
} }
} }
\ No newline at end of file
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
"name":"main_scene" "name":"main_scene"
}, },
{ {
"keys":"btn_close_png", "keys":"btn_close_png,rule_bg_png,rule_example_jpg",
"name":"rule_panel" "name":"rule_panel"
}, },
{ {
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
"name":"car" "name":"car"
}, },
{ {
"keys":"ball_0_png,ball_1_png,ball_2_png,ball_3_png,ball_4_png,ball_5_png,bullet_png,drop_bullet_0_png,drop_bullet_1_png,drop_power_0_png,drop_power_1_png,drop_power_2_png", "keys":"ball_0_png,ball_1_png,ball_2_png,ball_3_png,ball_4_png,ball_5_png,bullet_png,drop_bullet_0_png,drop_bullet_1_png,drop_power_0_png,drop_power_1_png,drop_power_2_png,star_png,ring_png",
"name":"game" "name":"game"
}, },
{ {
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
"name":"sign_success_panel" "name":"sign_success_panel"
}, },
{ {
"keys":"select_props_btn_use_png,select_props_example_jpg,select_props_score_bg_png,select_props_selector_png,select_props_bg_png", "keys":"select_props_btn_use_png,select_props_example_jpg,select_props_score_bg_png,select_props_selector_png,select_props_bg_png,select_btn_submit_png,select_line_png",
"name":"select_props_panel" "name":"select_props_panel"
}, },
{ {
...@@ -59,6 +59,18 @@ ...@@ -59,6 +59,18 @@
{ {
"keys":"duang_json,duang_png", "keys":"duang_json,duang_png",
"name":"animation" "name":"animation"
},
{
"keys":"rank_content_bg_png,rank_example_jpg,rank_other_rank_bg_png,rank_separator_png,rank_toggle_off_png,rank_toggle_on_png,rank1_png,rank2_png,rank3_png,rank_bg_png,btn_close_png",
"name":"rank_list_panel"
},
{
"keys":"task_bg_png,task_btn_bg_png,task_btn_bg_disabled_png,task_example_jpg,task_num_bg_png,btn_close_png,select_line_png",
"name":"task_panel"
},
{
"keys":"my_props_bg_png,my_props_content_bg_png,my_props_example_jpg,btn_close_png",
"name":"my_props_panel"
} }
], ],
"resources":[ "resources":[
...@@ -461,6 +473,126 @@ ...@@ -461,6 +473,126 @@
"name":"duang_png", "name":"duang_png",
"type":"image", "type":"image",
"url":"assets/animation/duang.png" "url":"assets/animation/duang.png"
},
{
"name":"star_png",
"type":"image",
"url":"assets/game/star.png"
},
{
"name":"ring_png",
"type":"image",
"url":"assets/game/ring.png"
},
{
"name":"rank_content_bg_png",
"type":"image",
"url":"assets/rank_list_panel/rank_content_bg.png"
},
{
"name":"rank_example_jpg",
"type":"image",
"url":"assets/rank_list_panel/rank_example.jpg"
},
{
"name":"rank_other_rank_bg_png",
"type":"image",
"url":"assets/rank_list_panel/rank_other_rank_bg.png"
},
{
"name":"rank_separator_png",
"type":"image",
"url":"assets/rank_list_panel/rank_separator.png"
},
{
"name":"rank_toggle_off_png",
"type":"image",
"url":"assets/rank_list_panel/rank_toggle_off.png"
},
{
"name":"rank_toggle_on_png",
"type":"image",
"url":"assets/rank_list_panel/rank_toggle_on.png"
},
{
"name":"rank1_png",
"type":"image",
"url":"assets/rank_list_panel/rank1.png"
},
{
"name":"rank2_png",
"type":"image",
"url":"assets/rank_list_panel/rank2.png"
},
{
"name":"rank3_png",
"type":"image",
"url":"assets/rank_list_panel/rank3.png"
},
{
"name":"rank_bg_png",
"type":"image",
"url":"assets/rank_list_panel/rank_bg.png"
},
{
"name":"select_btn_submit_png",
"type":"image",
"url":"assets/select_props_panel/select_btn_submit.png"
},
{
"name":"select_line_png",
"type":"image",
"url":"assets/select_props_panel/select_line.png"
},
{
"name":"task_bg_png",
"type":"image",
"url":"assets/task_panel/task_bg.png"
},
{
"name":"task_btn_bg_png",
"type":"image",
"url":"assets/task_panel/task_btn_bg.png"
},
{
"name":"task_btn_bg_disabled_png",
"type":"image",
"url":"assets/task_panel/task_btn_bg_disabled.png"
},
{
"name":"task_example_jpg",
"type":"image",
"url":"assets/task_panel/task_example.jpg"
},
{
"name":"task_num_bg_png",
"type":"image",
"url":"assets/task_panel/task_num_bg.png"
},
{
"name":"rule_bg_png",
"type":"image",
"url":"assets/rule_panel/rule_bg.png"
},
{
"name":"rule_example_jpg",
"type":"image",
"url":"assets/rule_panel/rule_example.jpg"
},
{
"name":"my_props_bg_png",
"type":"image",
"url":"assets/my_props_panel/my_props_bg.png"
},
{
"name":"my_props_content_bg_png",
"type":"image",
"url":"assets/my_props_panel/my_props_content_bg.png"
},
{
"name":"my_props_example_jpg",
"type":"image",
"url":"assets/my_props_panel/my_props_example.jpg"
} }
] ]
} }
\ No newline at end of file
...@@ -7,7 +7,11 @@ ...@@ -7,7 +7,11 @@
"resource/skins/LoadingSkin.exml", "resource/skins/LoadingSkin.exml",
"resource/skins/ToastPanelSkin.exml", "resource/skins/ToastPanelSkin.exml",
"resource/skins/SignInItem.exml", "resource/skins/SignInItem.exml",
"resource/skins/SelectPropsItem.exml" "resource/skins/SelectPropsItem.exml",
"resource/skins/RankListItem.exml",
"resource/skins/RankListPanelRewardItem.exml",
"resource/skins/TaskItem.exml",
"resource/skins/PropsItem.exml"
], ],
"path": "resource/default.thm.json" "path": "resource/default.thm.json"
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="MyPropsPanelSkin" width="750" height="1624" xmlns:e="http://ns.egret.com/eui"
xmlns:w="http://ns.egret.com/wing" xmlns:ns1="*">
<e:Group width="527" height="623" x="112" y="251">
<e:Image source="my_props_bg_png" />
<ns1:MButton id="btnClose" label="" x="484" y="-80.31" scaleX="1" scaleY="1">
<ns1:skinName>
<e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="btn_close_png" />
<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0" />
</e:Skin>
</ns1:skinName>
</ns1:MButton>
<e:Image source="my_props_content_bg_png" y="207" x="45" />
<e:DataGroup id="dataGroup" width="403.33" height="212" x="68" y="255" anchorOffsetX="0" anchorOffsetY="0"
itemRendererSkinName="PropsItem">
<e:layout>
<e:TileLayout horizontalGap="27" verticalGap="10" />
</e:layout>
</e:DataGroup>
</e:Group>
<e:Image source="my_props_example_jpg" alpha="0.5" locked="true" visible="false" />
</e:Skin>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="PropsItem" xmlns:e="http://ns.egret.com/eui" xmlns:w="http://ns.egret.com/wing">
<e:Group width="187" height="101" anchorOffsetY="0" anchorOffsetX="0">
<e:Image id="img" x="8.33" y="10" source=""/>
<e:Group x="156" y="2" width="30" height="30">
<e:Image id="cornerMark" source=""/>
<e:Label id="labelNum" text="" size="19.52" horizontalCenter="0" verticalCenter="0" textColor="0xffffff"/>
</e:Group>
</e:Group>
</e:Skin>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="RankListItem" xmlns:e="http://ns.egret.com/eui" xmlns:ns1="*">
<e:Group width="493.5" height="48.5" anchorOffsetY="0" anchorOffsetX="0">
<e:Image source="rank_separator_png" bottom="0" horizontalCenter="0" />
<e:Group x="32" y="10.5">
<e:Image id="imgRankBg" source="rank_other_rank_bg_png" />
<ns1:MLabel id="labelRank" limit="3" text="" size="16.33" textColor="0xb7b3fe" horizontalCenter="0"
verticalCenter="0" />
</e:Group>
<ns1:MLabel limit="12" id="labelNickname" text="" y="13.5" size="20" left="78" />
<ns1:MLabel id="labelScore" limit="13" text="" y="13.5" textColor="0xffe380" size="20" left="329" />
</e:Group>
</e:Skin>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="RankListPanelRewardItem" xmlns:e="http://ns.egret.com/eui">
<e:Group width="80" height="113.5" anchorOffsetX="0" anchorOffsetY="0">
<e:Image id="img" width="80" height="80" x="0" y="0" />
<e:Label id="label" text="" y="93" textColor="0xd1ceff" size="20" horizontalCenter="0"/>
</e:Group>
</e:Skin>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="RankListPanelSkin" width="750" height="1624" xmlns:e="http://ns.egret.com/eui"
xmlns:w="http://ns.egret.com/wing" xmlns:ns1="*">
<e:Group width="527" height="818" x="112" y="108">
<e:Image source="rank_bg_png" />
<e:Image source="rank_content_bg_png" x="17" y="265" width="494" />
<e:RadioButton id="toggleCurrent" label="" x="17" y="207" width="247">
<e:skinName>
<e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="rank_toggle_off_png" source.down="rank_toggle_on_png" />
<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0" />
</e:Skin>
</e:skinName>
</e:RadioButton>
<e:RadioButton id="toggleLast" label="" x="264" y="207" width="247">
<e:skinName>
<e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="rank_toggle_off_png" source.down="rank_toggle_on_png" />
<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0" />
</e:Skin>
</e:skinName>
</e:RadioButton>
<e:Label text="上期榜单" x="336" y="233" size="26" bold="true" touchEnabled="false" />
<e:Label text="本期榜单" x="84" y="233" size="26" bold="true" touchEnabled="false" />
<ns1:MLabel id="labelMyNickname" limit="12" text="我" y="304" size="20" textColor="0xd1ceff" textAlign="left"
horizontalCenter="-146.5"/>
<ns1:MLabel id="labelMyRank" limit="8" text="" y="304" size="20" textColor="0xD1CEFF" textAlign="left"
horizontalCenter="-7.5"/>
<ns1:MLabel id="labelTopScore" limit="13" text="历史最高:5000" y="304" size="20" textColor="0xD1CEFF"
textAlign="left" left="337" />
<e:Label id="labelLotteryDate" text="" y="624" size="26" horizontalCenter="0" />
<e:Label id="labelWinning" text="" scaleX="1" scaleY="1" textAlign="center" size="30" lineSpacing="15"
horizontalCenter="0" top="853" />
<ns1:MButton id="btnClose" label="" x="483" y="15">
<ns1:skinName>
<e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="btn_close_png" />
<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0" />
</e:Skin>
</ns1:skinName>
</ns1:MButton>
<e:Image source="rank_separator_png" y="353" x="17.5" />
<e:Scroller id="scrollerRank" x="16.5" y="355">
<e:List id="dataGroupRank" width="494.5" height="249" anchorOffsetY="0" anchorOffsetX="0"
itemRendererSkinName="RankListItem">
<e:layout>
<e:VerticalLayout gap="1" />
</e:layout>
</e:List>
</e:Scroller>
<e:Scroller x="39" y="680">
<e:DataGroup id="dataGroupReward" width="453.5" height="119" anchorOffsetY="0" anchorOffsetX="0"
itemRendererSkinName="RankListPanelRewardItem">
<e:layout>
<e:HorizontalLayout gap="44" />
</e:layout>
</e:DataGroup>
</e:Scroller>
</e:Group>
<e:Image source="rank_example_jpg" alpha="0.5" locked="true" visible="false" />
</e:Skin>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<e:Skin class="RulePanel" xmlns:e="http://ns.egret.com/eui" xmlns:w="http://ns.egret.com/wing" xmlns:ns1="*" width="750" height="1624"> <e:Skin class="RulePanel" xmlns:e="http://ns.egret.com/eui" xmlns:w="http://ns.egret.com/wing" xmlns:ns1="*" width="750" height="1624">
<w:Config id="16d19576d08" /> <w:Config id="16d19576d08" />
<e:Group width="623" verticalCenter="-179" horizontalCenter="-0.5" alpha="1" height="594" anchorOffsetY="0"> <e:Group width="527" verticalCenter="-214.5" horizontalCenter="0" alpha="1" height="693" anchorOffsetY="0">
<e:Image anchorOffsetY="0" source="rule_bg_png"/> <e:Image anchorOffsetY="0" source="rule_bg_png"/>
<e:Scroller left="90" right="92" top="181" height="307.12" bounces="false" anchorOffsetY="0" anchorOffsetX="0"> <e:Scroller left="30" right="30" top="227" height="350.12" bounces="false" anchorOffsetY="0" anchorOffsetX="0">
<e:Group> <e:Group>
<e:Label id="text" text="" left="0" right="0" size="30" lineSpacing="20" top="10" <e:Label id="text" text="" left="0" right="0" size="24" lineSpacing="21" top="10"
width="460" textColor="0xba5c03"/> textColor="0xffffff" anchorOffsetY="0"/>
</e:Group> </e:Group>
</e:Scroller> </e:Scroller>
<e:Label id="title" text="活动规则" size="48" textAlign="center" textColor="0xba5c03" bold="true" x="216" y="69"/>
<ns1:MButton id="btnClose" label="" x="590" y="-100" scaleX="1" scaleY="1"> <ns1:MButton id="btnClose" label="" x="482" y="-78" scaleX="1" scaleY="1">
<ns1:skinName> <ns1:skinName>
<e:Skin states="up,down,disabled"> <e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="btn_close_png"/> <e:Image width="100%" height="100%" source="btn_close_png"/>
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
</e:Group> </e:Group>
<e:Image source="rule_example_jpg" x="0" y="0" alpha="0.5" locked="true" visible="false"/>
</e:Skin> </e:Skin>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<e:Skin class="SelectPropsItem" xmlns:e="http://ns.egret.com/eui" xmlns:ns1="*"> <e:Skin class="SelectPropsItem" xmlns:e="http://ns.egret.com/eui" xmlns:ns1="*">
<e:Group width="448" height="102" y="0" anchorOffsetY="0" anchorOffsetX="0"> <e:Group width="448" height="102" y="0" anchorOffsetY="0" anchorOffsetX="0">
<e:Image id="imgProps" x="0" y="21" source="" />
<e:Group x="150" y="2" width="29" height="29">
<e:Image id="cornerMarkBg" source=""/>
<e:Label id="labelPropsNum" text="" textColor="0xf9b74b" size="19.52" horizontalCenter="0" verticalCenter="0"/>
</e:Group>
<ns1:MButton id="btnUse" label="" x="349.34" y="41.66"> <ns1:MButton id="btnUse" label="" x="349.34" y="41.66">
<ns1:skinName> <ns1:skinName>
<e:Skin states="up,down,disabled"> <e:Skin states="up,down,disabled">
......
...@@ -2,21 +2,34 @@ ...@@ -2,21 +2,34 @@
<e:Skin class="SelectPropsPanelSkin" width="750" height="1624" xmlns:e="http://ns.egret.com/eui" <e:Skin class="SelectPropsPanelSkin" width="750" height="1624" xmlns:e="http://ns.egret.com/eui"
xmlns:w="http://ns.egret.com/wing" xmlns:ns1="*"> xmlns:w="http://ns.egret.com/wing" xmlns:ns1="*">
<e:Group width="527" height="1018" y="67" x="112"> <e:Group width="527" height="1018" y="67" x="112">
<e:Image source="select_props_bg_png" /> <e:Image id="bg" source="select_props_bg_png"></e:Image>
<e:Image id="bgMask" source="select_props_bg_png" scale9Grid="65,133,397,821" height="1018" visible="false" />
<e:Image source="select_props_score_bg_png" y="186" x="22" /> <e:Image source="select_props_score_bg_png" y="186" x="22" />
<e:Label text="当前成绩" x="121" y="211" size="36" textColor="0xd1ceff" /> <e:Label text="当前成绩" x="121" y="211" size="36" textColor="0xd1ceff" />
<e:Label id="labelScore" text="" y="206" size="48" bold="true" left="277" /> <e:Label id="labelScore" text="" y="206" size="48" bold="true" left="277" />
<e:Label text="使用道具刷新我的成绩" x="75" y="337" textColor="0xfde750" size="24" /> <e:Label text="使用道具刷新我的成绩" x="75" y="337" textColor="0xfde750" size="24" />
<e:Image source="main_time_bg_png" x="332" y="294" scaleX="0.86" scaleY="0.86" cacheAsBitmap="true" /> <e:Image source="main_time_bg_png" x="332" y="294" scaleX="0.86" scaleY="0.86" cacheAsBitmap="true" />
<e:Label text="只能使用一种道具,同种道具数量可累加使用!" x="108" y="966" size="16" textColor="0xd6d4f8" />
<e:Label id="labelCountDown" text="" textColor="0x4c38a7" size="28" bold="true" horizontalCenter="108.5" <e:Label id="labelCountDown" text="" textColor="0x4c38a7" size="28" bold="true" horizontalCenter="108.5"
verticalCenter="-159" /> verticalCenter="-159" />
<e:DataGroup id="dataGroup" width="449.33" height="417" x="39" y="399" anchorOffsetX="0" anchorOffsetY="0" <e:DataGroup id="dataGroup" width="449.33" height="417" x="39" y="399" anchorOffsetX="0" anchorOffsetY="0"
itemRendererSkinName="SelectPropsItem"> itemRendererSkinName="SelectPropsItem">
<e:layout> <e:layout>
<e:VerticalLayout gap="45"/> <e:VerticalLayout gap="45" />
</e:layout> </e:layout>
</e:DataGroup> </e:DataGroup>
<e:Group id="groupBottom" width="527" touchThrough="true">
<ns1:MButton id="btnSubmit" label="" y="828" horizontalCenter="0">
<ns1:skinName>
<e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="select_btn_submit_png" />
<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0" />
</e:Skin>
</ns1:skinName>
</ns1:MButton>
<e:Image source="select_line_png" y="941.66" x="193" />
<e:Label text="温馨提示" y="932" size="18" textColor="0xd6d4f8" x="228" />
<e:Label text="只能使用一种道具,同种道具数量可累加使用!" x="108" y="966" size="16" textColor="0xd6d4f8" />
</e:Group>
</e:Group> </e:Group>
<e:Image source="select_props_example_jpg" alpha="0.5" locked="true" visible="false"/> <e:Image source="select_props_example_jpg" alpha="0.5" locked="true" visible="false"/>
</e:Skin> </e:Skin>
\ No newline at end of file
...@@ -40,9 +40,9 @@ ...@@ -40,9 +40,9 @@
<ns1:skinName> <ns1:skinName>
<e:Skin states="up,down,disabled"> <e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="start_btn_start_png" /> <e:Image width="100%" height="100%" source="start_btn_start_png" />
<e:Label id="labelStartShadow" text="开始游戏×3" size="54" horizontalCenter="-4" verticalCenter="3" <e:Label id="labelStartShadow" text="开始游戏" size="54" horizontalCenter="-4" verticalCenter="3"
textColor="0xf25e3e" alpha="0.5" bold="true" /> textColor="0xf25e3e" alpha="0.5" bold="true" />
<e:Label id="labelStart" text="开始游戏×3" size="54" horizontalCenter="0" verticalCenter="0" bold="true" /> <e:Label id="labelStart" text="开始游戏" size="54" horizontalCenter="0" verticalCenter="0" bold="true" />
</e:Skin> </e:Skin>
</ns1:skinName> </ns1:skinName>
</ns1:MButton> </ns1:MButton>
......
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="TaskItem" xmlns:e="http://ns.egret.com/eui" xmlns:ns1="*">
<e:Group width="475" height="93" anchorOffsetX="0" anchorOffsetY="0">
<e:Group x="6.34" y="10.32">
<e:Image source="task_num_bg_png" />
<e:Label id="labelNum" text="" size="24" horizontalCenter="0" verticalCenter="0" />
</e:Group>
<e:Label id="labelContent" text="" y="19.29" size="24" left="98" textAlign="left" lineSpacing="12"/>
<ns1:MButton id="btnDo" label="" x="342.34" y="19">
<ns1:skinName>
<e:Skin states="up,down,disabled">
<e:Image id="image" width="100%" height="100%" source="task_btn_bg_png"
source.disabled="task_btn_bg_disabled_png" />
<e:Label id="labelDisplay" size="28" textColor="0xfd6a48" horizontalCenter="0" verticalCenter="0" />
</e:Skin>
</ns1:skinName>
</ns1:MButton>
</e:Group>
</e:Skin>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="TaskPanelSkin" width="750" height="1624" xmlns:e="http://ns.egret.com/eui"
xmlns:w="http://ns.egret.com/wing" xmlns:ns1="*">
<e:Group width="526" height="645" x="112" y="252">
<e:Image source="task_bg_png" />
<e:Scroller x="29" y="199">
<e:DataGroup id="dataGroup" width="480" height="339" anchorOffsetX="0" anchorOffsetY="0"
itemRendererSkinName="TaskItem">
<e:layout>
<e:VerticalLayout gap="25" />
</e:layout>
</e:DataGroup>
</e:Scroller>
<e:Image source="select_line_png" y="572.5" horizontalCenter="0"/>
<e:Label text="温馨提示" y="565" size="18" textColor="0xd6d4f8" horizontalCenter="0"/>
<e:Label text="每个任务每天完成1次即可获得游戏次数~" x="127" y="597" size="16" textColor="0xd6d4f8"/>
<ns1:MButton id="btnClose" label="" x="471" y="-73" scaleX="1" scaleY="1">
<ns1:skinName>
<e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="btn_close_png"/>
<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0"/>
</e:Skin>
</ns1:skinName>
</ns1:MButton>
</e:Group>
<e:Image source="task_example_jpg" alpha="0.5" visible="false"/>
</e:Skin>
\ No newline at end of file
...@@ -117,6 +117,7 @@ export default class Drop extends MoveObjcet implements PoolElement { ...@@ -117,6 +117,7 @@ export default class Drop extends MoveObjcet implements PoolElement {
this.isGround = true; this.isGround = true;
this.physics.velocity.y = 0; this.physics.velocity.y = 0;
this.physics.acceleration.y = 0; this.physics.acceleration.y = 0;
this.physics.velocity.x *= 0.5;
let radius = (this.physics.collider as CircleCollider).radius; let radius = (this.physics.collider as CircleCollider).radius;
this.physics.rotateVelocity = this.physics.velocity.x * (180 / (Math.PI * radius)); this.physics.rotateVelocity = this.physics.velocity.x * (180 / (Math.PI * radius));
......
...@@ -4,7 +4,7 @@ import { MConfigs } from "./MConfigs"; ...@@ -4,7 +4,7 @@ import { MConfigs } from "./MConfigs";
import { getBallScore, getProp } from "./GUtils"; import { getBallScore, getProp } from "./GUtils";
import MainScene from "../Scene/MainScene"; import MainScene from "../Scene/MainScene";
import MArray from "../components/MArray"; import MArray from "../components/MArray";
import { PoolElement } from "../Components/Pool"; import Pool, { PoolElement } from "../Components/Pool";
import { ThroughSubmitData } from "../../libs/tw/data/custom/throughSubmit/ThroughSubmitData"; import { ThroughSubmitData } from "../../libs/tw/data/custom/throughSubmit/ThroughSubmitData";
import { MConst } from "./MConst"; import { MConst } from "./MConst";
import Drop from "../Game/Drop"; import Drop from "../Game/Drop";
...@@ -14,6 +14,8 @@ import DebugMgr from "../Mgr/DebugMgr"; ...@@ -14,6 +14,8 @@ import DebugMgr from "../Mgr/DebugMgr";
import GameMgr from "../Mgr/GameMgr"; import GameMgr from "../Mgr/GameMgr";
import MTimer from "../components/MTimer"; import MTimer from "../components/MTimer";
import SoundMgr from "../Mgr/SoundMgr"; import SoundMgr from "../Mgr/SoundMgr";
import MovieClipMgr from "../Mgr/MovieClipMgr";
import MTweenMgr from "../components/MTween";
export default class Ball extends MoveObjcet implements PoolElement { export default class Ball extends MoveObjcet implements PoolElement {
private colorIndex = 0; private colorIndex = 0;
...@@ -61,6 +63,7 @@ export default class Ball extends MoveObjcet implements PoolElement { ...@@ -61,6 +63,7 @@ export default class Ball extends MoveObjcet implements PoolElement {
} else { } else {
this.drop(); this.drop();
} }
this.playBoomEffect();
SoundMgr.instance.playEffect("boom_mp3"); SoundMgr.instance.playEffect("boom_mp3");
this.context.ballPool.destroy(this); this.context.ballPool.destroy(this);
} }
...@@ -156,7 +159,8 @@ export default class Ball extends MoveObjcet implements PoolElement { ...@@ -156,7 +159,8 @@ export default class Ball extends MoveObjcet implements PoolElement {
} }
this.y = MConst.BallInitPosY; this.y = MConst.BallInitPosY;
this.physics.velocity.x = dir * MConst.BallVelocityX; this.physics.velocity.x = this.getRandomVelocityX(dir);
// console.error(Math.abs(this.physics.velocity.x));
this.physics.onMoved.add((owner, remove) => { this.physics.onMoved.add((owner, remove) => {
if (dir == 1) { if (dir == 1) {
if (this.x > this.width / 2) { if (this.x > this.width / 2) {
...@@ -172,10 +176,15 @@ export default class Ball extends MoveObjcet implements PoolElement { ...@@ -172,10 +176,15 @@ export default class Ball extends MoveObjcet implements PoolElement {
}); });
} }
private getRandomVelocityX(direction: 1 | -1) {
return direction * MConst.BallVelocityX * (1 + ((1 / this.scaleRatio) - 1) * MUtils.random(0, 0.15));
}
startGravityStage(direction: 1 | -1) { startGravityStage(direction: 1 | -1) {
this.isBornStage = false; this.isBornStage = false;
this.physics.velocity.x = MConst.BallVelocityX * direction; this.physics.velocity.x = this.getRandomVelocityX(direction);
this.physics.acceleration.y = 0.1; // console.error(Math.abs(this.physics.velocity.x));
this.physics.acceleration.y = MConst.Gravity;
} }
onCollisionEnter(other: Collider) { onCollisionEnter(other: Collider) {
...@@ -186,7 +195,16 @@ export default class Ball extends MoveObjcet implements PoolElement { ...@@ -186,7 +195,16 @@ export default class Ball extends MoveObjcet implements PoolElement {
} }
if (other.group == ColliderGroup.Ground) { if (other.group == ColliderGroup.Ground) {
this.physics.velocity.y = -MConst.BallVelocityY; this.physics.velocity.y = -(MConst.BallVelocityY * (1 + ((1 / this.scaleRatio) - 1) * MUtils.random(0, 0.1)));
//播放灰尘动画
let clip = MovieClipMgr.instance.get("duang");
clip.x = this.x - 160 * this.scaleRatio;
clip.y = this.y + 12 * this.scaleRatio;
clip.scaleX = clip.scaleY = 1.76 * this.scaleRatio;
this.context.animationLayer.addChild(clip);
clip.autoRecyclePlay("duang");
//判断是否会震动地面
if (this.sizeIndex >= MConfigs.size.length - 2) { if (this.sizeIndex >= MConfigs.size.length - 2) {
this.context.shake(); this.context.shake();
SoundMgr.instance.playEffect("dong_mp3"); SoundMgr.instance.playEffect("dong_mp3");
...@@ -256,7 +274,8 @@ export default class Ball extends MoveObjcet implements PoolElement { ...@@ -256,7 +274,8 @@ export default class Ball extends MoveObjcet implements PoolElement {
ball.posX = this.posX; ball.posX = this.posX;
ball.posY = this.posY; ball.posY = this.posY;
ball.startGravityStage(direction); ball.startGravityStage(direction);
ball.physics.velocity.y = -MConst.BallSplitVelocityY/* + Math.min(this.physics.velocity.y, 0) */; ball.physics.velocity.y = -MConst.BallSplitVelocityY;
} }
callback(1); callback(1);
...@@ -294,8 +313,93 @@ export default class Ball extends MoveObjcet implements PoolElement { ...@@ -294,8 +313,93 @@ export default class Ball extends MoveObjcet implements PoolElement {
drop.y = this.posY - drop.bitmap.height / 2; drop.y = this.posY - drop.bitmap.height / 2;
let offsetRatio = (i - 1) + (2 - (drops.length - 1)); let offsetRatio = (i - 1) + (2 - (drops.length - 1));
let x = MConst.DropVelocityX.x + offsetRatio * MConst.DropVelocityX.offset; let x = MConst.DropVelocityX.x + offsetRatio * MConst.DropVelocityX.offset;
x *= MUtils.random(0.9, 1.1);
drop.physics.velocity.x = dir * x; drop.physics.velocity.x = dir * x;
drop.physics.velocity.y = -(x * 4); drop.physics.velocity.y = -(x * 5 * MUtils.random(0.9, 1.1));
}
}
private playBoomEffect() {
const color = MConfigs.boomEffectColor[MUtils.randomInt(0, MConfigs.boomEffectColor.length)];
const scaleRatio = this.scaleRatio;
//星星
const range = MConst.DefaultBallWidth * 1.5 * this.scaleRatio;
for (let i = 0; i <= 7; i++) {
const star = this.starPool.get().init(color);
const randomMax = 0.5 + (scaleRatio - 0.3125) / 2;
const scale = MUtils.random(randomMax - 0.64 * scaleRatio, randomMax);
star.width = MConst.DefaultStarSize.width * scale;
star.height = MConst.DefaultStarSize.height * scale;
star.x = this.x - star.width / 2;
star.y = this.y - star.height / 2;
MTweenMgr.instance.get(star)
.to({
x: this.x + MUtils.random(-1, 1) * range - star.width / 2,
y: this.y + MUtils.random(-1, 1) * range - star.height / 2,
alpha: 0
}, BoomEffectDuration, false)
.call(() => {
this.starPool.recycle(star);
});
} }
//环
for (let i = 0; i <= 2; i++) {
let ring = this.ringPool.get().init(color);
ring.width = MConst.DefaultRingWidth * scaleRatio;
ring.height = MConst.DefaultRingWidth * scaleRatio;
ring.anchorOffsetX = ring.width / 2;
ring.anchorOffsetY = ring.height / 2;
ring.x = this.x;
ring.y = this.y;
ring.scaleX = ring.scaleY = 0.186 * (i + 1);
MTweenMgr.instance.get(ring)
.to({
scaleX: ring.scaleX * 1.792,
scaleY: ring.scaleY * 1.792,
alpha: 0
}, BoomEffectDuration + (i - 1) * BoomEffectDuration * 0.33, false)
.call(() => {
this.ringPool.recycle(ring);
});
}
}
private starPool = new EffectBitmapPool(this.context.animationLayer, "star_png");
private ringPool = new EffectBitmapPool(this.context.animationLayer, "ring_png");
}
const BoomEffectDuration = 400;
class EffectBitmapPool extends Pool<EffectBitmap>{
private layer: egret.DisplayObjectContainer = null;
private resName: string = null;
constructor(layer: egret.DisplayObjectContainer, resName: string) {
super();
this.layer = layer;
this.resName = resName;
}
createElement() {
let star = new EffectBitmap(RES.getRes(this.resName));
this.layer.addChild(star);
return star;
}
}
class EffectBitmap extends egret.Bitmap implements PoolElement {
init(color: number) {
MUtils.setColorFilter(this, color);
return this;
}
onElementInit() {
this.visible = true;
this.alpha = 1;
}
onElementRecycle() {
this.visible = false;
} }
} }
...@@ -29,9 +29,9 @@ export function clearShareImg() { ...@@ -29,9 +29,9 @@ export function clearShareImg() {
} }
export function getBallScore(bulletScore: number, powerScore: number, colorIndex: number): any { export function getBallScore(bulletScore: number, powerScore: number, colorIndex: number): any {
let func2 = ([a, b]) => { let getScoreFromRange = ([a, b]) => {
a = Math.ceil(a); a = Math.ceil(a * 0.5);
b = Math.ceil(b); b = Math.ceil(b) * 0.5;
let n = Math.abs(b - a) + 1; let n = Math.abs(b - a) + 1;
n = Math.floor(n / 6); n = Math.floor(n / 6);
const m = []; const m = [];
...@@ -45,14 +45,14 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex ...@@ -45,14 +45,14 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex
} }
if (bulletScore <= 20) if (bulletScore <= 20)
return func2([0.01 * powerScore, 0.2 * powerScore]); return getScoreFromRange([0.01 * powerScore, 0.2 * powerScore]);
if (bulletScore > 20 && bulletScore <= 40) { if (bulletScore > 20 && bulletScore <= 40) {
return func2([0.2 * powerScore, 0.6 * powerScore]); return getScoreFromRange([0.2 * powerScore, 0.6 * powerScore]);
} }
let func1 = (list: any[], props: any[]) => { let getRange = (list: any[], props: any[]) => {
return func2(getProp(list, props)[0]); return getScoreFromRange(getProp(list, props)[0]);
} }
if (bulletScore > 40 && bulletScore <= 60) { if (bulletScore > 40 && bulletScore <= 60) {
...@@ -61,7 +61,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex ...@@ -61,7 +61,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex
[0.6 * powerScore, 0.8 * powerScore], [0.6 * powerScore, 0.8 * powerScore],
[0.8 * powerScore, 1.5 * powerScore], [0.8 * powerScore, 1.5 * powerScore],
] ]
return func1(list, [3, 5, 2]); return getRange(list, [3, 5, 2]);
} }
if (bulletScore > 60 && bulletScore <= 80) { if (bulletScore > 60 && bulletScore <= 80) {
const list = [ const list = [
...@@ -69,7 +69,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex ...@@ -69,7 +69,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex
[0.8 * powerScore, 1.5 * powerScore], [0.8 * powerScore, 1.5 * powerScore],
[1.5 * powerScore, 2.2 * powerScore], [1.5 * powerScore, 2.2 * powerScore],
] ]
return func1(list, [2, 5, 2]); return getRange(list, [2, 5, 2]);
} }
if (bulletScore > 80 && bulletScore <= 100) { if (bulletScore > 80 && bulletScore <= 100) {
...@@ -78,7 +78,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex ...@@ -78,7 +78,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex
[2.2 * powerScore, 3.2 * powerScore], [2.2 * powerScore, 3.2 * powerScore],
[3.2 * powerScore, 4.2 * powerScore], [3.2 * powerScore, 4.2 * powerScore],
] ]
return func1(list, [1, 5, 4]); return getRange(list, [1, 5, 4]);
} }
if (bulletScore > 100 && bulletScore <= 120) { if (bulletScore > 100 && bulletScore <= 120) {
...@@ -87,7 +87,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex ...@@ -87,7 +87,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex
[3.2 * powerScore, 4.2 * powerScore], [3.2 * powerScore, 4.2 * powerScore],
[4.2 * powerScore, 5.2 * powerScore], [4.2 * powerScore, 5.2 * powerScore],
] ]
return func1(list, [1, 4, 5]); return getRange(list, [1, 4, 5]);
} }
const list = [ const list = [
...@@ -95,7 +95,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex ...@@ -95,7 +95,7 @@ export function getBallScore(bulletScore: number, powerScore: number, colorIndex
[3.2 * powerScore, 4.2 * powerScore], [3.2 * powerScore, 4.2 * powerScore],
[4.2 * powerScore, 5.2 * powerScore], [4.2 * powerScore, 5.2 * powerScore],
] ]
return func1(list, [1, 3, 6]); return getRange(list, [1, 3, 6]);
} }
export function getProp(items: any[], props: number[], n = 1) { export function getProp(items: any[], props: number[], n = 1) {
......
...@@ -104,4 +104,39 @@ export namespace MConfigs { ...@@ -104,4 +104,39 @@ export namespace MConfigs {
} }
export const selectPropsCountDown = 10; export const selectPropsCountDown = 10;
export const boomEffectColor = [
0xe41014,
0xff9600,
0x0090ff,
0x8aff00,
0xffe720
]
/**倒计时秒数 */
export const countDown = 300;
export const task: {
[key: string]: {
taskCode: string,
content: string,
btnText: string
}
} = {
"aaa": {
taskCode: "aaa",
content: "去签到领金币\n获得一次游戏机会",
btnText: "去签到"
},
"bbb": {
taskCode: "bbb",
content: "去下载x应用\n获得一次游戏机会",
btnText: "去下载"
},
"ccc": {
taskCode: "ccc",
content: "去健康运动完成打卡\n获得一次游戏机会",
btnText: "去下载"
}
}
} }
\ No newline at end of file
...@@ -11,9 +11,10 @@ export namespace MConst { ...@@ -11,9 +11,10 @@ export namespace MConst {
min: 10, min: 10,
max: 20 max: 20
} }
export const BallVelocityX = 2.5; export const Gravity = 0.15;
export const BallVelocityY = 10; export const BallVelocityX = 2;
export const BallSplitVelocityY = 6; export const BallVelocityY = 12;
export const BallSplitVelocityY = 6.8;
export const DropVelocityX = { export const DropVelocityX = {
x: 2, x: 2,
offset: 0.7 offset: 0.7
...@@ -26,4 +27,10 @@ export namespace MConst { ...@@ -26,4 +27,10 @@ export namespace MConst {
export const ReviveCardId = "sp_11"; export const ReviveCardId = "sp_11";
export const ConstantSubmitScoreNum = 100; export const ConstantSubmitScoreNum = 100;
export const DefaultBallWidth = 224;
export const DefaultRingWidth = 672 * 0.744;
export const DefaultStarSize = {
width: 76 * 0.744,
height: 72 * 0.744
};
} }
\ No newline at end of file
...@@ -122,7 +122,7 @@ export namespace MUtils { ...@@ -122,7 +122,7 @@ export namespace MUtils {
return result; return result;
} */ } */
export function setImageColor(image: eui.Image, color: number) { export function setColorFilter(image: egret.DisplayObject, color: number) {
// 将16进制颜色分割成rgb值 // 将16进制颜色分割成rgb值
let spliceColor = (color: number) => { let spliceColor = (color: number) => {
let result = { r: -1, g: -1, b: -1 }; let result = { r: -1, g: -1, b: -1 };
......
...@@ -2,17 +2,20 @@ import { NetManager } from "../../libs/tw/manager/NetManager"; ...@@ -2,17 +2,20 @@ import { NetManager } from "../../libs/tw/manager/NetManager";
import { DataManager } from "../../libs/tw/manager/DataManager"; import { DataManager } from "../../libs/tw/manager/DataManager";
import ToastPanel from "../Components/ToastPanel"; import ToastPanel from "../Components/ToastPanel";
import Loading from "../Loading/Loading"; import Loading from "../Loading/Loading";
import SceneCtrl from "../Ctrls/SceneCtrl";
import StartScene from "../Scene/StartScene";
import PanelCtrl from "../Ctrls/PanelCtrl";
export default class Net { export default class Net {
public static cache: object = {}; public static cache: object = {};
public static sendGet(uri: string, param: any, onSuccess: (res: any) => void, onFail?: (res: any) => any, pollingCheck?: (res: any) => boolean, pollingCount?: number) { public static sendGet(uri: string, param: any, onSuccess: (res: any) => void, onFail?: ((res: any) => any) | boolean, pollingCheck?: (res: any) => boolean, pollingCount?: number) {
this.mSend("get", uri, param, onSuccess, onFail, pollingCheck, pollingCount); this.mSend("get", uri, param, onSuccess, onFail, pollingCheck, pollingCount);
} }
public static sendPost(uri: string, param: any, onSuccess: (res: any) => void, onFail?: (res: any) => any, pollingCheck?: (res: any) => boolean, pollingCount?: number) { public static sendPost(uri: string, param: any, onSuccess: (res: any) => void, onFail?: ((res: any) => any) | boolean, pollingCheck?: (res: any) => boolean, pollingCount?: number) {
this.mSend("post", uri, param, onSuccess, onFail, pollingCheck, pollingCount); this.mSend("post", uri, param, onSuccess, onFail, pollingCheck, pollingCount);
} }
private static mSend(type: string, uri: string, param: any, onSuccess: (res: any) => void, onFail?: (res: any) => any, pollingCheck?: (res: any) => boolean, pollingCount?: number) { private static mSend(type: string, uri: string, param: any, onSuccess: (res: any) => void, onFail?: ((res: any) => any) | boolean, pollingCheck?: (res: any) => boolean, pollingCount?: number) {
if (pollingCheck) { if (pollingCheck) {
Loading.instace.show(); Loading.instace.show();
} }
...@@ -50,11 +53,14 @@ export default class Net { ...@@ -50,11 +53,14 @@ export default class Net {
) )
|| "network error"; || "network error";
if (onFail) { if (typeof onFail == "function") {
if (!onFail(res)) { //若客户没有处理错误码,怎么默认显示错误消息或描述文字的弹窗 if (!onFail(res)) { //若客户没有处理错误码,怎么默认显示错误消息或描述文字的弹窗
ToastPanel.show(errorMsg); ToastPanel.show(errorMsg);
} }
} else { } else {
if (typeof onFail == "boolean" && onFail == true) {
Net.defaultOnFail && Net.defaultOnFail(res);
}
ToastPanel.show(errorMsg); ToastPanel.show(errorMsg);
} }
} }
...@@ -65,14 +71,10 @@ export default class Net { ...@@ -65,14 +71,10 @@ export default class Net {
console.log("requset", uri, param); console.log("requset", uri, param);
} }
public static readonly Url = { private static defaultOnFail: (res: any) => void = () => {
signData: "/projectx/{projectId}/join_1/data.do", SceneCtrl.instance.change(StartScene);
signIn: "/projectx/{projectId}/join_1/join.do", PanelCtrl.instance.closeAll();
queryProps: "/projectx/{projectId}/scoring_1/spData.do", Loading.instace.hide();
start: "/projectx/{projectId}/scoring_1/start.do",
finalSubmit: "/projectx/{projectId}/scoring_1/submit.do",
revive: "/projectx/{projectId}/scoring_1/revive.do",
constantSubmit: "/projectx/{projectId}/scoring_1/push.do"
} }
private static urlReplace(url: string) { private static urlReplace(url: string) {
...@@ -87,4 +89,20 @@ export default class Net { ...@@ -87,4 +89,20 @@ export default class Net {
return "projectId"; //TODO return "projectId"; //TODO
} }
} }
public static readonly Url = {
signData: "/projectx/{projectId}/join_1/data.do",
signIn: "/projectx/{projectId}/join_1/join.do",
queryProps: "/projectx/{projectId}/scoring_1/spData.do",
start: "/projectx/{projectId}/scoring_1/start.do",
finalSubmit: "/projectx/{projectId}/scoring_1/submit.do",
revive: "/projectx/{projectId}/scoring_1/revive.do",
constantSubmit: "/projectx/{projectId}/scoring_1/push.do",
rankList: "/projectx/{projectId}/join_3/data.do",
queryRankListData: "/{projectId}/getRanking.query",
queryNickname: "/projectx/{projectId}/join_3/userInfoList.do",
visit: "/projectx/{projectId}/scoring_1/visit.do",
taskData: "/projectx/{projectId}/join_2/data.do",
taskComplete: "/projectx/{projectId}/join_2/join.do"
}
} }
\ No newline at end of file
class MButton extends eui.Button implements eui.UIComponent { class MButton extends eui.Button implements eui.UIComponent {
public downScale = 0.9; public downScale = 0.9;
public scaleDuration = 50; public scaleDuration = 50;
public image: eui.Image;
public labelDisplay: eui.Label;
private touchID: number = null; private touchID: number = null;
private inited = false; private inited = false;
......
class MLabel extends eui.Label implements eui.UIComponent {
limit: number = 999;
public set text(v: string) {
if (typeof v == "undefined") return;
v = v.toString();
if (typeof v == "undefined") return;
if (typeof this.limit == "number" && typeof v == "string" && this.getRealLength(v) > this.limit) {
v = this.cutString(v, this.limit) + "...";
}
super.$setText(v);
}
private getRealLength(str: string) {
var realLength = 0, len = str.length, charCode = -1;
for (var i = 0; i < len; i++) {
charCode = str.charCodeAt(i);
if (charCode >= 0 && charCode <= 128) realLength += 1;
else realLength += 2;
}
return realLength;
}
private cutString(str: string, realLength: number) {
let length = 0;
let out = "";
for (let i of str) {
let charCode = i.charCodeAt(0);
if (charCode >= 0 && charCode <= 128) length += 1;
else length += 2;
if (length <= realLength)
out = out.concat(i);
if (length >= realLength)
break;
}
return out;
}
}
export default MLabel;
\ No newline at end of file
...@@ -19,6 +19,7 @@ import MTweenMgr from "./components/MTween"; ...@@ -19,6 +19,7 @@ import MTweenMgr from "./components/MTween";
import PhycicsSystem from "./Game/PhycicsSystem"; import PhycicsSystem from "./Game/PhycicsSystem";
import Ball from "./Global/Ball"; import Ball from "./Global/Ball";
import { NetUtils } from "./Global/NetUtils"; import { NetUtils } from "./Global/NetUtils";
import MLabel from "./MUI/MLabel";
@Decorator.OnUpdate @Decorator.OnUpdate
class Main extends eui.UILayer { class Main extends eui.UILayer {
...@@ -68,7 +69,6 @@ class Main extends eui.UILayer { ...@@ -68,7 +69,6 @@ class Main extends eui.UILayer {
await RES.loadGroup("loading"); await RES.loadGroup("loading");
await RES.loadGroup("toast_panel"); await RES.loadGroup("toast_panel");
await RES.loadGroup("sound"); await RES.loadGroup("sound");
await RES.loadGroup("animation");
} }
catch (e) { catch (e) {
console.error(e); console.error(e);
...@@ -100,4 +100,5 @@ class Main extends eui.UILayer { ...@@ -100,4 +100,5 @@ class Main extends eui.UILayer {
window["Main"] = Main; window["Main"] = Main;
window["MProgressBar"] = MProgressBar; window["MProgressBar"] = MProgressBar;
window["MButton"] = MButton; window["MButton"] = MButton;
\ No newline at end of file window["MLabel"] = MLabel;
\ No newline at end of file
import GameMgr from "./GameMgr"; import GameMgr from "./GameMgr";
export default class DebugMgr extends egret.DisplayObjectContainer { export default class DebugMgr extends egret.DisplayObjectContainer {
public enabled: boolean = true; public enabled: boolean = false;
public enabledGraphic: boolean = false; public enabledGraphic: boolean = false;
private shapeMap = {}; private shapeMap = {};
private graphicDebugLayer: egret.DisplayObjectContainer = null; private graphicDebugLayer: egret.DisplayObjectContainer = null;
......
...@@ -22,23 +22,53 @@ export default class MovieClipMgr { ...@@ -22,23 +22,53 @@ export default class MovieClipMgr {
} }
}(); }();
public load(name: string) { public load(name: string): boolean {
const data = RES.getRes(name + "_json"); if (typeof this.movieClipData[name] == "undefined") {
const txtr = RES.getRes(name + "_png"); const data = RES.getRes(name + "_json");
this.movieClipData[name] = new egret.MovieClipDataFactory(data, txtr).generateMovieClipData(name); const txtr = RES.getRes(name + "_png");
if (!data || !txtr) {
console.error("can not load clip res:" + name);
return false;
}
this.movieClipData[name] = new egret.MovieClipDataFactory(data, txtr).generateMovieClipData(name);
return true;
} else
return true;
} }
public create(name: string) { public create(name: string) {
if (typeof this.movieClipData[name] == "undefined") {
if (!this.load(name)) {
return null;
}
}
return new PoolMovieClip(this.movieClipData[name]); return new PoolMovieClip(this.movieClipData[name]);
} }
public get(name: string): egret.MovieClip { public get(name: string): PoolMovieClip {
return this.pool.get(name); return this.pool.get(name);
} }
public recycle(name: string, clip: PoolMovieClip) {
this.pool.recycle(name, clip);
clip.destroy();
}
} }
class PoolMovieClip extends egret.MovieClip implements PoolElement { class PoolMovieClip extends egret.MovieClip implements PoolElement {
onElementInit() { } onElementInit() { }
onElementRecycle() { } onElementRecycle() { }
playOnComplete(): Promise<void> {
this.gotoAndPlay(0, 1);
return new Promise<void>(resolve => {
this.once(egret.Event.COMPLETE, resolve, this);
});
}
autoRecyclePlay(name: string) {
this.playOnComplete().then(() => {
MovieClipMgr.instance.recycle(name, this);
});
}
} }
\ No newline at end of file
import Panel from "../views/Panel";
import { Decorator } from "../Decorator/Decorator";
import PropsItem from "./PropsItem";
import Net from "../Global/Net";
import MButton from "../MUI/MButton";
@Decorator.ClassName("MyPropsPanel")
export default class MyPropsPanel extends Panel {
public dataGroup: eui.DataGroup;
public btnClose: MButton;
async preLoadRes() {
await super.preLoadRes();
return RES.loadGroup("props");
}
onSkinComplete() {
super.onSkinComplete();
this.btnClose.onTap(this, () => this.hidePanel());
this.dataGroup.itemRenderer = PropsItem;
Net.sendGet(Net.Url.queryProps, undefined, res => {
let map = res.data.spMap;
let arr = [];
Object.keys(map).forEach(id => {
arr.push({
id: id,
num: map[id],
});
});
this.dataGroup.dataProvider = new eui.ArrayCollection(arr);
});
}
}
\ No newline at end of file
import MItem from "../components/MItem";
import { MConfigs } from "../Global/MConfigs";
import MButton from "../MUI/MButton";
import { Decorator } from "../Decorator/Decorator";
export default class PropsItem extends MItem {
public img: eui.Image;
public cornerMark: eui.Image;
public labelNum: eui.Label;
data: {
id: string,
num: number
}
constructor() {
super();
this.skinName = "resource/skins/PropsItem.exml";
}
dataChanged() {
const config = MConfigs.props[this.data.id];
this.img.source = RES.getRes(config.img);
this.cornerMark.source = RES.getRes(`props_corner_mark_${config.index}_png`);
this.labelNum.textColor = config.color;
this.labelNum.text = this.data.num.toString();
}
}
\ No newline at end of file
import Panel from "../views/Panel";
import { Decorator } from "../Decorator/Decorator";
import MButton from "../MUI/MButton";
import Net from "../Global/Net";
import Loading from "../Loading/Loading";
import MItem from "../components/MItem";
interface Record {
userId: number,
nickname?: string,
index: string,
score: string
}
@Decorator.ClassName("RankListPanel")
export default class RankListPanel extends Panel {
public toggleCurrent: eui.RadioButton;
public toggleLast: eui.RadioButton;
public labelMyNickname: eui.Label;
public labelMyRank: eui.Label;
public labelTopScore: eui.Label;
public labelLotteryDate: eui.Label;
public labelWinning: eui.Label;
public btnClose: MButton;
public scrollerRank: eui.Scroller;
public dataGroupRank: eui.List;
public dataGroupReward: eui.DataGroup;
private rankResponse: any = null;
public data: {
defaultToggle: 1 | 2
}
private cache: {
current: {
me: Record,
list: Record[],
},
last: {
me: Record,
list: Record[],
}
} = {
current: {
me: null,
list: [],
},
last: {
me: null,
list: [],
}
};
onSkinComplete() {
super.onSkinComplete();
Loading.instace.show();
this.btnClose.onTap(this, () => this.hidePanel());
let toggleGroup = new eui.RadioButtonGroup();
this.toggleCurrent.group = toggleGroup;
this.toggleLast.group = toggleGroup;
toggleGroup.addEventListener(eui.UIEvent.CHANGE, (evt: eui.UIEvent) => {
this.onToggle((evt.target as eui.RadioButtonGroup).selection);
}, this);
this.dataGroupRank.itemRenderer = RankItem;
this.dataGroupReward.itemRenderer = class extends MItem {
public img: eui.Image;
public label: eui.Label;
dataChanged() {
this.img.source = this.data.icon;
this.label.text = `第${this.data.startRank}-${this.data.endRank}名`;
}
}
this.netRequest();
}
private netRequest() {
//查询排行榜接口
Net.sendGet(Net.Url.rankList, undefined, async (res1) => {
this.dataGroupReward.dataProvider = new eui.ArrayCollection(res1.data.prizeList);
//记录当前期我的数据
const cur = res1.data.currentPeriod;
this.cache.current.me = {
userId: cur.myUserId,
score: cur.myScore,
index: cur.myIndex
};
//记录上一期期我的数据
const last = res1.data.prevPeriod;
this.cache.last.me = {
userId: last.myUserId,
score: last.myScore,
index: last.myIndex
};
this.rankResponse = res1;
const onceQueryNum = 200;
//查询当前期排行榜数据
await new Promise(resolve => {
Net.sendGet(Net.Url.queryRankListData, {
type: cur.type,
topN: onceQueryNum
}, (res2) => {
this.cache.current.list = res2.data;
resolve();
}, () => Loading.instace.hide());
});
//查询上一期期排行榜数据
await new Promise(resolve => {
Net.sendGet(Net.Url.queryRankListData, {
type: last.type,
topN: onceQueryNum
}, (res3) => {
this.cache.last.list = res3.data;
resolve();
}, () => Loading.instace.hide());
});
//查询所有的用户昵称
//我的
let userIds = [this.cache.current.me.userId];
//当前期
for (let record of this.cache.current.list) {
userIds.push(record.userId);
}
//上一期
const lastIdsBeginIndex = userIds.length;
for (let record of this.cache.last.list) {
userIds.push(record.userId);
}
//查询昵称接口
Net.sendGet(Net.Url.queryNickname, {
userIds: userIds.join(",")
}, (res4) => {
//强制数据类型
const datas: { userId: string, nickname: string }[] = res4.data;
try {
//获取我的昵称
this.setNickname(this.cache.current.me, datas[0]);
this.cache.last.me.nickname = this.cache.current.me.nickname;
//映射当前期用户的昵称
for (let i = 1; i <= lastIdsBeginIndex - 1; i++) {
this.setNickname(this.cache.current.list[i - 1], datas[i]);
}
//映射上一期用户的昵称
for (let i = lastIdsBeginIndex; i <= datas.length - 1; i++) {
this.setNickname(this.cache.last.list[i - lastIdsBeginIndex], datas[i]);
}
} catch (e) {
console.error(e);
Loading.instace.hide();
return;
}
this.setDefaultPage((this.data && this.data.defaultToggle) || 1);
Loading.instace.hide();
}, () => Loading.instace.hide());
}, () => Loading.instace.hide());
}
private setDefaultPage(toggle: 1 | 2 | eui.RadioButton) {
let target: eui.RadioButton = null;
if (toggle === 1) {
target = this.toggleCurrent;
} else if (toggle === 2) {
target = this.toggleLast;
} else if (toggle instanceof eui.RadioButton) {
target = toggle;
}
target.selected = true;
this.onToggle(target);
}
private setNickname(record: Record, resData: { userId: string, nickname: string }) {
if (typeof record.userId == "number" && resData.userId == record.userId.toString()) {
record.nickname = resData.nickname;
} else {
throw "nickname map error";
}
}
onToggle(toggle: eui.RadioButton) {
if (toggle === this.toggleCurrent) {
this.refreshPage(this.cache.current.me, this.cache.current.list, this.rankResponse.data.currentPeriod);
} else if (toggle === this.toggleLast) {
this.refreshPage(this.cache.last.me, this.cache.last.list, this.rankResponse.data.prevPeriod);
}
}
private refreshPage(myRecord: Record, list: Record[], periodData: {
openDate: string,
openFlag: boolean,
prizeId: string
}) {
//我的记录
this.labelMyNickname.text = "我";
this.labelMyRank.text = `第${myRecord.index || "未上榜"}名`;
this.labelTopScore.text = "得分:" + (myRecord.score || "0");
//排行榜
this.dataGroupRank.dataProvider = new eui.ArrayCollection(list);
//开奖
const date = this.formatDate(periodData.openDate);
this.labelLotteryDate.text = `排行榜奖励${date.month}${date.day}日开奖`;
//奖励
if (periodData.openFlag == true) {
if (periodData.prizeId)
this.labelWinning.text = "恭喜你中奖啦\n奖励已发放至您的账户,请注意查收~";
else
this.labelWinning.text = "很遗憾未中奖\n再接再厉哦~"
} else {
this.labelWinning.text = "";
}
}
private formatDate(date: string): { month: string, day: string } {
const out = { month: "", day: "" }
if (date[4] != "0") {
out.month += date[4];
}
out.month += date[5];
if (date[6] != "0") {
out.day += date[6];
}
out.day += date[7];
return out;
}
}
class RankItem extends MItem {
public imgRankBg: eui.Image;
public labelRank: eui.Label;
public labelNickname: eui.Label;
public labelScore: eui.Label;
data: Record;
dataChanged() {
this.labelRank.text = this.data.index || "";
this.labelScore.text = "得分:" + this.data.score || "0";
this.labelNickname.text = this.data.nickname || "-";
const rankNum = parseInt(this.data.index);
if (rankNum <= 3 && rankNum >= 1) {
this.imgRankBg.source = RES.getRes(`rank${rankNum}_png`);
this.labelRank.visible = false;
}
}
}
\ No newline at end of file
import Panel from "../views/Panel";
import { HtmlTextParser } from "../../libs/tc/util/HtmlTextParser";
import MButton from "../MUI/MButton";
import Net from "../Global/Net";
export default class RulePanel extends Panel {
get skinKey() { return "RulePanel" }
public text: eui.Label;
public btnClose: MButton;
data: {
msg: string
}
onSkinComplete() {
super.onSkinComplete();
this.text.textFlow = new HtmlTextParser().parse((this.data && this.data.msg) || testRule);
this.btnClose.onTap(this, () => this.hidePanel());
}
}
const testRule = `结构一节将帮助你了解常见库的格式以及如何为每种格式书写正确的声明文件。 如果你在编辑一个已经存在的文件,那么你可能不需要阅读此章节。 如果你在书写新的声明文件,那么你必须阅读此章节以理解库的不同格式是如何影响声明文件的书写的。
结构一节将帮助你了解常见库的格式以及如何为每种格式书写正确的声明文件。 如果你在编辑一个已经存在的文件,那么你可能不需要阅读此章节。 如果你在书写新的声明文件,那么你必须阅读此章节以理解库的不同格式是如何影响声明文件的书写的。`;
\ No newline at end of file
...@@ -14,6 +14,8 @@ import GameMgr from "../Mgr/GameMgr"; ...@@ -14,6 +14,8 @@ import GameMgr from "../Mgr/GameMgr";
import { MUtils } from "../Global/MUtils"; import { MUtils } from "../Global/MUtils";
import { NetUtils } from "../Global/NetUtils"; import { NetUtils } from "../Global/NetUtils";
import MainScene from "../Scene/MainScene"; import MainScene from "../Scene/MainScene";
import PropsItem from "./PropsItem";
import Loading from "../Loading/Loading";
@Decorator.OnUpdate @Decorator.OnUpdate
export default class SelectPropsPanel extends Panel implements Decorator.IDefaultCallback { export default class SelectPropsPanel extends Panel implements Decorator.IDefaultCallback {
...@@ -23,26 +25,30 @@ export default class SelectPropsPanel extends Panel implements Decorator.IDefaul ...@@ -23,26 +25,30 @@ export default class SelectPropsPanel extends Panel implements Decorator.IDefaul
public dataGroup: eui.DataGroup; public dataGroup: eui.DataGroup;
private timer = MConfigs.selectPropsCountDown * 1000; private timer = MConfigs.selectPropsCountDown * 1000;
private timing: boolean = false; private timing: boolean = false;
public isWaiting = false; public bg: eui.Image;
public bgMask: eui.Image;
public groupBottom: eui.Group;
public btnSubmit: MButton;
data: { data: {
context: MainScene context: MainScene
} }
async preLoadRes() { async preLoadRes() {
await super.preLoadRes(); await super.preLoadRes();
return RES.loadGroup("props"); return RES.loadGroup("props");
} }
onUpdate(dt: number) { onUpdate(dt: number) {
if (this.timing && !this.isWaiting) { if (this.timing) {
if (this.timer > 0) { if (this.timer > 0) {
this.timer -= dt; this.timer -= dt;
} else { } else {
this.timer = 0; this.timer = 0;
this.timing = false; this.timing = false;
//时间到的逻辑 //时间到的逻辑
this.data.context.finalSubmit(() => this.hidePanel()); Loading.instace.show();
this.hidePanel();
this.data.context.finalSubmit();
} }
this.labelCountDown.text = Math.ceil(this.timer / 1000).toString() + "S"; this.labelCountDown.text = Math.ceil(this.timer / 1000).toString() + "S";
} }
...@@ -52,6 +58,12 @@ export default class SelectPropsPanel extends Panel implements Decorator.IDefaul ...@@ -52,6 +58,12 @@ export default class SelectPropsPanel extends Panel implements Decorator.IDefaul
super.onSkinComplete(); super.onSkinComplete();
this.timing = true; this.timing = true;
this.labelScore.text = this.data.context.score.toString(); this.labelScore.text = this.data.context.score.toString();
this.btnSubmit.onOnceTap(this, () => {
Loading.instace.show();
this.hidePanel();
this.data.context.finalSubmit();
});
Net.sendGet(Net.Url.queryProps, { Net.sendGet(Net.Url.queryProps, {
startId: this.data.context.startId startId: this.data.context.startId
}, (res) => { }, (res) => {
...@@ -59,46 +71,46 @@ export default class SelectPropsPanel extends Panel implements Decorator.IDefaul ...@@ -59,46 +71,46 @@ export default class SelectPropsPanel extends Panel implements Decorator.IDefaul
let arr = []; let arr = [];
Object.keys(map).forEach(id => { Object.keys(map).forEach(id => {
if (map[id] && map[id] > 0) { if (map[id] && map[id] > 0) {
let enabled = true; let limit: number = Infinity;
if (id == MConst.ReviveCardId) { //是复活卡 if (id == MConst.ReviveCardId) { //是复活卡
if (res.data.leftReviveTimes <= 0) { //没有剩余复活次数 if (res.data.leftReviveTimes <= 0) { //没有复活次数了
enabled = false; return;
} }
} else { //是加分卡 } else { //是加分卡
if (res.data.maxUseSpCnt <= 0) { limit = res.data.maxUseSpCnt;
enabled = false;
}
} }
arr.push({ arr.push({
id: id, id: id,
num: map[id], num: map[id],
enabled: enabled, context: this,
context: this limit: limit
}); });
} }
}); });
this.dataGroup.dataProvider = new eui.ArrayCollection(arr); this.dataGroup.dataProvider = new eui.ArrayCollection(arr);
this.dataGroup.itemRenderer = SelectPropsItem; this.dataGroup.itemRenderer = SelectPropsItem;
}); this.bgMask.height -= (102 + 45) * (3 - arr.length);
this.bg.mask = this.bgMask;
this.groupBottom.y -= (102 + 45) * (3 - arr.length);
}, true);
} }
} }
class SelectPropsItem extends MItem { class SelectPropsItem extends MItem {
public imgProps: eui.Image;
public cornerMarkBg: eui.Image;
public labelPropsNum: eui.Label;
public btnUse: MButton; public btnUse: MButton;
public selector: eui.Group; public selector: eui.Group;
public labelSelectorNum: eui.Label; public labelSelectorNum: eui.Label;
public btnReduce: eui.Button; public btnReduce: eui.Button;
public btnAdd: eui.Button; public btnAdd: eui.Button;
private _selectNum: number = 0; private _selectNum: number = 0;
private get selectNum() { private get selectNum() {
return this._selectNum; return this._selectNum;
} }
private set selectNum(v: number) { private set selectNum(v: number) {
v = Math.clamp(v, 0, this.data.num || 0); v = Math.clamp(v, 0, Math.min(this.data.limit, this.data.num) || 0);
this._selectNum = v; this._selectNum = v;
this.labelSelectorNum.text = this._selectNum.toString(); this.labelSelectorNum.text = this._selectNum.toString();
...@@ -112,65 +124,60 @@ class SelectPropsItem extends MItem { ...@@ -112,65 +124,60 @@ class SelectPropsItem extends MItem {
data: { data: {
id: string, id: string,
num: number, num: number,
enabled: boolean, limit: number,
context: SelectPropsPanel context: SelectPropsPanel
} }
onSkinComplete() { createChildren() {
let config = MConfigs.props[this.data.id]; super.createChildren();
this.btnUse.visible = false;
}
dataChanged() {
let propsItem = new PropsItem();
propsItem.data = this.data;
propsItem.x = -8;
propsItem.y = 10;
this.addChild(propsItem);
if (this.data.id == MConst.ReviveCardId) { //是复活卡 if (this.data.id == MConst.ReviveCardId) { //是复活卡
//复活卡使用按钮便移动
this.btnUse.x = 209; this.btnUse.x = 209;
//隐藏复活卡的选择器
this.selector.visible = false; this.selector.visible = false;
//复活按钮点击事件
this.btnUse.onOnceTap(this, (resume) => { this.btnUse.onOnceTap(this, (resume) => {
if (this.data.context.isWaiting) return; Loading.instace.show();
this.data.context.isWaiting = true; this.data.context.hidePanel();
//获取复活接口所需参数
const startId = this.data.context.data.context.startId; const startId = this.data.context.data.context.startId;
const seq = NetUtils.encryptSeq(GameMgr.instance.reviveSeq); const seq = NetUtils.encryptSeq(GameMgr.instance.reviveSeq);
//请求复活接口
Net.sendPost(Net.Url.revive, { Net.sendPost(Net.Url.revive, {
startId: startId, startId: startId,
seq: seq, seq: seq,
token: NetUtils.md5(startId + seq + "dui88") token: NetUtils.md5(startId + seq + "dui88")
}, () => { //成功 }, () => { //成功
// this.data.context.isWaiting = false; //游戏继续
this.data.context.hidePanel(); //TODO
GameMgr.instance.pause = false; this.data.context.data.context.resume();
resume(); }, true);
}, () => {
this.data.context.isWaiting = false;
});
}); });
} else { //是加分卡 } else { //是加分卡
this.btnUse.enabled = false; //加分卡点击事件
this.btnUse.onTap(this, () => { this.btnUse.onOnceTap(this, () => {
if (this.data.context.isWaiting) return; Loading.instace.show();
this.data.context.isWaiting = true; this.data.context.hidePanel();
this.data.context.data.context.finalSubmit(this.data.id, this.selectNum);
if (this.data.enabled == false) {
ToastPanel.show("使用次数已达上限");
return;
}
this.data.context.data.context.finalSubmit(() => {
// this.data.context.isWaiting = false;
this.data.context.hidePanel();
}, this.data.id, this.selectNum);
}); });
} }
if (this.data.id == MConst.ReviveCardId && !this.data.enabled) { this.btnUse.visible = true;
this.btnUse.enabled = false; }
this.imgProps.source = RES.getRes("disabled_revive_card_png");
this.cornerMarkBg.source = RES.getRes("props_disabled_corner_mark_png");
this.labelPropsNum.textColor = 0xabb6ba;
} else {
this.imgProps.source = RES.getRes(config.img);
this.cornerMarkBg.source = RES.getRes(`props_corner_mark_${config.index}_png`);
this.labelPropsNum.textColor = config.color;
}
this.labelPropsNum.text = this.data.num.toString();
onSkinComplete() {
//设置默认的使用数量为1
this.selectNum = 1;
this.btnAdd.onTap(this, () => this.selectNum++); this.btnAdd.onTap(this, () => this.selectNum++);
this.btnReduce.onTap(this, () => this.selectNum--); this.btnReduce.onTap(this, () => this.selectNum--);
} }
......
import { Decorator } from "../Decorator/Decorator";
import Panel from "../views/Panel";
import MItem from "../components/MItem";
import MButton from "../MUI/MButton";
import Net from "../Global/Net";
import { MConfigs } from "../Global/MConfigs";
import { NetUtils } from "../Global/NetUtils";
interface ItemData {
index: number,
content: string,
btnText: string,
finishFlag: boolean,
taskCode: string,
context: TaskPanel
}
@Decorator.ClassName("TaskPanel")
export default class TaskPanel extends Panel {
public dataGroup: eui.DataGroup;
public btnClose: MButton;
onSkinComplete() {
super.onSkinComplete();
this.btnClose.onTap(this, () => this.hidePanel());
this.dataGroup.itemRenderer = class extends MItem {
public labelNum: eui.Label;
public labelContent: eui.Label;
public btnDo: MButton;
data: ItemData;
onSkinComplete() {
this.btnDo.onOnceTap(this, (resume) => {
const timestamp = NetUtils.getTimestamp();
Net.sendPost(Net.Url.taskComplete, {
taskCode: this.data.taskCode,
timestamp: timestamp,
token: NetUtils.md5(this.data.taskCode + timestamp + "dui88")
}, () => {
this.data.context.refresh();
}, () => { resume() });
});
}
dataChanged() {
this.labelNum.text = "任务" + this.data.index;
this.labelContent.text = this.data.content;
this.btnDo.label = this.data.btnText;
if (this.data.finishFlag == true) {
this.btnDo.enabled = false;
this.btnDo.labelDisplay.textColor = 0xbeafad;
}
}
}
this.refresh();
}
public refresh() {
Net.sendGet(Net.Url.taskData, undefined, (res) => {
const taskList = res.data.taskList as { taskCode: string, finishFlag: boolean }[]
let arr: ItemData[] = [];
for (let i = 0; i < taskList.length; i++) {
const config = MConfigs.task[taskList[i].taskCode];
if (typeof config == "undefined") {
console.error("task config error");
continue;
}
arr.push({
index: i + 1,
content: config.content,
taskCode: config.taskCode,
finishFlag: taskList[i].finishFlag,
btnText: config.btnText,
context: this
});
}
this.dataGroup.dataProvider = new eui.ArrayCollection(arr);
}, () => { this.hidePanel() });
}
}
\ No newline at end of file
...@@ -29,15 +29,17 @@ import Panel from "../views/Panel"; ...@@ -29,15 +29,17 @@ import Panel from "../views/Panel";
import SceneCtrl from "../Ctrls/SceneCtrl"; import SceneCtrl from "../Ctrls/SceneCtrl";
import StartScene from "./StartScene"; import StartScene from "./StartScene";
import Loading from "../Loading/Loading"; import Loading from "../Loading/Loading";
import MovieClipMgr from "../Mgr/MovieClipMgr";
@Decorator.OnUpdate @Decorator.OnUpdate
export default class MainScene extends Scene implements Decorator.IDefaultCallback { export default class MainScene extends Scene implements Decorator.IDefaultCallback {
get skinKey() { return "MainScene" } get skinKey() { return "MainScene" }
public gameStage: egret.DisplayObjectContainer = new egret.DisplayObjectContainer(); public gameStage: egret.DisplayObjectContainer = new egret.DisplayObjectContainer();
public particleLayer: egret.DisplayObjectContainer = new egret.DisplayObjectContainer();
public ballLayer: egret.DisplayObjectContainer = new egret.DisplayObjectContainer(); public ballLayer: egret.DisplayObjectContainer = new egret.DisplayObjectContainer();
public bulletLayer: egret.DisplayObjectContainer = new egret.DisplayObjectContainer(); //子弹层
public animationLayer = new egret.DisplayObjectContainer();
public dropLayer: egret.DisplayObjectContainer = new egret.DisplayObjectContainer(); public dropLayer: egret.DisplayObjectContainer = new egret.DisplayObjectContainer();
public bulletPool: ParticleMgr = new ParticleMgr(this.particleLayer); public bulletPool: ParticleMgr = new ParticleMgr(this.bulletLayer);
public groupTop: eui.Group; public groupTop: eui.Group;
public labelBulletScore: eui.Label; public labelBulletScore: eui.Label;
public labelPowerScore: eui.Label; public labelPowerScore: eui.Label;
...@@ -48,6 +50,8 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -48,6 +50,8 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
private curCreateBallInterval = 0; private curCreateBallInterval = 0;
private curMaxBallNum = 1; private curMaxBallNum = 1;
public startId: number = null; public startId: number = null;
private timer: number = MConfigs.countDown * 1000;
private timing = false;
//中途提交相关 //中途提交相关
public onSubmited = new MEvent<(remove?: () => void) => void>(); public onSubmited = new MEvent<(remove?: () => void) => void>();
...@@ -197,6 +201,7 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -197,6 +201,7 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
return new Promise(async resolve => { return new Promise(async resolve => {
await RES.loadGroup("game"); await RES.loadGroup("game");
await RES.loadGroup("car"); await RES.loadGroup("car");
await RES.loadGroup("animation");
resolve(); resolve();
}); });
} }
...@@ -229,8 +234,8 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -229,8 +234,8 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
bg.y = -10; bg.y = -10;
this.gameStage.addChild(bg); this.gameStage.addChild(bg);
//子弹层 //子弹层
this.particleLayer.touchEnabled = false; this.bulletLayer.touchEnabled = false;
this.gameStage.addChild(this.particleLayer); this.gameStage.addChild(this.bulletLayer);
//炮车 //炮车
let car = new Car(this); let car = new Car(this);
...@@ -248,6 +253,10 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -248,6 +253,10 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
this.dropLayer.touchEnabled = false; this.dropLayer.touchEnabled = false;
this.gameStage.addChild(this.dropLayer); this.gameStage.addChild(this.dropLayer);
//动画层
this.animationLayer.touchEnabled = false;
this.gameStage.addChild(this.animationLayer);
//玩家控制器 //玩家控制器
let playerController = new PlayerController(); let playerController = new PlayerController();
playerController.onTouchMove = (deltaX) => { playerController.onTouchMove = (deltaX) => {
...@@ -262,6 +271,28 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -262,6 +271,28 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
this.addChild(this.groupTop); this.addChild(this.groupTop);
this.btnMusic.onTap(this, () => GameMgr.instance.switchSound()); this.btnMusic.onTap(this, () => GameMgr.instance.switchSound());
//开始倒计时
this.timing = true;
/* let tex = RES.getRes("star_png");
for (let i = 0; i < MConfigs.boomEffectColor.length; i++) {
let bit = new egret.Bitmap(tex);
MUtils.setColorFilter(bit, MConfigs.boomEffectColor[i]);
bit.x = i * 50 + 100;
bit.y = 500;
this.gameStage.addChild(bit);
console.error(bit);
} */
/* let b = this.ballPool.create(this).init(1, 0, 3);
b.x = 300;
b.y = 500;
setTimeout(() => {
b.playBoomEffect();
}, 1000); */
} }
private createWall() { private createWall() {
...@@ -322,6 +353,20 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -322,6 +353,20 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
} else { } else {
this.curCreateBallInterval = 0; this.curCreateBallInterval = 0;
} }
//倒计时
if (this.timing) {
if (this.timer > 0) {
this.timer -= dt;
} else {
this.timer = 0;
this.timing = false;
//时间到
this.pause();
this.finalSubmit();
}
this.labelTime.text = Math.ceil(this.timer / 1000).toString() + "S";
}
} }
updateMaxBallNum(bulletScore: number) { updateMaxBallNum(bulletScore: number) {
...@@ -336,11 +381,21 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -336,11 +381,21 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
} }
gameOver() { gameOver() {
GameMgr.instance.pause = true; this.pause();
PanelCtrl.instance.show(SelectPropsPanel, { context: this }); PanelCtrl.instance.show(SelectPropsPanel, { context: this });
} }
public async finalSubmit(callback?: () => void, propsId?: string, useCount?: number) { pause() {
GameMgr.instance.pause = true;
this.timing = false;
}
resume() {
GameMgr.instance.pause = false;
this.timing = true;
}
public async finalSubmit(propsId?: string, useCount?: number) {
Loading.instace.show(); Loading.instace.show();
await new Promise(resolve => { await new Promise(resolve => {
if (this.needSubmitCount > 0) { if (this.needSubmitCount > 0) {
...@@ -380,7 +435,6 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -380,7 +435,6 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
}); });
} else { } else {
Loading.instace.hide(); Loading.instace.hide();
callback();
//未中奖 //未中奖
PanelCtrl.instance.show(class extends Panel { PanelCtrl.instance.show(class extends Panel {
get skinKey() { return "NotWinningPanel" } get skinKey() { return "NotWinningPanel" }
...@@ -411,11 +465,7 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba ...@@ -411,11 +465,7 @@ export default class MainScene extends Scene implements Decorator.IDefaultCallba
highestScore: data.maxScore, highestScore: data.maxScore,
}); });
} }
}, () => { },true);
Loading.instace.hide();
callback();
SceneCtrl.instance.change(StartScene);
});
} }
public shake() { public shake() {
......
...@@ -11,6 +11,21 @@ import { Decorator } from "../Decorator/Decorator"; ...@@ -11,6 +11,21 @@ import { Decorator } from "../Decorator/Decorator";
import SoundMgr from "../Mgr/SoundMgr"; import SoundMgr from "../Mgr/SoundMgr";
import GameMgr from "../Mgr/GameMgr"; import GameMgr from "../Mgr/GameMgr";
import MovieClipMgr from "../Mgr/MovieClipMgr"; import MovieClipMgr from "../Mgr/MovieClipMgr";
import RankListPanel from "../Panel/RankListPanel";
import ToastPanel from "../Components/ToastPanel";
import Loading from "../Loading/Loading";
import TaskPanel from "../Panel/TaskPanel";
import RulePanel from "../Panel/RulePanel";
import MyPropsPanel from "../Panel/MyPropsPanel";
interface StartButton extends MButton {
labelStartShadow: eui.Label;
labelStart: eui.Label;
/* setText(text: string) {
this.labelStart.text = text;
this.labelStart.text = text;
} */
}
@Decorator.ClassName("StartScene") @Decorator.ClassName("StartScene")
export default class StartScene extends Scene { export default class StartScene extends Scene {
...@@ -18,32 +33,33 @@ export default class StartScene extends Scene { ...@@ -18,32 +33,33 @@ export default class StartScene extends Scene {
public btnReward: eui.Button; public btnReward: eui.Button;
public btnProps: eui.Button; public btnProps: eui.Button;
public btnMusic: MButton; public btnMusic: MButton;
public btnStart: MButton; public btnStart: StartButton;
public btnSignIn: MButton; public btnSignIn: MButton;
public btnRule: MButton; public btnRule: MButton;
public btnTask: MButton; public btnTask: MButton;
public btnRankList: MButton; public btnRankList: MButton;
private leftTimes: number = 0;
onSkinComplete() { onSkinComplete() {
super.onSkinComplete(); super.onSkinComplete();
/* var data = RES.getRes("duang_json");
var txtr = RES.getRes("duang_png");
var mcFactory: egret.MovieClipDataFactory = new egret.MovieClipDataFactory(data, txtr); */
MovieClipMgr.instance.load("duang");
var mc1: egret.MovieClip = MovieClipMgr.instance.get("duang");
mc1.gotoAndPlay(1);
this.addChild(mc1);
SoundMgr.instance.setMusic("bgm_mp3"); SoundMgr.instance.setMusic("bgm_mp3");
if (GameMgr.instance.hasClicked) if (GameMgr.instance.hasClicked)
SoundMgr.instance.playMusic(); SoundMgr.instance.playMusic();
this.btnStart.onTap(this, () => { this.btnStart.onOnceTap(this, (resume) => {
this.checkFirstClick(); this.checkFirstClick();
if (this.leftTimes <= 0) {
ToastPanel.show("今日游戏次数已用完");
resume();
return;
}
Net.sendPost(Net.Url.start, undefined, (res) => { Net.sendPost(Net.Url.start, undefined, (res) => {
SceneCtrl.instance.change(MainScene, { startId: res.data.startId }); SceneCtrl.instance.change(MainScene, { startId: res.data.startId });
}); }, () => { resume() });
}); });
this.btnSignIn.onTap(this, () => { this.btnSignIn.onTap(this, () => {
...@@ -56,6 +72,33 @@ export default class StartScene extends Scene { ...@@ -56,6 +72,33 @@ export default class StartScene extends Scene {
if (!GameMgr.instance.hasClicked) if (!GameMgr.instance.hasClicked)
GameMgr.instance.hasClicked = true; GameMgr.instance.hasClicked = true;
}); });
this.btnRankList.onTap(this, () => {
PanelCtrl.instance.show(RankListPanel, { defaultToggle: 1 });
});
this.btnTask.onTap(this, () => {
PanelCtrl.instance.show(TaskPanel);
});
this.btnRule.onTap(this, () => {
PanelCtrl.instance.show(RulePanel);
});
this.btnProps.onTap(this, () => {
PanelCtrl.instance.show(MyPropsPanel);
});
Net.sendGet(Net.Url.visit, undefined, (res) => {
this.leftTimes = res.data.leftTimes;
const text = "开始游戏×" + this.leftTimes;
this.btnStart.labelStart.text = text;
this.btnStart.labelStartShadow.text = text;
if (res.data.prevPrizePopUp) {
PanelCtrl.instance.show(RankListPanel, { defaultToggle: 2 });
}
}, () => { Loading.instace.show() });
} }
private checkFirstClick() { private checkFirstClick() {
......
import MSVGAClip from "./MSVGAClip"; import MSVGAClip from "./MSVGAClip";
// let deltaTimeBeforPause: number;
export function customClassPrototype() { export function customClassPrototype() {
egret.EventDispatcher.prototype.onTap = function (target: any, callback: () => void) { egret.EventDispatcher.prototype.onTap = function (target: any, callback: () => void) {
this.addEventListener(egret.TouchEvent.TOUCH_TAP, callback, target); this.addEventListener(egret.TouchEvent.TOUCH_TAP, callback, target);
...@@ -44,6 +45,13 @@ export function customClassPrototype() { ...@@ -44,6 +45,13 @@ export function customClassPrototype() {
egret.Timer["_updateDeltaTime"](); egret.Timer["_updateDeltaTime"]();
}, null); }, null);
egret.lifecycle.onPause = () => {
// deltaTimeBeforPause = egret.getTimer() - egret.Timer["_curTime"];
}
egret.lifecycle.onResume = () => {
egret.Timer["_curTime"] = egret.getTimer(); /* - deltaTimeBeforPause || 0; */
}
Array.prototype.remove = function (element: any) { Array.prototype.remove = function (element: any) {
return this.filter((e: any) => e != element); return this.filter((e: any) => e != element);
} }
......
...@@ -44,7 +44,6 @@ export default class ToastPanel extends eui.Component implements Decorator.ISkin ...@@ -44,7 +44,6 @@ export default class ToastPanel extends eui.Component implements Decorator.ISkin
this.msg = msg; this.msg = msg;
this.horizontalCenter = 0; this.horizontalCenter = 0;
this.verticalCenter = 0; this.verticalCenter = 0;
this.percentHeight = 100;
} }
public static parent: eui.UILayer = null; public static parent: eui.UILayer = null;
......
...@@ -23,6 +23,10 @@ export default class PanelCtrl { ...@@ -23,6 +23,10 @@ export default class PanelCtrl {
this._mask = mask; this._mask = mask;
} }
closeAll() {
this.stack.forEach(e => e.hidePanel());
}
show(cls: any, data?: any, hasMask: boolean = true) { show(cls: any, data?: any, hasMask: boolean = true) {
Loading.instace.show(); Loading.instace.show();
const panel: Panel = new cls(data, hasMask); const panel: Panel = new cls(data, hasMask);
......
...@@ -20,6 +20,24 @@ const config = { ...@@ -20,6 +20,24 @@ const config = {
}, },
"/projectx/projectId/scoring_1/push.do": { "/projectx/projectId/scoring_1/push.do": {
data: './json/constantSubmit.json' data: './json/constantSubmit.json'
},
"/projectx/projectId/join_3/data.do": {
data: './json/rankList.json'
},
"/projectId/getRanking.query": {
data: './json/queryRankListData.json'
},
"/projectx/projectId/join_3/userInfoList.do": {
data: './json/queryNickname.json'
},
"/projectx/projectId/scoring_1/visit.do": {
data: './json/visit.json'
},
"/projectx/projectId/join_2/data.do": {
data: './json/taskData.json'
},
"/projectx/projectId/join_2/join.do": {
data: './json/taskComplete.json'
} }
} }
......
{
"success": true,
"message": "",
"code": "",
"data": [
{
"userId": "0",
"nickname": "1234567890123456789"
},
{
"userId": "1",
"nickname": "1234567890123456789"
},
{
"userId": "2",
"nickname": "彭彭"
},
{
"userId": "3",
"nickname": "丁满"
},
{
"userId": "1",
"nickname": "丁满"
},
{
"userId": "2",
"nickname": "彭彭"
},
{
"userId": "3",
"nickname": "丁满"
},
{
"userId": "1",
"nickname": "丁满"
},
{
"userId": "2",
"nickname": "彭彭"
},
{
"userId": "3",
"nickname": "丁满"
},
{
"userId": "1",
"nickname": "丁满2"
},
{
"userId": "2",
"nickname": "彭彭2"
},
{
"userId": "3",
"nickname": "丁满2"
},
{
"userId": "1",
"nickname": "丁满2"
},
{
"userId": "2",
"nickname": "彭彭2"
},
{
"userId": "3",
"nickname": "丁满2"
},
{
"userId": "1",
"nickname": "丁满2"
},
{
"userId": "2",
"nickname": "彭彭2"
},
{
"userId": "3",
"nickname": "丁满2"
}
]
}
\ No newline at end of file
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
"code": "", "code": "",
"data": { "data": {
"spMap": { "spMap": {
"sp_1": 0, "sp_1": 10,
"sp_2": 5, "sp_2": 1,
"sp_11": 1 "sp_11":2
}, },
"maxUseSpCnt": 5, "maxUseSpCnt": 50,
"leftReviveTimes": 5 "leftReviveTimes": 1
} }
} }
\ No newline at end of file
{
"success": true,
"message": "",
"code": "",
"data": [
{
"userId": 1,
"score": 666,
"index": 123
},
{
"userId": 2,
"score": 1234567890123456789,
"index": 2
},
{
"userId": 3,
"score": 111,
"index": 3
},
{
"userId": 1,
"score": 666,
"index": 1
},
{
"userId": 2,
"score": 1234567890123456789,
"index": 2
},
{
"userId": 3,
"score": 111,
"index": 3
},
{
"userId": 1,
"score": 666,
"index": 1
},
{
"userId": 2,
"score": 1234567890123456789,
"index": 2
},
{
"userId": 3,
"score": 111,
"index": 3
}
]
}
\ No newline at end of file
{
"success": true,
"message": "",
"code": "",
"data": {
"currentPeriod": {
"type": "20191021",
"myUserId": 0,
"myScore": 1234567890123456789,
"myIndex": 2000,
"openDate": "20191028",
"openFlag": false,
"prizeId": null
},
"currentFirstFlag": false,
"prevPeriod": {
"type": "20191028",
"myUserId": 0,
"myScore": 666,
"myIndex": 21,
"openDate": "20191104",
"openFlag": true,
"prizeId": "sss_1"
},
"prevLastFlag": false,
"prizeList": [
{
"startRank": 1,
"endRank": 3,
"prizeId": "sss_1",
"name": "100金币",
"icon": "resource/assets/rank_list_panel/placeholder.png"
},
{
"startRank": 4,
"endRank": 10,
"prizeId": "sss_2",
"name": "80金币",
"icon": "resource/assets/rank_list_panel/placeholder.png"
},
{
"startRank": 11,
"endRank": 20,
"prizeId": "sss_3",
"name": "50金币",
"icon": "resource/assets/rank_list_panel/placeholder.png"
},
{
"startRank": 1,
"endRank": 3,
"prizeId": "sss_1",
"name": "100金币",
"icon": "resource/assets/rank_list_panel/placeholder.png"
}
]
}
}
\ No newline at end of file
{
"success": true,
"message": "",
"code": "",
"data": null
}
\ No newline at end of file
{
"success": true,
"message": "",
"code": "",
"data": {
"taskList": [
{
"taskCode": "aaa",
"finishFlag": true
},
{
"taskCode": "bbb",
"finishFlag": false
},
{
"taskCode": "ccc",
"finishFlag": false
}
]
}
}
\ No newline at end of file
{
"success":true,
"message":"",
"code":"",
"data":{
"rewardSpId":"sp_11",
"leftTimes":10,
"minEnableCaptchaScore":5000,
"allPeriodEnd":false,
"prevPrizePopUp":false
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment