Commit 734d9ccd authored by asdf's avatar asdf

表单

parent ddfebd10
...@@ -128,5 +128,8 @@ ...@@ -128,5 +128,8 @@
} }
} }
}, },
"defaultProject": "ng-template-generator" "defaultProject": "ng-template-generator",
"cli": {
"analytics": false
}
} }
\ No newline at end of file
This diff is collapsed.
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
"compressing": "^1.5.0", "compressing": "^1.5.0",
"ng-zorro-antd": "^8.5.2", "ng-zorro-antd": "^8.5.2",
"rxjs": "~6.5.4", "rxjs": "~6.5.4",
"sass": "1.28.0",
"node-sass": "^4.0.0", "node-sass": "^4.0.0",
"spark-md5": "^3.0.0", "spark-md5": "^3.0.0",
"tslib": "^1.10.0", "tslib": "^1.10.0",
......
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { NgModule, ErrorHandler } from '@angular/core'; import { NgModule, ErrorHandler } from '@angular/core';
import {MyErrorHandler} from './MyError'; import { MyErrorHandler } from './MyError';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { NgZorroAntdModule, NZ_I18N, zh_CN } from 'ng-zorro-antd'; import { NgZorroAntdModule, NZ_I18N, zh_CN } from 'ng-zorro-antd';
...@@ -10,20 +10,21 @@ import { HttpClientModule } from '@angular/common/http'; ...@@ -10,20 +10,21 @@ import { HttpClientModule } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { registerLocaleData } from '@angular/common'; import { registerLocaleData } from '@angular/common';
import zh from '@angular/common/locales/zh'; import zh from '@angular/common/locales/zh';
import {FormComponent} from './form/form.component'; import { FormComponent } from './form/form.component';
import {PlayComponent} from './play/play.component'; import { PlayComponent } from './play/play.component';
import {LessonTitleConfigComponent} from './common/lesson-title-config/lesson-title-config.component'; import { LessonTitleConfigComponent } from './common/lesson-title-config/lesson-title-config.component';
import {BackgroundImagePipe} from './pipes/background-image.pipe'; import { BackgroundImagePipe } from './pipes/background-image.pipe';
import {UploadImageWithPreviewComponent} from './common/upload-image-with-preview/upload-image-with-preview.component'; import { UploadImageWithPreviewComponent } from './common/upload-image-with-preview/upload-image-with-preview.component';
import {PlayerContentWrapperComponent} from './common/player-content-wrapper/player-content-wrapper.component'; import { PlayerContentWrapperComponent } from './common/player-content-wrapper/player-content-wrapper.component';
import {CustomHotZoneComponent} from './common/custom-hot-zone/custom-hot-zone.component'; import { CustomHotZoneComponent } from './common/custom-hot-zone/custom-hot-zone.component';
import {UploadVideoComponent} from './common/upload-video/upload-video.component'; import { UploadVideoComponent } from './common/upload-video/upload-video.component';
import {TimePipe} from './pipes/time.pipe'; import { TimePipe } from './pipes/time.pipe';
import {ResourcePipe} from './pipes/resource.pipe'; import { ResourcePipe } from './pipes/resource.pipe';
import {AudioRecorderComponent} from './common/audio-recorder/audio-recorder.component'; import { AudioRecorderComponent } from './common/audio-recorder/audio-recorder.component';
import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome'; import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome';
import { fas } from '@fortawesome/free-solid-svg-icons'; import { fas } from '@fortawesome/free-solid-svg-icons';
import { far } from '@fortawesome/free-regular-svg-icons'; import { far } from '@fortawesome/free-regular-svg-icons';
import { UploadDragonBoneComponent } from './common/upload-dragon-bone/upload-dragon-bone.component';
registerLocaleData(zh); registerLocaleData(zh);
...@@ -40,7 +41,7 @@ registerLocaleData(zh); ...@@ -40,7 +41,7 @@ registerLocaleData(zh);
TimePipe, TimePipe,
UploadVideoComponent, UploadVideoComponent,
CustomHotZoneComponent, CustomHotZoneComponent,
UploadDragonBoneComponent,
PlayerContentWrapperComponent PlayerContentWrapperComponent
], ],
...@@ -53,7 +54,7 @@ registerLocaleData(zh); ...@@ -53,7 +54,7 @@ registerLocaleData(zh);
FontAwesomeModule FontAwesomeModule
], ],
providers: [ providers: [
{provide: ErrorHandler, useClass: MyErrorHandler}, { provide: ErrorHandler, useClass: MyErrorHandler },
{ provide: NZ_I18N, useValue: zh_CN } { provide: NZ_I18N, useValue: zh_CN }
], ],
bootstrap: [AppComponent] bootstrap: [AppComponent]
......
This diff is collapsed.
...@@ -32,15 +32,63 @@ ...@@ -32,15 +32,63 @@
<nz-divider style="margin-top: 10px;"></nz-divider> <nz-divider style="margin-top: 10px;"></nz-divider>
<div style="margin-top: -20px; margin-bottom: 5px; width: 100%;">
<div *ngIf="customTypeGroupArr">
<nz-radio-group [ngModel]="it.gIdx" (ngModelChange)="customRadioChange($event, it)" style="display: flex; align-items: center; justify-content: center; flex-wrap: wrap;">
<div *ngFor="let group of customTypeGroupArr; let gIdx = index" style="display: flex; ">
<label nz-radio nzValue="{{gIdx}}">{{group.name}}</label>
</div>
</nz-radio-group>
</div>
<!-- <div *ngIf="!customTypeGroupArr">
<nz-radio-group [ngModel]="it.itemType" (ngModelChange)="radioChange($event, it)" style="display: flex; align-items: center; justify-content: center">
<div style="margin-top: -20px; margin-bottom: 5px">
<nz-radio-group [ngModel]="it.itemType" (ngModelChange)="radioChange($event, it)">
<label *ngIf="isHasRect" nz-radio nzValue="rect">矩形</label> <label *ngIf="isHasRect" nz-radio nzValue="rect">矩形</label>
<label *ngIf="isHasPic" nz-radio nzValue="pic">图片</label> <label *ngIf="isHasPic" nz-radio nzValue="pic">图片</label>
<label *ngIf="isHasText" nz-radio nzValue="text">文本</label> <label *ngIf="isHasText" nz-radio nzValue="text">文本</label>
</nz-radio-group> </nz-radio-group>
</div> -->
</div>
<div *ngIf="customTypeGroupArr && customTypeGroupArr[it.gIdx]">
<div *ngIf="customTypeGroupArr[it.gIdx].pic">
<app-upload-image-with-preview
[picUrl]="it?.pic_url"
(imageUploaded)="onItemImgUploadSuccess($event, it)">
</app-upload-image-with-preview>
</div>
<div *ngIf="customTypeGroupArr[it.gIdx].text" style="margin-top: 5px">
<input type="text" nz-input [(ngModel)]="it.text" (blur)="saveText(it)">
</div>
<div *ngIf="customTypeGroupArr[it.gIdx].anima" align="center" style="margin-top: 5px">
<button nz-button (click)="setAnimaBtnClick(i)" >
<i nz-icon nzType="tool" nzTheme="outline"></i>
配置龙骨动画
</button>
</div>
<div *ngIf="customTypeGroupArr[it.gIdx].audio" style="display: flex;align-items: center; margin-top: 5px">
<app-audio-recorder
style="margin: auto"
[audioUrl]="it.audio_url"
(audioUploaded)="onItemAudioUploadSuccess($event, it)"
></app-audio-recorder>
</div> </div>
</div>
<!-- <div *ngIf="!customTypeGroupArr">
<div *ngIf="it.itemType == 'pic'"> <div *ngIf="it.itemType == 'pic'">
<app-upload-image-with-preview <app-upload-image-with-preview
[picUrl]="it?.pic_url" [picUrl]="it?.pic_url"
...@@ -52,13 +100,26 @@ ...@@ -52,13 +100,26 @@
<input type="text" nz-input [(ngModel)]="it.text" (blur)="saveText(it)"> <input type="text" nz-input [(ngModel)]="it.text" (blur)="saveText(it)">
</div> </div>
<div style="width: 100%; margin-top: 5px;"> <div *ngIf="isHasAudio"
style="width: 100%; margin-top: 5px; display: flex; align-items: center; justify-items: center;">
<app-audio-recorder <app-audio-recorder
style="margin: auto"
[audioUrl]="it.audio_url" [audioUrl]="it.audio_url"
(audioUploaded)="onItemAudioUploadSuccess($event, it)" (audioUploaded)="onItemAudioUploadSuccess($event, it)"
></app-audio-recorder> ></app-audio-recorder>
</div> </div>
<div *ngIf="it.itemType == 'rect' && isHasAnima" align="center" style="margin-bottom: 5px">
<button nz-button (click)="setAnimaBtnClick(i)" >
<i nz-icon nzType="tool" nzTheme="outline"></i>
配置龙骨动画
</button>
</div>
</div> -->
</div> </div>
</div> </div>
...@@ -83,12 +144,29 @@ ...@@ -83,12 +144,29 @@
<div class="save-box"> <div class="save-box">
<button class="save-btn" nz-button nzType="primary" [nzSize]="'large'" nzShape="round" <button style="margin-left: 200px" class="save-btn" nz-button nzType="primary" [nzSize]="'large'" nzShape="round"
(click)="saveClick()" > (click)="saveClick()" >
<i nz-icon nzType="save"></i> <i nz-icon nzType="save"></i>
Save Save
</button> </button>
<div *ngIf="isCopyData" style="height: 40px; display: flex; justify-items: center;" >
<label style="margin-left: 40px" nz-checkbox [(ngModel)]="bgItem.isShowDebugLine">显示辅助框</label>
<button style="margin-left: 20px; margin-top: -5px" nz-button (click)="copyHotZoneData()"> 复制基础数据 </button>
<div style="margin-left: 10px; margin-top: -5px" >
<span>粘贴数据: </span>
<input style="width: 100px;" type="text" nz-input [(ngModel)]="pasteData" >
<button style="margin-left: 5px;" nz-button [disabled]="pasteData==''" nzType="primary" (click)="importData()">导入</button>
</div>
</div>
</div> </div>
...@@ -98,3 +176,52 @@ ...@@ -98,3 +176,52 @@
<label style="opacity: 0; position: absolute; top: 0px; font-family: 'BRLNSR_1'">1</label> <label style="opacity: 0; position: absolute; top: 0px; font-family: 'BRLNSR_1'">1</label>
<!--龙骨面板-->
<nz-modal [(nzVisible)]="animaPanelVisible" nzTitle="配置资源文件" (nzAfterClose)="closeAfterPanel()" (nzOnCancel)="animaPanelCancel()" (nzOnOk)="animaPanelOk()" nzOkText="保存">
<div class="anima-upload-btn">
<span style="margin-right: 10px">上传 ske_json 文件: </span>
<nz-upload [nzShowUploadList]="false"
nzAccept="application/json"
[nzAction]="uploadUrl"
[nzData]="uploadData"
(nzChange)="skeJsonHandleChange($event)">
<button nz-button><i nz-icon nzType="upload"></i><span>Upload</span></button>
</nz-upload>
<i *ngIf="isSkeJsonLoading" style="margin-left: 10px;" nz-icon [nzType]="'loading'"></i>
<span *ngIf="skeJsonData['name']" style="margin-left: 10px"><u> {{skeJsonData['name']}} </u></span>
</div>
<div class="anima-upload-btn">
<span style="margin-right: 10px">上传 tex_json 文件: </span>
<nz-upload [nzShowUploadList]="false"
nzAccept="application/json"
[nzAction]="uploadUrl"
[nzData]="uploadData"
(nzChange)="texJsonHandleChange($event)">
<button nz-button><i nz-icon nzType="upload"></i><span>Upload</span></button>
</nz-upload>
<i *ngIf="isTexJsonLoading" style="margin-left: 10px;" nz-icon [nzType]="'loading'"></i>
<span *ngIf="texJsonData['name']" style="margin-left: 10px"><u> {{texJsonData['name']}} </u></span>
</div>
<div class="anima-upload-btn">
<span style="margin-right: 10px">上传 tex_png 文件: </span>
<nz-upload [nzShowUploadList]="false"
nzAccept = "image/*"
[nzAction]="uploadUrl"
[nzData]="uploadData"
(nzChange)="texPngHandleChange($event)">
<button nz-button><i nz-icon nzType="upload"></i><span>Upload</span></button>
</nz-upload>
<i *ngIf="isTexPngLoading" style="margin-left: 10px;" nz-icon [nzType]="'loading'"></i>
<span *ngIf="texPngData['name']" style="margin-left: 10px"><u> {{texPngData['name']}} </u></span>
</div>
<div class="anima-upload-btn" *ngIf="customTypeGroupArr && customTypeGroupArr[curDragonBoneGIdx] && customTypeGroupArr[curDragonBoneGIdx].animaNames">
提示:需包含以下动画: {{customTypeGroupArr[curDragonBoneGIdx].animaNames.toString()}}
</div>
</nz-modal>
...@@ -81,19 +81,21 @@ ...@@ -81,19 +81,21 @@
} }
} }
h5 { .anima-upload-btn {
margin-top: 1rem; padding: 10px;
} }
h5 {
margin-top: 1rem;
@font-face
{
font-family: 'BRLNSR_1';
src: url("/assets/font/BRLNSR_1.TTF") ;
} }
//
//@font-face
//{
// font-family: 'BRLNSR_1';
// src: url("/assets/font/BRLNSR_1.TTF") ;
//}
...@@ -107,104 +109,3 @@ h5 { ...@@ -107,104 +109,3 @@ h5 {
//@import '../../../style/common_mixin';
//
//.p-image-uploader {
// position: relative;
// display: block;
// width: 100%;
// height: 0;
// padding-bottom: 56.25%;
// .p-box {
// position: absolute;
// left: 0;
// top: 0;
// right: 0;
// bottom: 0;
// border: 2px dashed #ddd;
// border-radius: 0.5rem;
// background-color: #fafafa;
// text-align: center;
// color: #aaa;
// .p-upload-icon {
// text-align: center;
// margin: auto;
// .anticon-upload {
// color: #888;
// font-size: 5rem;
// }
// .p-progress-bar {
// position: relative;
// width: 20rem;
// height: 1.5rem;
// border: 1px solid #ccc;
// border-radius: 1rem;
// .p-progress-bg {
// background-color: #1890ff;
// border-radius: 1rem;
// height: 100%;
// }
// .p-progress-value {
// position: absolute;
// top: 0;
// left: 0;
// width: 100%;
// height: 100%;
// text-shadow: 0 0 4px #000;
// color: white;
// text-align: center;
// font-size: 0.9rem;
// line-height: 1.5rem;
// }
// }
// }
// .p-preview {
// width: 100%;
// height: 100%;
// //background-image: url("https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png");
// @include k-img-bg();
// }
// }
//}
//
//.p-btn-delete {
// position: absolute;
// right: -0.5rem;
// top: -0.5rem;
// width: 2rem;
// height: 2rem;
// border: 0.2rem solid white;
// border-radius: 50%;
// font-size: 1.2rem;
// background-color: #fb781a;
// color: white;
// text-align: center;
//}
//
//.p-upload-progress-bg {
// position: absolute;
// width: 100%;
// height: 100%;
// display: flex;
// align-items: center;
// justify-content: center;
// & .i-text {
// position: absolute;
// text-align: center;
// color: white;
// text-shadow: 0 0 2px rgba(0, 0, 0, .85);
// }
// & .i-bg {
// position: absolute;
// left: 0;
// top: 0;
// height: 100%;
// background-color: #27b43f;
// border-radius: 0.5rem;
// }
//}
//
//
//:host ::ng-deep .ant-upload {
// display: block;
//}
<div class="position-relative">
<button nz-button (click)="setAnimaBtnClick()" style=" border-radius: 0.5rem; border: 1px solid #ddd;">
<i nz-icon nzType="tool" nzTheme="outline"></i>
{{btnName}}
</button>
<!--配置龙骨面板-->
<nz-modal [(nzVisible)]="animaPanelVisible" (nzAfterClose)="closePanel()" nzTitle="配置资源文件"
(nzOnCancel)="animaPanelCancel()" (nzOnOk)="animaPanelOk()" nzOkText="保存">
<div class="anima-upload-btn">
<span style="margin-right: 10px">上传 ske_json 文件: </span>
<nz-upload [nzShowUploadList]="false" nzAccept="application/json" [nzAction]="uploadUrl" [nzData]="uploadData"
(nzChange)="skeJsonHandleChange($event)">
<button nz-button><i nz-icon nzType="upload"></i><span>Upload</span></button>
</nz-upload>
<i *ngIf="isSkeJsonLoading" style="margin-left: 10px;" nz-icon [nzType]="'loading'"></i>
<span *ngIf="skeJsonData && skeJsonData['name']" style="margin-left: 10px"><u> {{skeJsonData['name']}} </u></span>
</div>
<div class="anima-upload-btn">
<span style="margin-right: 10px">上传 tex_json 文件: </span>
<nz-upload [nzShowUploadList]="false" nzAccept="application/json" [nzAction]="uploadUrl" [nzData]="uploadData"
(nzChange)="texJsonHandleChange($event)">
<button nz-button><i nz-icon nzType="upload"></i><span>Upload</span></button>
</nz-upload>
<i *ngIf="isTexJsonLoading" style="margin-left: 10px;" nz-icon [nzType]="'loading'"></i>
<span *ngIf="texJsonData && texJsonData['name']" style="margin-left: 10px"><u> {{texJsonData['name']}} </u></span>
</div>
<div class="anima-upload-btn">
<span style="margin-right: 10px">上传 tex_png 文件: </span>
<nz-upload [nzShowUploadList]="false" nzAccept="image/*" [nzAction]="uploadUrl" [nzData]="uploadData"
(nzChange)="texPngHandleChange($event)">
<button nz-button><i nz-icon nzType="upload"></i><span>Upload</span></button>
</nz-upload>
<i *ngIf="isTexPngLoading" style="margin-left: 10px;" nz-icon [nzType]="'loading'"></i>
<span *ngIf="texPngData && texPngData['name']" style="margin-left: 10px"><u> {{texPngData['name']}} </u></span>
</div>
<div class="anima-upload-btn" *ngIf="animaNames && animaNames.length > 0">
提示:需包含动画: {{animaNames.toString()}}.
</div>
</nz-modal>
</div>
\ No newline at end of file
@import '../../style/common_mixin.css';
.p-image-uploader {
position: relative;
display: block;
width: 100%;
height: 0;
padding-bottom: 56.25%;
.p-box {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
border: 2px dashed #ddd;
border-radius: 0.5rem;
background-color: #fafafa;
text-align: center;
color: #aaa;
.p-upload-icon {
text-align: center;
margin: auto;
.anticon-upload {
color: #888;
font-size: 5rem;
}
.p-progress-bar {
position: relative;
width: 20rem;
height: 1.5rem;
border: 1px solid #ccc;
border-radius: 1rem;
.p-progress-bg {
background-color: #1890ff;
border-radius: 1rem;
height: 100%;
}
.p-progress-value {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-shadow: 0 0 4px #000;
color: white;
text-align: center;
font-size: 0.9rem;
line-height: 1.5rem;
}
}
}
.p-preview {
width: 100%;
height: 100%;
background-size: contain;
background-repeat: no-repeat;
background-position: 50% 50%;
//background-image: url("https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png");
}
}
.d-flex{
display: flex;
}
}
.p-btn-delete {
position: absolute;
right: -0.5rem;
top: -0.5rem;
width: 2rem;
height: 2rem;
border: 0.2rem solid white;
border-radius: 50%;
font-size: 1.2rem;
background-color: #fb781a;
color: white;
text-align: center;
}
.p-upload-progress-bg {
position: absolute;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
& .i-text {
position: absolute;
text-align: center;
color: white;
text-shadow: 0 0 2px rgba(0, 0, 0, .85);
}
& .i-bg {
position: absolute;
left: 0;
top: 0;
height: 100%;
background-color: #27b43f;
border-radius: 0.5rem;
}
}
.anima-upload-btn {
padding: 10px;
}
:host ::ng-deep .ant-upload {
display: block;
}
import {ApplicationRef, Component, EventEmitter, Input, OnChanges, OnDestroy, Output} from '@angular/core';
import { NzMessageService, UploadXHRArgs, UploadFile } from 'ng-zorro-antd';
@Component({
selector: 'app-upload-dragon-bone',
templateUrl: './upload-dragon-bone.component.html',
styleUrls: ['./upload-dragon-bone.component.scss']
})
export class UploadDragonBoneComponent implements OnDestroy, OnChanges {
uploading = false;
progress = 0;
@Input()
btnName = '配置龙骨动画';
@Input()
animaNames = [];
@Input()
skeJsonData = {};
@Input()
texJsonData = {};
@Input()
texPngData = {};
@Output()
save = new EventEmitter();
@Output()
refreshEmitter = new EventEmitter();
// @Input()
// picUrl;
// @Input()
// canDelete = false;
// @Output()
// imageUploaded = new EventEmitter();
// @Output()
// imageUploadFailure = new EventEmitter();
// @Output()
// delete = new EventEmitter();
// @Input()
// picItem = null;
// @Input()
// iconSize = 2;
// @Input()
// TIP = 'Click here to upload image';
// @Input()
// disableUpload = false;
uploadUrl;
uploadData;
animaPanelVisible = false;
isSkeJsonLoading = false;
isTexJsonLoading = false;
isTexPngLoading = false;
constructor(private appRef: ApplicationRef, private nzMessageService: NzMessageService) {
this.uploadUrl = (<any> window).courseware.uploadUrl();
this.uploadData = (<any> window).courseware.uploadData();
window['air'].getUploadCallback = (url, data) => {
this.uploadUrl = url;
this.uploadData = data;
};
}
ngOnChanges() {
}
setAnimaBtnClick() {
this.animaPanelVisible = true;
this.refresh();
}
animaPanelCancel() {
this.animaPanelVisible = false;
this.refresh();
}
animaPanelOk() {
this.sendItemDragonBoneData();
this.animaPanelVisible = false;
this.refresh();
}
sendItemDragonBoneData() {
const data = {};
data['skeJsonData'] = this.skeJsonData;
data['texJsonData'] = this.texJsonData;
data['texPngData'] = this.texPngData;
this.save.emit(data);
}
skeJsonHandleChange(e) {
console.log('e: ', e);
switch (e.type) {
case 'start':
this.isSkeJsonLoading = true;
break;
case 'success':
console.log('e.file.response.url',e.file.response.url);
this.skeJsonData = {
'url':e.file.response.url,
'name': e.file.name
};
console.log('json',this.skeJsonData);
// this.skeJsonData['name'] = e.file.name;
this.nzMessageService.success('上传成功');
this.isSkeJsonLoading = false;
break;
case 'progress':
break;
}
}
texJsonHandleChange(e) {
console.log('e: ', e);
console.log('this',this);
switch (e.type) {
case 'start':
this.isTexJsonLoading = true;
break;
case 'success':
this.texJsonData = {
'url':e.file.response.url,
'name': e.file.name
};
// this.texJsonData['url'] = e.file.response.url;
// this.texJsonData['name'] = e.file.name;
this.nzMessageService.success('上传成功');
this.isTexJsonLoading = false;
break;
case 'progress':
break;
}
}
texPngHandleChange(e) {
console.log('e: ', e);
switch (e.type) {
case 'start':
this.isTexPngLoading = true;
break;
case 'success':
this.texPngData = {
'url':e.file.response.url,
'name': e.file.name
};
// this.texPngData['url'] = e.file.response.url;
// this.texPngData['name'] = e.file.name;
this.nzMessageService.success('上传成功');
this.isTexPngLoading = false;
break;
case 'progress':
break;
}
}
/**
* 刷新 渲染页面
*/
refresh() {
// this.refreshEmitter.emit();
setTimeout(() => {
this.appRef.tick();
}, 1);
}
closePanel() {
console.log(' in closePanel ');
this.refresh();
}
ngOnDestroy() {
}
}
...@@ -6,30 +6,3 @@ ...@@ -6,30 +6,3 @@
height: 100%; height: 100%;
} }
.radioPaire {
float: left;
margin: 3px;
border-style: dashed;
border-color: #000;
border-width: 1px;
}
.border {
border-radius: 20px;
border-style: dashed;
padding: 20px;
margin: 20px;
/*width: 500px; */
/*//border-radius: 20px;*/
/*//border-width: 2px;*/
/*//border-color: #000000;*/
}
.border-lite {
border: 2px dashed #ddd;
border-radius: 0.5rem;
padding: 10px;
margin: 10px;
}
<div class="model-content"> <div class="model-content">
<div *ngFor="let question of item.questionList; let i = index">
<div style="border-style: dotted; border-width: 1px;">
<div style="margin-left: 5%; margin-bottom: 50px; padding-top: 20px; ">
<span style="height: 30px; font-size: 18px;">第{{i + 1}}页标题音频:</span>
<app-audio-recorder [audioUrl]="question.questionAudio"
(audioUploaded)="onQuestionAudioUploadSuccess($event, i)">
</app-audio-recorder>
<br>
<span style="height: 30px; font-size: 18px;">第{{i + 1}}页标题文本:</span>
<br>
<input style="width: 150px; " type="text" maxlength="" nz-input [(ngModel)]="question.questionTxt"
(blur)="save()">
<br>
<br>
<span style="height: 30px; font-size: 18px;">问题{{i + 1}}选项:</span>
<div *ngFor="let option of question.optionList; let j = index">
<div style="margin-top: 20px; float: left; border-width: 1px; border-style: dotted;
padding: 20px; margin-right: 20px; width: 230px;">
<span style="height: 30px; font-size: 18px;">题干音频:</span>
<app-audio-recorder [audioUrl]="option.optionAudio" (audioUploaded)="onOptionUploadSuccess($event, i, j)">
</app-audio-recorder>
<br>
<span style="height: 30px; font-size: 18px;">题干文本:</span>
<input style="width: 150px; " type="text" maxlength="" nz-input [(ngModel)]="option.text"
(blur)="save()">
<br>
<span style="height: 30px; font-size: 18px;">题干骨骼动画:</span>
<app-upload-dragon-bone [btnName]="[['配置骨骼动画']]" [animaNames]="[[['normal']]]"
[skeJsonData]=option.optionDragonBone.skeJsonData [texJsonData]=option.optionDragonBone.texJsonData
[texPngData]=option.optionDragonBone.texPngData (save)="saveAnima($event, option.optionDragonBone)"
(refreshEmitter)="refresh()">
</app-upload-dragon-bone>
<br>
<span style="height: 30px; font-size: 18px;">选项骨骼动画:</span>
<app-upload-dragon-bone [btnName]="[['配置骨骼动画']]" [animaNames]="[[['normal']]]"
[skeJsonData]=option.optionDragonBone.skeJsonData2 [texJsonData]=option.optionDragonBone.texJsonData2
[texPngData]=option.optionDragonBone.texPngData2 (save)="saveAnima2($event, option.optionDragonBone)"
(refreshEmitter)="refresh()">
</app-upload-dragon-bone>
<br>
<div style="padding: 10px;"> <div *ngIf="(question.optionList.length >= 4)">
<button style="margin-top: 20px; width: 100%; height: 32px; color: red;" nz-button nzType="dashed"
<div style="width: 300px;" align='center'> class="add-btn" (click)="removeOption(i, j)">
<span>图1: </span> 删除选项
<app-upload-image-with-preview </button>
[picUrl]="item.pic_url"
(imageUploaded)="onImageUploadSuccess($event, 'pic_url')">
</app-upload-image-with-preview>
</div> </div>
<div style="width: 300px; margin-top: 5px;" align='center'>
<span>图2: </span>
<app-upload-image-with-preview
[picUrl]="item.pic_url_2"
(imageUploaded)="onImageUploadSuccess($event, 'pic_url_2')">
</app-upload-image-with-preview>
</div> </div>
<div style="width: 300px; margin-top: 15px;">
<span>文本: </span>
<input type="text" nz-input [(ngModel)]="item.text" (blur)="save()">
</div> </div>
<div *ngIf="(question.optionList.length < 4)">
<div style="margin-top: 5px"> <button style="margin-top: 20px; float: left; border-width: 1px;
<span>音频: </span> border-style: dotted; padding: 20px; margin-right: 20px;
<app-audio-recorder width: 230px; height: 343px;" nz-button nzType="dashed" class="add-btn" (click)="addOption(i)">
[audioUrl]="item.audio_url" 增加选项
(audioUploaded)="onAudioUploadSuccess($event, 'audio_url')" </button>
></app-audio-recorder>
</div> </div>
</div> </div>
<button style="margin-left: 5%; margin-top: 50px;margin-bottom: 8px; width: 90%; height: 32px; color: red;" nz-button nzType="dashed"
class="add-btn" (click)="removeQuestion(i)">
删除问题{{i+1}}
</button>
</div>
</div>
<button style="margin-left: 5%; margin-top: 8px; margin-bottom: 100px; height: 50px; width: 90%;" nz-button
nzType="dashed" class="add-btn" (click)="addQuestion()">
添加问题
</button>
</div> </div>
\ No newline at end of file
@import "../style/common_mixin";
.model-content {
margin: 10px;
.card-config {
width: 100%;
height: 100%;
display: flex;
flex-direction: row;
flex-wrap: wrap;
.card-item{
width: 500px;
margin-bottom: 40px;
.border {
border-radius: 20px;
border-style: dashed;
padding:20px;
width: 100%;
}
.card-item-content{
.title {
font-size: 24px;
width: 100%;
text-align: center;
}
.section{
border-top: 1px dashed ;
padding: 10px 0;
.section-title{
font-size: 24px;
width: 100%;
}
.section-content{
display: flex;
flex-direction: column;
margin: 5px 0 10px 0;
}
}
.pic-sound-box {
width: 50%;
display: flex;
flex-direction: column;
}
.add-btn-box {
display: flex;
align-items: center;
justify-content: center;
height: 20vw;
padding: 10px;
padding-top: 5vw;
}
}
}
}
}
.clearfix:before,.clearfix:after {
content: "";
display: block;
clear: both;
}
\ No newline at end of file
...@@ -10,7 +10,7 @@ import { JsonPipe } from '@angular/common'; ...@@ -10,7 +10,7 @@ import { JsonPipe } from '@angular/common';
export class FormComponent implements OnInit, OnChanges, OnDestroy { export class FormComponent implements OnInit, OnChanges, OnDestroy {
// 储存数据用 // 储存数据用
saveKey = "test_001"; saveKey = "DataKey_Cocos_FT11";
// 储存对象 // 储存对象
item; item;
...@@ -18,24 +18,80 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { ...@@ -18,24 +18,80 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy {
} }
createShell() { addQuestion() {
this.item.wordList.push({ this.item.questionList.push({
word: '', "questionAudio": "",
audio: '', "questionTxt": "",
backWord: '', "optionList": [{
backWordAudio: '', "text":"",
"optionDragonBone": {
"skeJsonData": { "url": "" },
"texJsonData": { "url": "" },
"texPngData": { "url": "" },
"skeJsonData2": { "url": "" },
"texJsonData2": { "url": "" },
"texPngData2": { "url": "" }
},
"optionAudio": ""
}, {
"text":"",
"optionDragonBone": {
"skeJsonData": { "url": "" },
"texJsonData": { "url": "" },
"texPngData": { "url": "" },
"skeJsonData2": { "url": "" },
"texJsonData2": { "url": "" },
"texPngData2": { "url": "" }
},
"optionAudio": ""
}, {
"text":"",
"optionDragonBone": {
"skeJsonData": { "url": "" },
"texJsonData": { "url": "" },
"texPngData": { "url": "" },
"skeJsonData2": { "url": "" },
"texJsonData2": { "url": "" },
"texPngData2": { "url": "" }
},
"optionAudio": ""
}]
}); });
this.save(); this.save();
} }
removeShell(idx) { removeQuestion(idx) {
this.item.wordList.splice(idx, 1); this.item.questionList.splice(idx, 1);
this.save(); this.save();
} }
ngOnInit() { addOption(questionIdx) {
this.item.questionList[questionIdx].optionList.push({
"text":"",
"optionDragonBone": {
"skeJsonData": { "url": "" },
"texJsonData": { "url": "" },
"texPngData": { "url": "" },
"skeJsonData2": { "url": "" },
"texJsonData2": { "url": "" },
"texPngData2": { "url": "" }
},
"optionAudio": ""
});
this.save();
}
this.item = {}; removeOption(questionIdx, optionIdx) {
this.item.questionList[questionIdx].optionList.splice(optionIdx, 1);
this.save();
}
ngOnInit() {
this.item = {
tittleAudio: "",
tittleTxt: "",
questionList: []
};
// 获取存储的数据 // 获取存储的数据
(<any>window).courseware.getData((data) => { (<any>window).courseware.getData((data) => {
...@@ -62,33 +118,34 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { ...@@ -62,33 +118,34 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy {
} }
onOptionUploadSuccess(e, questionIdx, optionIdx) {
/** this.item.questionList[questionIdx].optionList[optionIdx].optionAudio = e.url;
* 储存图片数据
* @param e
*/
onImageUploadSuccess(e, key) {
this.item[key] = e.url;
this.save(); this.save();
} }
/** onQuestionAudioUploadSuccess(e, questionIdx) {
* 储存音频数据 this.item.questionList[questionIdx].questionAudio = e.url;
* @param e
*/
onAudioUploadSuccess(e, key) {
this.item[key] = e.url;
this.save(); this.save();
// questionTxt
} }
onWordAudioUploadSuccess(e, idx) { radioClick(questionIdx, optionIdx) {
this.item.wordList[idx].audio = e.url; this.item.questionList[questionIdx].rightOptionIdx = optionIdx;
this.changeDetectorRef.markForCheck();
this.changeDetectorRef.detectChanges();
this.save(); this.save();
} }
onBackWordAudioUploadSuccess(e, idx) { saveAnima(event, group) {
this.item.wordList[idx].backWordAudio = e.url; group.skeJsonData = event.skeJsonData;
group.texJsonData = event.texJsonData;
group.texPngData = event.texPngData;
this.save();
}
saveAnima2(event, group) {
group.skeJsonData = event.skeJsonData2;
group.texJsonData = event.texJsonData2;
group.texPngData = event.texPngData2;
this.save(); this.save();
} }
......
{
"version": "1.1",
"key": "DataKey_Cocos_Test",
"dataArray": []
}
\ No newline at end of file
{
"version": "1.1",
"key": "DataKey_LST01",
"question": {
"type": "Image",
"text": "",
"image_url": "demo_main",
"shortAudio_url": "",
"longAudio_url": ""
},
"answerType": "Image",
"dataArray": [{
"text": "",
"image_url": "demo_1"
}, {
"text": "",
"image_url": "demo_2"
}, {
"text": "",
"image_url": "demo_3"
}, {
"text": "",
"image_url": "demo_4"
}, {
"text": "",
"image_url": "demo_5"
}, {
"text": "",
"image_url": "demo_6"
}]
}
\ No newline at end of file
{ {
"ver": "1.1.2", "ver": "1.1.2",
"uuid": "c35bb2f6-f24a-4850-ae44-643f2fdc7541", "uuid": "ea5aaedf-cabc-46c0-aba9-e7888b7ea2b2",
"isBundle": false, "isBundle": false,
"bundleName": "", "bundleName": "",
"priority": 1, "priority": 1,
......
{
"ver": "1.1.2",
"uuid": "055f3c8d-ca18-4e0f-b0cb-68b6077415cf",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}
\ No newline at end of file
{
"__type__": "cc.AnimationClip",
"_name": "animLeft",
"_objFlags": 0,
"_native": "",
"_duration": 0.08333333333333333,
"sample": 60,
"speed": 0.6,
"wrapMode": 1,
"curveData": {
"paths": {},
"comps": {},
"props": {
"eulerAngles": [
{
"frame": 0,
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"frame": 0.08333333333333333,
"value": {
"__type__": "cc.Vec3",
"x": -60,
"y": 0,
"z": 0
}
}
]
}
},
"events": []
}
\ No newline at end of file
{
"ver": "2.1.0",
"uuid": "e2049ddd-b9c3-4d05-b425-cc8db5e3982f",
"subMetas": {}
}
\ No newline at end of file
{
"__type__": "cc.AnimationClip",
"_name": "animLeft2",
"_objFlags": 0,
"_native": "",
"_duration": 0.08333333333333333,
"sample": 60,
"speed": 0.5,
"wrapMode": 36,
"curveData": {
"paths": {},
"comps": {},
"props": {
"eulerAngles": [
{
"frame": 0,
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"frame": 0.08333333333333333,
"value": {
"__type__": "cc.Vec3",
"x": -60,
"y": 0,
"z": 0
}
}
]
}
},
"events": []
}
\ No newline at end of file
{
"ver": "2.1.0",
"uuid": "a64e6c3a-3951-4032-b174-2d8c3f48ed59",
"subMetas": {}
}
\ No newline at end of file
{
"__type__": "cc.AnimationClip",
"_name": "animRight",
"_objFlags": 0,
"_native": "",
"_duration": 0.08333333333333333,
"sample": 60,
"speed": 0.6,
"wrapMode": 1,
"curveData": {
"paths": {},
"comps": {},
"props": {
"eulerAngles": [
{
"frame": 0,
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"frame": 0.08333333333333333,
"value": {
"__type__": "cc.Vec3",
"x": -60,
"y": 0,
"z": 0
}
}
]
}
},
"events": []
}
\ No newline at end of file
{
"ver": "2.1.0",
"uuid": "4de8018d-6335-4230-800b-5847d4e00f37",
"subMetas": {}
}
\ No newline at end of file
{
"__type__": "cc.AnimationClip",
"_name": "animRight2",
"_objFlags": 0,
"_native": "",
"_duration": 0.08333333333333333,
"sample": 60,
"speed": 0.5,
"wrapMode": 36,
"curveData": {
"paths": {},
"comps": {},
"props": {
"eulerAngles": [
{
"frame": 0,
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"frame": 0.08333333333333333,
"value": {
"__type__": "cc.Vec3",
"x": -60,
"y": 0,
"z": 0
}
}
]
}
},
"events": []
}
\ No newline at end of file
{
"ver": "2.1.0",
"uuid": "9f97c0e4-b548-46ab-a2d1-af72d5752189",
"subMetas": {}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>angle</key>
<real>93</real>
<key>angleVariance</key>
<real>23</real>
<key>blendFuncDestination</key>
<integer>771</integer>
<key>blendFuncSource</key>
<integer>770</integer>
<key>duration</key>
<real>-1</real>
<key>emitterType</key>
<real>0</real>
<key>finishColorAlpha</key>
<real>1</real>
<key>finishColorBlue</key>
<real>0.34</real>
<key>finishColorGreen</key>
<real>0.75</real>
<key>finishColorRed</key>
<real>0</real>
<key>finishColorVarianceAlpha</key>
<real>0</real>
<key>finishColorVarianceBlue</key>
<real>1</real>
<key>finishColorVarianceGreen</key>
<real>0.4</real>
<key>finishColorVarianceRed</key>
<real>0</real>
<key>finishParticleSize</key>
<real>16</real>
<key>finishParticleSizeVariance</key>
<real>10</real>
<key>gravityx</key>
<real>0</real>
<key>gravityy</key>
<real>-700</real>
<key>maxParticles</key>
<real>107</real>
<key>maxRadius</key>
<real>0</real>
<key>maxRadiusVariance</key>
<real>0</real>
<key>minRadius</key>
<real>0</real>
<key>particleLifespan</key>
<real>1.07</real>
<key>particleLifespanVariance</key>
<real>0</real>
<key>radialAccelVariance</key>
<real>0</real>
<key>radialAcceleration</key>
<real>0</real>
<key>rotatePerSecond</key>
<real>0</real>
<key>rotatePerSecondVariance</key>
<real>0</real>
<key>rotationEnd</key>
<real>-1184</real>
<key>rotationEndVariance</key>
<real>0.0</real>
<key>rotationStart</key>
<real>-1379</real>
<key>rotationStartVariance</key>
<real>60</real>
<key>sourcePositionVariancex</key>
<real>395</real>
<key>sourcePositionVariancey</key>
<real>430</real>
<key>sourcePositionx</key>
<real>364.007858546169</real>
<key>sourcePositiony</key>
<real>884.5579567779962</real>
<key>speed</key>
<real>600</real>
<key>speedVariance</key>
<real>39</real>
<key>startColorAlpha</key>
<real>1</real>
<key>startColorBlue</key>
<real>0</real>
<key>startColorGreen</key>
<real>0</real>
<key>startColorRed</key>
<real>1</real>
<key>startColorVarianceAlpha</key>
<real>0.25</real>
<key>startColorVarianceBlue</key>
<real>0.3</real>
<key>startColorVarianceGreen</key>
<real>0.44</real>
<key>startColorVarianceRed</key>
<real>0</real>
<key>startParticleSize</key>
<real>22</real>
<key>startParticleSizeVariance</key>
<real>17</real>
<key>tangentialAccelVariance</key>
<real>25</real>
<key>tangentialAcceleration</key>
<real>102</real>
<key>textureFileName</key>
<string>particle_texture.png</string>
<key>textureImageData</key>
<string>H4sIAAAAAAAAAwG2Akn9iVBORw0KGgoAAAANSUhEUgAAADcAAAA8CAYAAADCHCKFAAACfUlEQVRoge2a3XXUMBCF73B4T6ggoYLQQdIBdJDtgO0g7oASKCVLBaSDiAqyVHB5sL0sa1metWYkcc5+j9Lo554r688CLly44AHJe5Lfa/fDDJJXJL+SfGXPc+0+ZTO6xCn/p7jBpUeSPyOiRp5Oy72v0VktJO8AbAF8AXC9EL7375EBCpdi3Nfu9ywkb0h+I/l2pqiRu9oaJgwuPa8UdKC2jgODS08ZLp3yFmun6IRC8jOADfoJwpKXWKK7OJI36AVtANw6NRNiia7iBmHRho2JtvHOudHOuf6REEt0E3c0HEsQYomeznWOdZ8SnVDEo6WC3xoAQESiOryc2zrVGyPqGuAgjuQVyn1rQGLD7OHcFss7eEt2cxmm4gbXSg7JJNbOlXYNKOFca64Bts5pTsvmiMiP2TyrRki+wm9jPMdeRD7MZZo4R/IR5YUBiTUOsBuWnVE955K8FMoWV9E1oIBzNWfIkMrMEsf+Ou1TTh2ZhFRmrnNdZvlcQipz9VIwuLZbW96CuaPOSI5zXUZZC5KTCbBS3ODaw5qyhiz+G1jr3GZlOUvsnSt88ZPCxbluRRkPbJ1ryDXAwbluXT/sSR11DjHayobDaDN/L5fWOOA851o6Ze80QSpxDV4hqEaQ1rkaFz8pFmdKQCGuQdcAQ+dacw2wcg7trGvHBE1QUlzlK4RZROSXKi6VWem6bokgIh81gbPOteoazvjvlxqWXXY3fAjawKi44b3IrVFnrAnawDnnWlvXjlEtA0BEXCNXCCnUm/fJbMn+xemDZW+MuRaR35rAf14QFXJtj+nQiqUBkd2/VhgwfR7VRWJeMB0KsbSA6ccetAvuhQt/+QMcvQWLWVVeWAAAAABJRU5ErkJgglvkEC22AgAA</string>
</dict>
</plist>
{
"ver": "2.0.1",
"uuid": "ec5e42d5-891a-43ec-ad22-a47c910f0628",
"subMetas": {}
}
\ No newline at end of file
{
"__type__": "cc.AnimationClip",
"_name": "result1",
"_objFlags": 0,
"_native": "",
"_duration": 0.6666666666666666,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"paths": {
"lettters": {
"props": {
"scaleX": [
{
"frame": 0.5,
"value": 0,
"curve": "quintOut"
},
{
"frame": 0.6666666666666666,
"value": 1
}
],
"angle": [
{
"frame": 0.5,
"value": -45
},
{
"frame": 0.6666666666666666,
"value": 0
}
]
}
},
"dragonParent/dragonBone": {
"comps": {},
"props": {
"scale": [
{
"frame": 0,
"value": {
"__type__": "cc.Vec2",
"x": 0.1,
"y": 0.1
}
},
{
"frame": 0.4166666666666667,
"value": {
"__type__": "cc.Vec2",
"x": 1,
"y": 1
}
}
]
}
},
"dragonParent": {
"props": {
"position": [
{
"frame": 0,
"value": [
250,
218
],
"motionPath": [
[
0,
301,
107,
293,
-114,
303
],
[
-136,
296,
-107,
299,
-192,
289
]
]
},
{
"frame": 0.2,
"value": [
-216,
260
],
"motionPath": [
[
-184,
170,
-234,
205,
-128,
131
]
]
},
{
"frame": 0.4166666666666667,
"value": [
-2,
111
],
"motionPath": []
}
]
}
}
}
},
"events": []
}
\ No newline at end of file
{
"ver": "2.1.0",
"uuid": "15ba7314-ae90-4f24-82d2-41fafddb7553",
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "b516c90e-6e7f-4915-9ecb-e96762cd896c",
"downloadMode": 0,
"duration": 0.66275,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "77d0d09c-25c7-46b8-86e3-ac2def488077",
"downloadMode": 0,
"duration": 0.195894,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "af5e18fc-d086-409f-a3f3-ae2be1e0dcb5",
"downloadMode": 0,
"duration": 0.333333,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "dcd876c9-19be-4007-8074-069e28524108",
"downloadMode": 0,
"duration": 3.239184,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "e805b8b8-961c-4ca1-925d-c62b86d82336",
"downloadMode": 0,
"duration": 0.97575,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "a709194a-2a36-4d5d-9af5-3a2235e573c5",
"downloadMode": 0,
"duration": 0.6131,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "65b3e990-d42e-4690-9354-c8eb5930e05e",
"downloadMode": 0,
"duration": 1.044898,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "f3967ecd-1535-44b8-aa2c-e16fac1f7861",
"downloadMode": 0,
"duration": 2.2052,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "da6d6e4f-aa6c-4aba-8a9a-9038c82af8a3",
"downloadMode": 0,
"duration": 3.3701,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "8d6dbc15-32a3-4785-8743-a4e55606e85b",
"downloadMode": 0,
"duration": 0.767083,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "a13e98f9-ab82-4349-abba-acaa54833082",
"downloadMode": 0,
"duration": 1.688,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "6c517aba-74b4-4a4d-ba9c-ebcff8396b4c",
"downloadMode": 0,
"duration": 0.7079,
"subMetas": {}
}
\ No newline at end of file
{
"ver": "2.0.1",
"uuid": "059d55e5-a26c-4b9e-9806-b32e350a8b79",
"downloadMode": 0,
"duration": 1.7258,
"subMetas": {}
}
\ No newline at end of file
{"frameRate":24,"name":"click_finger","version":"5.5","compatibleVersion":"5.5","armature":[{"type":"Armature","frameRate":24,"name":"Armature","aabb":{"x":-46,"y":-65.68,"width":92,"height":134.18},"bone":[{"name":"root"},{"length":47,"name":"手掌","parent":"root","transform":{"x":9,"y":58.5,"skX":-93.0448,"skY":-93.0448}},{"length":25,"name":"指头根部","parent":"手掌","transform":{"x":48.6706,"y":-1.9175,"skX":-93.6651,"skY":-93.6651}},{"length":33,"name":"手指上段","parent":"指头根部","transform":{"x":27.3116,"y":3.2131,"skX":87.3862,"skY":87.3862}},{"length":36,"name":"手指下段","parent":"手指上段","transform":{"x":36.0031,"y":-0.1694,"skX":18.7859,"skY":18.7859}}],"slot":[{"name":"图层_174","parent":"指头根部"},{"name":"图层_175","parent":"手指下段"}],"skin":[{"slot":[{"name":"图层_174","display":[{"name":"手指/图层_174","transform":{"x":5.29,"y":-6.43,"skX":-173.29,"skY":-173.29}}]},{"name":"图层_175","display":[{"type":"mesh","name":"手指/图层_175","width":27,"height":91,"vertices":[-29.5,22.5,-38,-11.55,-38,-68.5,-11,-68.5,-11,-17.55,-11,22.5],"uvs":[0.31481,1,0,0.62582,0,0,1,0,1,0.55989,1,1],"triangles":[0,5,4,1,0,4,2,1,4,2,4,3],"weights":[1,3,1,2,3,0.49,4,0.51,1,4,1,1,4,1,2,3,0.49,4,0.51,1,3,1],"slotPose":[1,0,0,1,0,0],"bonePose":[3,-0.16201,-0.986789,0.986789,-0.16201,-23,10,4,0.164399,-0.986394,0.986394,0.164399,-29,-25.5],"edges":[0,1,1,2,2,3,3,4,4,5,5,0],"userEdges":[]}]}]}],"animation":[{"duration":12,"playTimes":0,"name":"normal","bone":[{"name":"手掌","translateFrame":[{"duration":3,"tweenEasing":0},{"duration":3,"tweenEasing":0,"x":20.5,"y":-18},{"duration":6,"tweenEasing":0,"x":-11.5,"y":23},{"duration":0}],"rotateFrame":[{"duration":3,"tweenEasing":0},{"duration":3,"tweenEasing":0,"rotate":14.5},{"duration":6,"tweenEasing":0,"rotate":-15},{"duration":0}]},{"name":"手指上段","rotateFrame":[{"duration":3,"tweenEasing":0,"rotate":-2.5},{"duration":3,"tweenEasing":0,"rotate":-7},{"duration":6,"tweenEasing":0,"rotate":3},{"duration":0,"rotate":-2.5}]},{"name":"手指下段","rotateFrame":[{"duration":3,"tweenEasing":0,"rotate":-12},{"duration":3,"tweenEasing":0,"rotate":-15},{"duration":6,"tweenEasing":0,"rotate":4.5},{"duration":0,"rotate":-17}]}]}],"defaultActions":[{"gotoAndPlay":"normal"}],"canvas":{"width":158,"height":194}},{"type":"MovieClip","frameRate":24,"name":"MovieClip","bone":[{"name":"root"}],"defaultActions":[{}]}]}
\ No newline at end of file
{
"ver": "1.0.1",
"uuid": "e16ce43e-9333-461e-85ce-628fa1ed97a4",
"subMetas": {}
}
\ No newline at end of file
{"name":"click_finger","imagePath":"click_finger_tex.png","SubTexture":[{"name":"手指/图层_174","x":1,"height":103,"y":1,"width":92},{"name":"手指/图层_175","x":95,"height":91,"y":1,"width":27}],"height":128,"width":128}
\ No newline at end of file
{
"ver": "1.0.1",
"uuid": "16218261-8e92-4ddc-b531-9264a6481141",
"subMetas": {}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
{
"ver": "2.0.1",
"uuid": "53c1664f-5673-47e2-b2a3-a22754f67ef7",
"subMetas": {}
}
\ No newline at end of file
This diff is collapsed.
{
"ver": "1.0.1",
"uuid": "326e2192-0498-4afe-863e-c490cf047fde",
"subMetas": {}
}
\ No newline at end of file
{"name":"train_phonicstrain","SubTexture":[{"name":"烟雾1","x":443,"height":34,"y":77,"width":45},{"name":"烟雾","x":395,"height":48,"y":69,"width":46},{"name":"车身","x":1,"height":145,"y":1,"width":392},{"name":"光","x":1,"height":229,"y":148,"width":161},{"name":"车盘","x":1,"height":75,"y":379,"width":406},{"name":"车顶","x":1,"height":38,"y":456,"width":203},{"name":"烟囱2","x":438,"height":56,"y":119,"width":35},{"name":"烟囱","x":466,"height":74,"y":1,"width":33},{"name":"烟帽","x":438,"height":30,"y":177,"width":43},{"name":"杆1","x":365,"height":11,"y":493,"width":85},{"name":"杆2","x":1,"height":9,"y":496,"width":85},{"name":"身体","x":206,"height":51,"y":456,"width":84},{"name":"头","x":395,"height":66,"y":1,"width":69},{"name":"帽子","x":292,"height":54,"y":456,"width":71},{"name":"手","x":365,"height":35,"y":456,"width":71},{"name":"眼皮1","x":475,"height":21,"frameY":0,"y":136,"frameHeight":21,"frameX":0,"frameWidth":37,"width":36},{"name":"眼皮3","x":395,"height":21,"frameY":0,"y":119,"frameHeight":21,"frameX":-1,"frameWidth":37,"width":34},{"name":"眼皮2","x":475,"height":21,"frameY":0,"y":113,"frameHeight":21,"frameX":-1,"frameWidth":37,"width":36}],"imagePath":"train_phonicstrain_tex.png","height":512,"width":512}
\ No newline at end of file
{
"ver": "1.0.1",
"uuid": "2e938429-e16c-422d-b7d5-8e36058808ed",
"subMetas": {}
}
\ No newline at end of file
{ {
"ver": "1.1.0", "ver": "1.1.0",
"uuid": "c551970e-b095-45f3-9f1d-25cde8b8deb1", "uuid": "5f7d5a97-07de-404d-a1ae-8f2ea451936c",
"subMetas": {} "subMetas": {}
} }
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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