2016-06-16 3 views
1

これは私のプログラムUFOがシーンの下部にあるフラットベッドの岩に触れないのはなぜですか?なぜそれは前に止まるのですか?

; constants 
(define SCENE-WIDTH 200) 
(define SCENE-HEIGHT 200) 
(define BGR-COLOR "blue") 

(define FLAT-ROCKBED (rectangle 100 10 "solid" "black")) 

(define MTSCN (place-image FLAT-ROCKBED 
          (/ SCENE-WIDTH 2) SCENE-HEIGHT 
          (empty-scene SCENE-WIDTH SCENE-HEIGHT BGR-COLOR))) 

[define UFO 
    [overlay [circle 10 "solid" "green"] 
      [rectangle 40 4 "solid" "green"]]] 

(define X-POS (/ SCENE-WIDTH 2)) 

(define UFO-PADDING 
    (- SCENE-HEIGHT 
    (/ (image-height UFO) 2) 
    (image-height FLAT-ROCKBED))) 

; functions 
[define [ufo-landing height] 
    [cond 
    [[<= height UFO-PADDING] 
    (place-image UFO X-POS height MTSCN)] 
    [[> height UFO-PADDING] 
    (place-image UFO X-POS UFO-PADDING MTSCN)]]] 

それはHow to Design Programs, 2nd Editionの最初の章からです。

私は相互作用領域に(animate ufo-landing)関数を呼び出すときに、これは私がenter image description here

UFOは、フラットベッド岩に触れていない得る出力されます。 どうすればいいですか?

編集1: 現場にUFOを配置するための縦軸は二つの要因に依存しています。

  1. それUFOちょうどその表面に接触するように着陸しなければその上FLATBED-ROCKの高さ。
  2. UFOの中心;その配置は、その高さが20ピクセルであるため、その中心座標の上下10ピコックスを占めます。

UFO-PADDING定数は、上記の2つの要因を説明し、シーンにUFOを配置するために使用されます。したがって、私はUFOがFLATBED-ROCKの表面にほとんど触れていないときに停止することを期待しています。しかし、それはしません! UFOの縦座標に影響する他の要因はありますか?私は何が欠けていますか?

答えて

1

私はあなたが行うときために、問題があると信じて:

(define UFO-PADDING 
    (- SCENE-HEIGHT 
     (/ (image-height UFO) 2) 
     (image-height FLAT-ROCKBED))) 

あなたがやっていることはUFOの中央のパディングがHEIGHTであると言っている - (像高UFO/2) - 画像高FLAT-ROCKBED。

(/ (image-height FLAT-ROCKBED) 2) 

そうしないと、あまりにも多すぎることになります。

+0

ありがとう、私は今PCにアクセスできません。私は明日あなたのアドバイスを試み、報告します。 –

+0

そうです。出来た。ありがとう! –

+1

答えが正しく選択されたため、正しい答えを選択しました。しかし、なぜそれが働いたのか分からなかった。 しかし、私の計算とは違っていたので、正しくコーディングしていないものがあることは確かでした。そして、私はそれを見つけました.MTSCNを定義するとき、私はFLAT-ROCKBEDの配置を相殺するべきでしたが、私はそうしませんでした。それが主な原因でした。 ありがとうございました! –

1

番号が0,1,2、... のコンストラクトアニメーションコール へのインタラクションウィンドウ(repl)でこの表現を試すことができます。

(UFOランディング1000)

1000年言うの高さ、ufo-landingは、この句を使用する:

[[> height UFO-PADDING] 
(place-image UFO X-POS UFO-PADDING MTSCN)]]] 

y座標はUFO-PADDINGあります。 ufo調整の終了位置を移動するにはUFO-PADDING

(define UFO-PADDING 
    (+ ? 
    (- SCENE-HEIGHT 
     (/ (image-height UFO) 2) 
     (image-height FLAT-ROCKBED)))) 

疑問符の付いた場所で別の番号を試してみてください。

+0

ありがとうございます。私は正確に私が苦労しているものについて明確ではなかった。私は質問を編集し、さらに情報を追加しました。もう一度それを見ることができますか? –

関連する問題