@shijiu/jsview-vue 0.9.631 → 1.9.628
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dom/bin/jsview-browser-debug-dom.min.js +1 -1
- package/dom/bin/jsview-dom.min.js +1 -1
- package/dom/{target_core_revision.js → target_core_revision.mjs} +6 -6
- package/index.d.ts +1 -0
- package/index.js +1 -10
- package/loader/jsview-main.js +1 -1
- package/loader/loader.js +0 -1
- package/package.json +3 -3
- package/patches/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +17225 -2182
- package/patches/node_modules/@vue/compiler-sfc/dist/jsview-css-to-js.js +10 -12
- package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-format.js +5 -1
- package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-types.js +6 -1
- package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +6972 -7050
- package/patches/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js +221 -117
- package/patches/node_modules/postcss-js/objectifier.js +4 -4
- package/samples/Basic/App.vue +2 -2
- package/samples/Basic/components/FontStyle.css +1 -1
- package/samples/Basic/components/anim/AnimGroup.vue +4 -4
- package/samples/Basic/components/div/DivGroup1.vue +4 -4
- package/samples/Basic/components/div/DivGroup2.vue +5 -5
- package/samples/Basic/components/img/ImageGroup.vue +2 -2
- package/samples/Basic/components/panel/Panel1.vue +6 -6
- package/samples/Basic/components/panel/Panel2.vue +2 -2
- package/samples/Basic/components/text/TextGroup1.vue +4 -4
- package/samples/Basic/components/text/TextGroup2.vue +2 -2
- package/samples/Basic/components/text/TextOverflow.vue +2 -2
- package/samples/DemoHomepage/App.vue +1 -1
- package/samples/DemoHomepage/components/BodyFrame.vue +0 -2
- package/samples/DemoHomepage/router.js +36 -51
- package/samples/DemoHomepage/views/Homepage.vue +9 -5
- package/samples/HashHistory/router.js +6 -6
- package/samples/Input/App.vue +17 -8
- package/samples/Input/InputPanel.vue +11 -18
- package/samples/MetroWidgetDemos/PingPong/App.vue +3 -3
- package/samples/MetroWidgetDemos/PingPong/AppPage.vue +2 -17
- package/samples/MetroWidgetDemos/PingPong/AppTab.vue +10 -3
- package/samples/MetroWidgetDemos/PingPong/{TabItem.vue → Item.vue} +10 -2
- package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +2 -2
- package/samples/Preload/App.vue +11 -16
- package/samples/SprayView/App.vue +2 -2
- package/samples/TextureAnimation/App2.vue +14 -42
- package/samples/VideoDemo/App.vue +2 -2
- package/samples/VisibleSensorDemo/App.vue +25 -92
- package/scripts/jsview-post-install.js +5 -5
- package/scripts/jsview-run-android.js +12 -11
- package/utils/JsViewEngineWidget/JsvFocusBlock.vue +56 -52
- package/utils/JsViewEngineWidget/JsvFocusManager.js +1 -1
- package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +2 -36
- package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +0 -14
- package/utils/JsViewPlugin/JsvPlayer/index.js +1 -8
- package/utils/JsViewPlugin/JsvPlayer/version.js +4 -4
- package/utils/JsViewVueTools/JsvHashHistory.js +12 -12
- package/utils/JsViewVueTools/index.d.ts +5 -1
- package/utils/JsViewVueTools/index.js +1 -2
- package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +1 -11
- package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +2 -2
- package/utils/JsViewVueWidget/JsvInput/Cursor.vue +2 -4
- package/utils/JsViewVueWidget/JsvInput/JsvInput.vue +12 -13
- package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +41 -37
- package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +8 -1
- package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +1 -1
- package/utils/index.d.ts +3 -0
- package/utils/index.js +10 -0
- package/dom/jsv-browser-debug-dom.js_1 +0 -8
- package/dom/jsv-dom.js_1 +0 -6
- package/dom/jsv-forge-define.js_1 +0 -6
- package/patches/node_modules/@babel/preset-env/lib/available-plugins.js +0 -219
- package/patches/node_modules/@vue/cli-plugin-typescript/index.js +0 -100
- package/patches/node_modules/@vue/cli-service/lib/commands/serve.js +0 -395
- package/patches/node_modules/@vue/cli-service/lib/config/app.js +0 -272
- package/patches/node_modules/@vue/cli-service/lib/config/assets.js +0 -70
- package/patches/node_modules/@vue/cli-service/lib/config/base.js +0 -212
- package/patches/node_modules/vue-loader/dist/resolveScript.js +0 -70
- package/samples/Collision/App.vue +0 -452
- package/samples/ImpactStop/App.vue +0 -435
- package/samples/TextureAnimation/assets/light.png +0 -0
- package/samples/TextureAnimation/assets/light2.png +0 -0
- package/utils/JsViewVueTools/JsvImpactTracer.js +0 -113
|
@@ -1,435 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Author: ChenChanghua
|
|
3
|
-
* @Date: 2022-08-31 10:17:26
|
|
4
|
-
* @LastEditors: ChenChanghua
|
|
5
|
-
* @LastEditTime: 2022-08-31 11:17:20
|
|
6
|
-
* @Description: file content
|
|
7
|
-
-->
|
|
8
|
-
<script setup>
|
|
9
|
-
import {
|
|
10
|
-
JsvActorMoveControl,
|
|
11
|
-
JsvActorMove,
|
|
12
|
-
createImpactTracer,
|
|
13
|
-
createImpactCallback,
|
|
14
|
-
createImpactAutoFroze,
|
|
15
|
-
} from "jsview";
|
|
16
|
-
import { ref, computed, onMounted, onBeforeUnmount } from "vue";
|
|
17
|
-
import { useRouter } from "vue-router";
|
|
18
|
-
const router = useRouter();
|
|
19
|
-
const CONST_BOARD_LEFT = 0;
|
|
20
|
-
const CONST_BOARD_RIGHT = 1;
|
|
21
|
-
const CONST_BOARD_MID = 2;
|
|
22
|
-
|
|
23
|
-
const CONST_BOX_WIDTH = 30;
|
|
24
|
-
const CONST_BOX_HEIGHT = 30;
|
|
25
|
-
|
|
26
|
-
const horizontalControl = new JsvActorMoveControl();
|
|
27
|
-
const verticalControl = new JsvActorMoveControl();
|
|
28
|
-
const boxLeft = ref(null);
|
|
29
|
-
const boxMid = ref(null);
|
|
30
|
-
const boxRight = ref(null);
|
|
31
|
-
const actorVertical = { current: null };
|
|
32
|
-
const actorHorizontal = { current: null };
|
|
33
|
-
const actor = ref(null);
|
|
34
|
-
|
|
35
|
-
let viewsAutoFroze = null;
|
|
36
|
-
let sensorList = [];
|
|
37
|
-
let onBoard = CONST_BOARD_LEFT;
|
|
38
|
-
let keyPressed = false;
|
|
39
|
-
const actorState = {
|
|
40
|
-
jumping: false,
|
|
41
|
-
hMoving: false,
|
|
42
|
-
};
|
|
43
|
-
const showPrecisionGuild = ref(true);
|
|
44
|
-
const direction = ref(1);
|
|
45
|
-
const bodyState = ref(0);
|
|
46
|
-
const isJsView = Boolean(window.JsView);
|
|
47
|
-
|
|
48
|
-
const actorColor = computed(() => {
|
|
49
|
-
switch (bodyState.value) {
|
|
50
|
-
case 0: // 静止
|
|
51
|
-
return "#FF00FF";
|
|
52
|
-
case 1: // 跳起
|
|
53
|
-
return "#FFFF00";
|
|
54
|
-
case 2: // 落下
|
|
55
|
-
return "#00FFFF";
|
|
56
|
-
default:
|
|
57
|
-
return "#FFFFFF";
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
const onImpact = (impact_type) => {
|
|
62
|
-
// 根据碰撞层来调整滑块的状态(接触板信息)
|
|
63
|
-
console.log(`On impacted type=${impact_type}`);
|
|
64
|
-
bodyState.value = 0;
|
|
65
|
-
onBoard = impact_type;
|
|
66
|
-
switch (impact_type) {
|
|
67
|
-
case CONST_BOARD_MID:
|
|
68
|
-
verticalControl.jumpTo(0, -200); // jumpTo处理微小穿模的复位,-200为中间层和起始位置的高度差
|
|
69
|
-
horizontalControl.pause();
|
|
70
|
-
break;
|
|
71
|
-
case CONST_BOARD_LEFT:
|
|
72
|
-
verticalControl.jumpTo(0, 0);
|
|
73
|
-
horizontalControl.pause();
|
|
74
|
-
direction.value = 1;
|
|
75
|
-
break;
|
|
76
|
-
case CONST_BOARD_RIGHT:
|
|
77
|
-
verticalControl.jumpTo(0, 0);
|
|
78
|
-
horizontalControl.pause();
|
|
79
|
-
direction.value = -1; // 反向
|
|
80
|
-
break;
|
|
81
|
-
default:
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
actorState.jumping = false;
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
const onLanding = () => {
|
|
88
|
-
// 滑块未与左中右任何一个板发生碰撞,落在了地板的时候
|
|
89
|
-
console.log("On landing");
|
|
90
|
-
bodyState.value = 0;
|
|
91
|
-
actorState.jumping = false;
|
|
92
|
-
reset();
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
const reset = () => {
|
|
96
|
-
console.log("On reset");
|
|
97
|
-
// 将两个运动都停止后再进行jumpTo,以保证两个jumpTo动作在同一帧完成
|
|
98
|
-
verticalControl.pause(() => {
|
|
99
|
-
horizontalControl.pause(() => {
|
|
100
|
-
verticalControl.jumpTo(0, 0);
|
|
101
|
-
horizontalControl.jumpTo(0, 0);
|
|
102
|
-
onBoard = CONST_BOARD_LEFT;
|
|
103
|
-
showPrecisionGuild.value = true;
|
|
104
|
-
direction.value = 1;
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
const onKeyDown = (ev) => {
|
|
110
|
-
if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
|
|
111
|
-
router?.go(-1); // 有router时,是从DemoHomepage进入,回退
|
|
112
|
-
}
|
|
113
|
-
if (actorState.jumping) {
|
|
114
|
-
// 跳跃中,键盘锁定
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (keyPressed) {
|
|
119
|
-
// KeyPress控制按键连点
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// 控制按键按下时,键盘锁定
|
|
124
|
-
keyPressed = true;
|
|
125
|
-
|
|
126
|
-
// 滑块位置可能发生变更,所以消除动画精度测试的描素文字
|
|
127
|
-
if (showPrecisionGuild.value) {
|
|
128
|
-
showPrecisionGuild.value = false;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (ev.keyCode === 13) {
|
|
132
|
-
// 滑块跳跃(纵向和横向的配置值都是计算过的,为了进行第一跳的精度测试)
|
|
133
|
-
actorState.jumping = true;
|
|
134
|
-
// 垂直方向抛物运动
|
|
135
|
-
bodyState.value = 1;
|
|
136
|
-
verticalControl.throwAlongY(
|
|
137
|
-
-1000,
|
|
138
|
-
2450,
|
|
139
|
-
{ type: "catch", position: 100, direction: 1 },
|
|
140
|
-
() => {
|
|
141
|
-
onLanding();
|
|
142
|
-
}, // 未碰撞落地时,对滑块位置进行重置
|
|
143
|
-
() => {
|
|
144
|
-
bodyState.value = 2;
|
|
145
|
-
} // 调整成落下状态
|
|
146
|
-
);
|
|
147
|
-
// 水平方向,按照direction的值,移动到屏幕两端
|
|
148
|
-
if (direction.value > 0) {
|
|
149
|
-
horizontalControl.moveToX(1200 - CONST_BOX_WIDTH, 400, null);
|
|
150
|
-
} else {
|
|
151
|
-
horizontalControl.moveToX(0, 400, null);
|
|
152
|
-
}
|
|
153
|
-
} else if (ev.keyCode === 37) {
|
|
154
|
-
// 滑块向左移动
|
|
155
|
-
actorState.hMoving = true;
|
|
156
|
-
// 分三个区域设定移动范围
|
|
157
|
-
let target_x = 0;
|
|
158
|
-
if (onBoard === CONST_BOARD_LEFT) {
|
|
159
|
-
target_x = 0;
|
|
160
|
-
} else if (onBoard === CONST_BOARD_MID) {
|
|
161
|
-
target_x = 500;
|
|
162
|
-
} else if (onBoard === CONST_BOARD_RIGHT) {
|
|
163
|
-
target_x = 800;
|
|
164
|
-
}
|
|
165
|
-
horizontalControl.moveToX(target_x, 300, null);
|
|
166
|
-
} else if (ev.keyCode === 39) {
|
|
167
|
-
// 滑块向右移动
|
|
168
|
-
actorState.hMoving = true;
|
|
169
|
-
// 分三个区域设定移动范围
|
|
170
|
-
let target_x = 0;
|
|
171
|
-
if (onBoard === CONST_BOARD_LEFT) {
|
|
172
|
-
target_x = 396 - CONST_BOX_WIDTH;
|
|
173
|
-
} else if (onBoard === CONST_BOARD_MID) {
|
|
174
|
-
target_x = 699 - CONST_BOX_WIDTH;
|
|
175
|
-
} else if (onBoard === CONST_BOARD_RIGHT) {
|
|
176
|
-
target_x = 1199 - CONST_BOX_WIDTH;
|
|
177
|
-
}
|
|
178
|
-
horizontalControl.moveToX(target_x, 350, null);
|
|
179
|
-
}
|
|
180
|
-
return true;
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
const onKeyUp = () => {
|
|
184
|
-
keyPressed = false;
|
|
185
|
-
|
|
186
|
-
if (actorState.hMoving) {
|
|
187
|
-
// 停止用户通过左右键发起的水平移动
|
|
188
|
-
horizontalControl.pause(null);
|
|
189
|
-
actorState.hMoving = false;
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
onMounted(() => {
|
|
194
|
-
/* 关联碰撞体处理要在didMount中进行 */
|
|
195
|
-
|
|
196
|
-
/* 将碰撞发生后要停止动画的元素打包 */
|
|
197
|
-
viewsAutoFroze = createImpactAutoFroze(
|
|
198
|
-
[actorVertical.current, actorHorizontal.current],
|
|
199
|
-
null
|
|
200
|
-
); // 此句柄最好保留,未来可以通过此句柄统一进行views list更新
|
|
201
|
-
|
|
202
|
-
/* 构建左边碰撞区 */
|
|
203
|
-
sensorList.push(
|
|
204
|
-
createImpactTracer(
|
|
205
|
-
actor.value,
|
|
206
|
-
boxLeft.value,
|
|
207
|
-
createImpactCallback(() => {
|
|
208
|
-
onImpact(CONST_BOARD_LEFT);
|
|
209
|
-
}, null),
|
|
210
|
-
viewsAutoFroze
|
|
211
|
-
)
|
|
212
|
-
);
|
|
213
|
-
|
|
214
|
-
/* 构建中间碰撞区 */
|
|
215
|
-
sensorList.push(
|
|
216
|
-
createImpactTracer(
|
|
217
|
-
actor.value,
|
|
218
|
-
boxMid.value,
|
|
219
|
-
createImpactCallback(() => {
|
|
220
|
-
onImpact(CONST_BOARD_MID);
|
|
221
|
-
}, null),
|
|
222
|
-
viewsAutoFroze
|
|
223
|
-
)
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
/* 构建右边碰撞区 */
|
|
227
|
-
sensorList.push(
|
|
228
|
-
createImpactTracer(
|
|
229
|
-
actor.value,
|
|
230
|
-
boxRight.value,
|
|
231
|
-
createImpactCallback(() => {
|
|
232
|
-
onImpact(CONST_BOARD_RIGHT);
|
|
233
|
-
}, null),
|
|
234
|
-
viewsAutoFroze
|
|
235
|
-
)
|
|
236
|
-
);
|
|
237
|
-
|
|
238
|
-
reset();
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
onBeforeUnmount(() => {
|
|
242
|
-
/* 重要! 退出后应该释放所有碰撞监听者 */
|
|
243
|
-
for (const sensor of sensorList) {
|
|
244
|
-
sensor.Recycle();
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
</script>
|
|
248
|
-
|
|
249
|
-
<template>
|
|
250
|
-
<jsv-focus-block
|
|
251
|
-
autoFocus
|
|
252
|
-
:onAction="{
|
|
253
|
-
onKeyDown,
|
|
254
|
-
onKeyUp,
|
|
255
|
-
}"
|
|
256
|
-
:style="{ width: 1280, height: 720, backgroundColor: '#000000' }"
|
|
257
|
-
>
|
|
258
|
-
<div
|
|
259
|
-
v-if="isJsView"
|
|
260
|
-
:style="{
|
|
261
|
-
textAlign: 'center',
|
|
262
|
-
fontSize: '30px',
|
|
263
|
-
lineHeight: '50px',
|
|
264
|
-
color: '#ffffff',
|
|
265
|
-
left: 100,
|
|
266
|
-
top: 20,
|
|
267
|
-
width: 1280 - 200,
|
|
268
|
-
height: 50,
|
|
269
|
-
backgroundColor: 'rgba(27,38,151,0.8)',
|
|
270
|
-
}"
|
|
271
|
-
>
|
|
272
|
-
JsView环境下不会穿透模型
|
|
273
|
-
</div>
|
|
274
|
-
|
|
275
|
-
<div
|
|
276
|
-
key="bottomWall"
|
|
277
|
-
:style="{
|
|
278
|
-
top: 620,
|
|
279
|
-
left: 40,
|
|
280
|
-
width: 1200,
|
|
281
|
-
height: 5,
|
|
282
|
-
backgroundColor: '#F0FFF0',
|
|
283
|
-
}"
|
|
284
|
-
/>
|
|
285
|
-
|
|
286
|
-
<div
|
|
287
|
-
key="leftFloor"
|
|
288
|
-
:style="{
|
|
289
|
-
top: 520,
|
|
290
|
-
left: 40,
|
|
291
|
-
width: 397,
|
|
292
|
-
height: 5,
|
|
293
|
-
backgroundColor: '#F0F000',
|
|
294
|
-
}"
|
|
295
|
-
/>
|
|
296
|
-
|
|
297
|
-
<!-- 碰撞体的高度要比每帧移动距离大,因为碰撞判断是每帧内进行判断,并不连续,距离太小可能穿模 -->
|
|
298
|
-
|
|
299
|
-
<div
|
|
300
|
-
key="leftFloorImp"
|
|
301
|
-
ref="boxLeft"
|
|
302
|
-
:style="{
|
|
303
|
-
top: 520,
|
|
304
|
-
left: 40,
|
|
305
|
-
width: 397,
|
|
306
|
-
height: 15,
|
|
307
|
-
backgroundColor: 'rgba(255,255,255,0.2)',
|
|
308
|
-
}"
|
|
309
|
-
/>
|
|
310
|
-
|
|
311
|
-
<div
|
|
312
|
-
key="midFloor"
|
|
313
|
-
:style="{
|
|
314
|
-
top: 320,
|
|
315
|
-
left: 540,
|
|
316
|
-
width: 200,
|
|
317
|
-
height: 5,
|
|
318
|
-
backgroundColor: '#F0F000',
|
|
319
|
-
}"
|
|
320
|
-
/>
|
|
321
|
-
<div
|
|
322
|
-
key="midFloorImp"
|
|
323
|
-
ref="boxMid"
|
|
324
|
-
:style="{
|
|
325
|
-
top: 320,
|
|
326
|
-
left: 540,
|
|
327
|
-
width: 200,
|
|
328
|
-
height: 15,
|
|
329
|
-
backgroundColor: 'rgba(0,0,0,0)',
|
|
330
|
-
}"
|
|
331
|
-
/>
|
|
332
|
-
|
|
333
|
-
<div
|
|
334
|
-
key="rightFloor"
|
|
335
|
-
:style="{
|
|
336
|
-
top: 520,
|
|
337
|
-
left: 840,
|
|
338
|
-
width: 400,
|
|
339
|
-
height: 5,
|
|
340
|
-
backgroundColor: '#F0F000',
|
|
341
|
-
}"
|
|
342
|
-
/>
|
|
343
|
-
<div
|
|
344
|
-
key="rightFloorImp"
|
|
345
|
-
ref="boxRight"
|
|
346
|
-
:style="{
|
|
347
|
-
top: 520,
|
|
348
|
-
left: 820,
|
|
349
|
-
width: 400,
|
|
350
|
-
height: 15,
|
|
351
|
-
backgroundColor: 'rgba(0,0,0,0)',
|
|
352
|
-
}"
|
|
353
|
-
/>
|
|
354
|
-
|
|
355
|
-
<div
|
|
356
|
-
v-if="showPrecisionGuild"
|
|
357
|
-
key="PrecisionGuideText"
|
|
358
|
-
class="text"
|
|
359
|
-
:style="{ top: 528, left: 40, width: 405, height: 40 }"
|
|
360
|
-
>
|
|
361
|
-
JSV下,立刻起跳会精确到边缘
|
|
362
|
-
</div>
|
|
363
|
-
|
|
364
|
-
<div
|
|
365
|
-
key="GuideText1"
|
|
366
|
-
class="text"
|
|
367
|
-
:style="{ top: 625, left: 370, width: 540, height: 40 }"
|
|
368
|
-
>
|
|
369
|
-
左右键调整跳跃起点,按OK键进行跳跃
|
|
370
|
-
</div>
|
|
371
|
-
<div
|
|
372
|
-
key="DirectText"
|
|
373
|
-
class="text"
|
|
374
|
-
:style="{ top: 150, left: 425, width: 430, height: 40 }"
|
|
375
|
-
>
|
|
376
|
-
{{ `当前方向:${direction > 0 ? "->" : "<-"}` }}
|
|
377
|
-
</div>
|
|
378
|
-
|
|
379
|
-
<div key="actor" :style="{ top: 520 - CONST_BOX_HEIGHT - 2, left: 40 }">
|
|
380
|
-
<jsv-actor-move
|
|
381
|
-
key="horizontal"
|
|
382
|
-
:refDefine="actorHorizontal"
|
|
383
|
-
:control="horizontalControl"
|
|
384
|
-
>
|
|
385
|
-
<jsv-actor-move
|
|
386
|
-
key="vertical"
|
|
387
|
-
:refDefine="actorVertical"
|
|
388
|
-
:control="verticalControl"
|
|
389
|
-
>
|
|
390
|
-
<div
|
|
391
|
-
ref="actor"
|
|
392
|
-
:style="{
|
|
393
|
-
backgroundColor: actorColor,
|
|
394
|
-
width: CONST_BOX_WIDTH,
|
|
395
|
-
height: CONST_BOX_HEIGHT,
|
|
396
|
-
}"
|
|
397
|
-
></div>
|
|
398
|
-
</jsv-actor-move>
|
|
399
|
-
</jsv-actor-move>
|
|
400
|
-
</div>
|
|
401
|
-
|
|
402
|
-
<!-- 一个无限动画元素,来测试卡顿 -->
|
|
403
|
-
<div
|
|
404
|
-
:style="{
|
|
405
|
-
top: 100,
|
|
406
|
-
left: 50,
|
|
407
|
-
height: 150,
|
|
408
|
-
width: 150,
|
|
409
|
-
backgroundColor: '#334455',
|
|
410
|
-
animation: 'impact-stop-anim-rotate 1s infinite linear',
|
|
411
|
-
}"
|
|
412
|
-
/>
|
|
413
|
-
</jsv-focus-block>
|
|
414
|
-
</template>
|
|
415
|
-
|
|
416
|
-
<style scoped>
|
|
417
|
-
@keyframes impact-stop-anim-rotate {
|
|
418
|
-
from {
|
|
419
|
-
transform: rotate3d(0, 0, 1, 270deg);
|
|
420
|
-
}
|
|
421
|
-
to {
|
|
422
|
-
transform: rotate3d(0, 0, 1, 0deg);
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
.text {
|
|
427
|
-
font-size: 30px;
|
|
428
|
-
color: #73665c;
|
|
429
|
-
line-height: 40px;
|
|
430
|
-
overflow: hidden;
|
|
431
|
-
white-space: nowrap;
|
|
432
|
-
text-overflow: ellipsis;
|
|
433
|
-
text-align: center;
|
|
434
|
-
}
|
|
435
|
-
</style>
|
|
Binary file
|
|
Binary file
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Author: ChenChanghua
|
|
3
|
-
* @Date: 2022-08-30 10:54:42
|
|
4
|
-
* @LastEditors: ChenChanghua
|
|
5
|
-
* @LastEditTime: 2022-08-30 10:54:44
|
|
6
|
-
* @Description: file content
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Created by donglin.lu@qcast.cn on 4/30/2020.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
/*
|
|
13
|
-
* 【模块 export 内容】
|
|
14
|
-
* createImpactTracer: 函数,创建碰撞跟踪对象
|
|
15
|
-
* createImpactCallback: 函数,创建碰撞发生后的回调函数
|
|
16
|
-
* createImpactAutoFroze: 函数,注册碰撞发生后,控制动画立刻停止的管理对象
|
|
17
|
-
* updateImpactAutoFroze: 函数,更新 createImpactAutoFroze 创建的碰撞即停管理对象中管理的运动元素列表
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { Forge } from "../../dom/jsv-forge-define";
|
|
21
|
-
|
|
22
|
-
/*
|
|
23
|
-
* createImpactCallback 参数说明:
|
|
24
|
-
* on_contact (function[]) 接受碰撞事件的回调
|
|
25
|
-
* on_dis_contact (function[]) 接受物体分离事件的回调
|
|
26
|
-
* 返回值:
|
|
27
|
-
* Object 句柄,用于传输给 createImpactTracer
|
|
28
|
-
*/
|
|
29
|
-
function createImpactCallback(on_contact, on_dis_contact) {
|
|
30
|
-
return new Forge.sImpactSensorManager.Callback(on_contact, on_dis_contact);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/*
|
|
34
|
-
* createImpactTracer 参数说明:
|
|
35
|
-
* ele1 (Element) html element句柄,1号碰撞体
|
|
36
|
-
* ele2 (Element) html element句柄,2号碰撞体
|
|
37
|
-
* callback (Object) 由 createImpactCallback 创建的回调构造体句柄
|
|
38
|
-
* auto_froze (Object) 由 createImpactAutoFroze 创建的碰撞即停构造体句柄
|
|
39
|
-
* 返回值:
|
|
40
|
-
* Object 句柄,提供 Recycle() 函数用于停止碰撞检测,需要再componentWillUnmount进行调用(清理)
|
|
41
|
-
*/
|
|
42
|
-
function createImpactTracer(ele1, ele2, callback, auto_froze) {
|
|
43
|
-
return Forge.sImpactSensorManager.StartTrace(ele1.jsvMainView, ele2.jsvMainView, callback, auto_froze);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// 创建用于设置碰撞即停管理对象的参数
|
|
47
|
-
// 结果用于函数 createImpactAutoFroze 和 updateImpactAutoFroze
|
|
48
|
-
function _ConvertToViewsList(elements_array) {
|
|
49
|
-
const views_array = [];
|
|
50
|
-
if (elements_array) {
|
|
51
|
-
for (const ele of elements_array) {
|
|
52
|
-
views_array.push(ele.jsvMainView);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return views_array;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/*
|
|
59
|
-
* createImpactAutoFroze 参数说明:
|
|
60
|
-
* element_auto_froze_pre_impact (Array<Element>) 关联运动元素的列表,这些元素碰撞前一帧停止运动
|
|
61
|
-
* element_auto_froze_on_impact (Array<Element>) 关联运动元素的列表,这些元素碰撞当前帧停止运动
|
|
62
|
-
* 返回值:
|
|
63
|
-
* Object 句柄,用于传输给 createImpactTracer,也用于 updateImpactAutoFroze 调整关联元素
|
|
64
|
-
*
|
|
65
|
-
* 【注意点】
|
|
66
|
-
* 多个碰撞对可以共享同一个碰撞管理对象,并且建议共享同一个对象以提升效率
|
|
67
|
-
* 该管理对象中的view的列表可以通过 updateImpactAutoFrozeHandler进行更新,
|
|
68
|
-
* 更新后立刻在对所有的共享此管理对象的碰撞对中生效
|
|
69
|
-
*/
|
|
70
|
-
function createImpactAutoFroze(element_auto_froze_pre_impact, element_auto_froze_on_impact) {
|
|
71
|
-
if (!element_auto_froze_pre_impact && !element_auto_froze_on_impact) {
|
|
72
|
-
// Nothing to set
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const pre_impact_list = _ConvertToViewsList(element_auto_froze_pre_impact);
|
|
77
|
-
const on_impact_list = _ConvertToViewsList(element_auto_froze_on_impact);
|
|
78
|
-
|
|
79
|
-
return new Forge.sImpactSensorManager.AutoFroze(
|
|
80
|
-
(pre_impact_list.length > 0 ? pre_impact_list : null),
|
|
81
|
-
(on_impact_list.length > 0 ? on_impact_list : null));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/*
|
|
85
|
-
* updateImpactAutoFroze 参数说明:
|
|
86
|
-
* handler (Object) 由 createImpactAutoFroze 创建的句柄
|
|
87
|
-
* element_auto_froze_pre_impact (Array<Element>) 关联运动元素的列表,这些元素碰撞前一帧停止运动
|
|
88
|
-
* element_auto_froze_on_impact (Array<Element>) 关联运动元素的列表,这些元素碰撞当前帧停止运动
|
|
89
|
-
* 返回值:
|
|
90
|
-
* 无
|
|
91
|
-
*/
|
|
92
|
-
function updateImpactAutoFroze(handler, element_auto_froze_pre_impact, element_auto_froze_on_impact) {
|
|
93
|
-
if (handler instanceof Forge.sImpactSensorManager.AutoFroze) {
|
|
94
|
-
console.error("Error: handler type error");
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const pre_impact_list = _ConvertToViewsList(element_auto_froze_pre_impact);
|
|
99
|
-
const on_impact_list = _ConvertToViewsList(element_auto_froze_on_impact);
|
|
100
|
-
|
|
101
|
-
// 更新碰撞即停列表
|
|
102
|
-
handler.UpdatePreImpactList((pre_impact_list.length > 0 ? pre_impact_list : null));
|
|
103
|
-
|
|
104
|
-
// 更新接触接触即停列表
|
|
105
|
-
handler.UpdateOnImpactList((on_impact_list.length ? on_impact_list : null));
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export {
|
|
109
|
-
createImpactCallback,
|
|
110
|
-
createImpactTracer,
|
|
111
|
-
createImpactAutoFroze,
|
|
112
|
-
updateImpactAutoFroze,
|
|
113
|
-
};
|