Zum Inhalt springen

Unusual FPS readings in Scratch projects

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

💡 Having trouble with performance monitoring or debugging unusual behavior in your projects? 🚀 Get Help Now

PT

PerformanceTracker

Posted on August 5, 2024 • Beginner

🚀 My project shows 303 FPS - is this possible?

I’ve been working on a project and noticed something strange - my FPS counter is showing 303 FPS! I thought Scratch was limited to around 30 FPS, so this seems impossible.

I’ve seen screenshots of even higher values online. How is this happening? Is it a bug in my FPS calculation, or is there something special about how Scratch handles frame rates?

Can someone explain what’s going on and how to create a proper FPS counter? 🤔

DE

DebugExpert_Sam

Replied 4 hours later • ⭐ Best Answer

Great question @PerformanceTracker! Those extremely high FPS readings are indeed misleading. Let me explain what’s happening and how to fix it:

📊 FPS Calculation System Flow

Here’s how proper FPS measurement works:

flowchart TD A[🎮 Start FPS Counter] --> B[Initialize Variables] B --> C[Set Frame Count = 0] C --> D[Record Start Time] D --> E[🔄 Game Loop] E --> F[Increment Frame Count] F --> G[Get Current Time] G --> H{1 Second Passed?} H -->|No| I[Continue Counting] H -->|Yes| J[Calculate FPS] I --> E J --> K[FPS = Frame Count / Time Elapsed] K --> L[Display FPS Value] L --> M[Reset Frame Count] M --> N[Update Start Time] N --> E O[❌ Wrong Method] --> P[Just Count Frames] P --> Q[Show Frame Count as FPS] Q --> R[Results in 300+ FPS] style A fill:#e1f5fe style B fill:#f3e5f5 style J fill:#e8f5e8 style L fill:#fff3e0 style O fill:#ffebee style R fill:#fce4ec

🔍 Why You’re Seeing 303+ FPS

The issue is usually with how the FPS is being calculated. Most faulty FPS counters do something like this:

    // WRONG WAY - This gives false readings
when flag clicked
forever
set [frame count v] to ((frame count) + (1))
set [fps v] to (frame count) // This is NOT frames per second!
end
  

✅ Correct FPS Calculation Method

Here’s how to create an accurate FPS counter:

    // CORRECT WAY - Accurate FPS measurement
when flag clicked
set [frame count v] to [0]
set [start time v] to (timer)
forever
change [frame count v] by (1)
set [elapsed time v] to ((timer) - (start time))

if <(elapsed time) > [1]> then
set [fps v] to (round ((frame count) / (elapsed time)))
set [frame count v] to [0]
set [start time v] to (timer)
end
end
  

📊 Alternative: Real-time FPS Display

For a more responsive FPS counter that updates continuously:

    // Real-time FPS with moving average
when flag clicked
set [last time v] to (timer)
set [fps history v] to []
forever
set [current time v] to (timer)
set [frame time v] to ((current time) - (last time))

if <(frame time) > [0]> then
set [current fps v] to (1 / (frame time))

// Keep last 10 readings for smooth average
add (current fps) to [fps history v]
if <(length of [fps history v]) > [10]> then
delete (1) of [fps history v]
end

// Calculate average FPS
set [total v] to [0]
repeat (length of [fps history v])
change [total v] by (item (counter) of [fps history v])
end
set [fps v] to (round ((total) / (length of [fps history v])))
end

set [last time v] to (current time)
end
  

🎯 Understanding Scratch’s Frame Rate Limits

  • Normal Scratch: Typically runs at 30 FPS maximum
  • Turbo Mode: Can achieve higher frame rates (60+ FPS)
  • Browser dependent: Performance varies by device and browser
  • Project complexity: Heavy projects will have lower FPS

🛠️ Performance Optimization Tips

To improve your project’s actual performance:

    // Optimize heavy operations
when flag clicked
set [optimization counter v] to [0]
forever
change [optimization counter v] by (1)

// Only do heavy calculations every few frames
if <((optimization counter) mod (5)) = [0]> then
// Heavy calculations here
// (collision detection, AI, etc.)
end

// Light operations every frame
// (movement, simple animations)
end
  

Remember: A stable 30 FPS is much better than an unstable 60+ FPS! Focus on consistent performance rather than peak numbers. 🎮

PT

PerformanceTracker

Replied 1 hour later

@DebugExpert_Sam Thank you so much! 🙏

I implemented your correct FPS calculation and now I’m getting realistic readings around 30 FPS. You’re absolutely right - my original method was just counting frames, not measuring actual time!

The optimization tips are really helpful too. My project runs much smoother now that I’m not doing heavy calculations every single frame.

OG

OptimizationGuru

Replied 3 hours later

Great explanation @DebugExpert_Sam! I’d like to add a few more performance tips:

    // Use efficient collision detection
define check collision efficiently
if <(distance to [target v]) < [50]> then
// Only do precise collision check when close
if <touching [target v]?> then
// Handle collision
end
end

// Limit clone creation
when I start as a clone
if <(clone count) > [20]> then
delete this clone
end
  

Also remember: Turbo mode can help with performance testing, but always test in normal mode for real-world performance! 🚀

VB

Vibelf_Community

Pinned Message • Moderator

⚡ Optimize Your Scratch Projects Like a Pro!

Excellent discussion on performance monitoring! For those looking to create high-performance Scratch projects, our community can help you with:

  • 📊 Advanced performance profiling techniques
  • 🚀 Memory optimization strategies
  • ⚙️ Efficient algorithm implementations
  • 🎮 Game-specific optimization patterns

📚 Related Topics

Ready to create lightning-fast Scratch projects? Get expert optimization guidance in the Vibelf app!