Flash performance for game dev: native render VS BitmapData framebuffer

前端 未结 5 2077
感动是毒
感动是毒 2021-01-30 23:19

I develop a 2D shooter game with lots of objects and aggressive scrolling.

QUESTION: which way is better?

CHOICE 1 - use nativ

相关标签:
5条回答
  • 2021-01-31 00:01

    I found the custom (bitmap rendered) version to be much faster, and would have expected that.

    Flash's DisplayList is designed to account for a huge number of variances in the DisplayObjects and as a result will not be the most efficient route to go (unless you end up accounting for all those variances yourself in AS3, in which case you'll lose to the native code).

    For example, for tile rendering (where you're doing copyPixels for tiles), a custom bitmap renderer will be far faster than have hundreds of DisplayObjects on the DisplayList. You can also likely use a specialized clipper to toss out tiles, whereas Flash ends up doing very generic bounding-box calculations and tests.

    In re: variances, for example, in your custom version the "building" sprite wobbles as the character moves around, probably due to a float-to-int conversion or round-up instead of round-down in your code.

    0 讨论(0)
  • 2021-01-31 00:02

    If you are doing hundreds or thousands of objects on a screen (such as with intense particle effects), then you will have better performance with CopyPixels.

    A lot of this just depends on what you're trying to do, right?

    0 讨论(0)
  • 2021-01-31 00:05

    Flash can natively handled hundreds of sprites on a modern pc or mac without losing performance, so I's vote for going with display objects.

    0 讨论(0)
  • 2021-01-31 00:10

    Update: thanks for the high-stress version. Again, I couldn't really see a difference just running around. But I cleverly figured out that "r" drops turrets, and when I dropped 20-30 turrets, the native version was somewhat slower than the manual one, so maybe I was wrong. (I saw no difference in memory usage.) It still seems like doing things natively ought to have the potential to be faster, but it may well be that it would require specialized handling of some opaque sort.

    Since this was accepted I'll add a note to make explicit what I said in a comment to a different answer: If all your assets are bitmaps themselves, then as HanClinto points out it's not surprising to find that compositing them manually can be faster than making native objects and letting Flash do the work, since it eliminates the overhead associated with display objects, like event structures.

    However there are probably situations where doing things manually might win out, such as if you have vector contents that need to be rendered into bitmaps, or lots of animated sprites, or if you need to detect mouse events on your actors (which you'd need to do manually, perhaps painfully, if you do your own compositing).

    So if you don't need to do anything that would slow down manual compositing, it appears to definitely be the best answer, and if you do, then trying both approaches is the best way to be absolutely sure. (A hybrid model is also possible, where you make one layer of native objects that need mouse events, and overlay or underlay it with a layer of manually composited bitmaps.)

    0 讨论(0)
  • 2021-01-31 00:12

    I have a lowend laptop, Intel Mobile 1.6Ghz/512MB, Firefox 3.5.x, Flash10.0.32.18, WinXP

    I can cleary see a big difference.

    native version: less than 10sec goes up to CPU99% and movement is jerky. custom version: stays below

    Btw, is there any chance to get example code as an exercise.

    0 讨论(0)
提交回复
热议问题