我正在使用Racket大爆炸机制,但我不能同时获得平稳和快速的射弹。有那么多丑陋的闪烁。这是我的代码:
(require 2htdp/universe
2htdp/image)
(define gx 0)
(define gy 0.35)
(struct ballstate (x y vx vy) #:transparent)
(define startstate (ballstate 10 590 7 -20))
(define (make-new-state old)
(define newvx (+ (ballstate-vx old) gx))
(define newvy (+ (ballstate-vy old) gy))
(ballstate (+ (ballstate-x old) newvx)
(+ (ballstate-y old) newvy)
newvx
newvy))
(define (main)
(big-bang startstate
[on-tick make-new-state]
[to-draw place-ball-at]
[on-key reset]))
(define (place-ball-at s)
(place-image (circle 10 "solid" "red")
(ballstate-x s)
(ballstate-y s)
(empty-scene 800 600)))
(define (reset s ke)
startstate)
(main)
问题是:如何让它变得更好,更快,更顺畅和无闪烁?
答案 0 :(得分:2)
以下两件事可能有所帮助:
on-tick子句采用可选参数来确定两个滴答之间的时间。默认值为1/28,因此如果降低此值,您将获得更多帧,从而产生更流畅的动画。
如果您的程序花费的时间超过每个刻度之间产生图像的时间,您将看到口吃。预先计算可预先计算的所有内容是件好事。例如,没有理由每次都产生一个新的空场景,所以下面我只是将它存储在一个变量中。
(define (main) (big-bang startstate [on-tick make-new-state 1/50] [to-draw place-ball-at] [on-key reset])) (define background (empty-scene 800 600)) (define (place-ball-at s) (place-image (circle 10 "solid" "red") (ballstate-x s) (ballstate-y s) background))