mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-22 10:16:01 +08:00
75 lines
2.0 KiB
Dart
75 lines
2.0 KiB
Dart
import 'dart:io';
|
|
import 'package:spine_flutter/spine_dart.dart';
|
|
|
|
void main() async {
|
|
print('Testing SkeletonDrawable and event listeners...');
|
|
|
|
// Initialize with debug extension enabled
|
|
await initSpineDart(enableMemoryDebugging: true);
|
|
|
|
// Load atlas and skeleton data
|
|
final atlasData = File('../example/assets/spineboy.atlas').readAsStringSync();
|
|
final atlas = loadAtlas(atlasData);
|
|
final skeletonJson = File('../example/assets/spineboy-pro.json').readAsStringSync();
|
|
final skeletonData = loadSkeletonDataJson(atlas, skeletonJson);
|
|
|
|
// Create skeleton drawable
|
|
final drawable = SkeletonDrawable(skeletonData);
|
|
print('SkeletonDrawable created successfully');
|
|
|
|
// Track events
|
|
final events = <String>[];
|
|
|
|
// Set global animation state listener
|
|
drawable.setListener((type, entry, event) {
|
|
final eventName = event?.data.name ?? 'null';
|
|
events.add('State: $type, event: $eventName');
|
|
});
|
|
|
|
// Set an animation
|
|
final trackEntry = drawable.animationState.setAnimation(0, 'walk', true);
|
|
print('Set animation: walk');
|
|
|
|
// Set track entry specific listener
|
|
trackEntry.setListener(drawable, (type, entry, event) {
|
|
final eventName = event?.data.name ?? 'null';
|
|
events.add('TrackEntry: $type, event: $eventName');
|
|
});
|
|
|
|
// Update several times to trigger events
|
|
print('\nUpdating animation state...');
|
|
for (int i = 0; i < 5; i++) {
|
|
drawable.update(0.016); // ~60fps
|
|
}
|
|
|
|
// Print collected events
|
|
print('\nCollected events:');
|
|
for (final event in events) {
|
|
print(' $event');
|
|
}
|
|
|
|
// Test switching animations
|
|
print('\nSwitching to run animation...');
|
|
events.clear();
|
|
drawable.animationState.setAnimation(0, 'run', true);
|
|
|
|
// Update a few more times
|
|
for (int i = 0; i < 3; i++) {
|
|
drawable.update(0.016);
|
|
}
|
|
|
|
print('\nEvents after switching:');
|
|
for (final event in events) {
|
|
print(' $event');
|
|
}
|
|
|
|
// Cleanup
|
|
drawable.dispose();
|
|
skeletonData.dispose();
|
|
atlas.dispose();
|
|
|
|
// Report memory leaks
|
|
reportLeaks();
|
|
print('\nTest complete');
|
|
}
|