Swift playground 課題「対称な星」の回答について
Swift playground で学び直しをしております。
「コードを学ぼう3」のタイトルの課題に行き詰まり、
ネットで回答を知りましたが、なぜこれで正解になるのかがわかりませんでした。
特に、最後のforループと、内包されているif文が理解できません。
以下のコードを実行すると、画面をタッチした箇所および画面を4つに分割した4象限の
X軸とy軸対称の位置に動物の画像が現れます。
(例えば、画面右上をタッチするとパンダの絵が、タッチした箇所・右下・左上・左下の
4箇所に現れる)指をスライドすると次々に違う動物が現れ、万華鏡のような効果となります。
最後のforループと、内包されているif文につきまして、
Forループの意味は「右上・右下・左上・左下にキャラクターを配置する」ということでしょうか。
特にif文の示す意味が理解できないのですが、
Scene.place()
内のGraphics[i]
のi
とはfor i in
やif i
のi
と同じものを指しているのでしょうか?だとすると、動物キャラクター数列の0番目から3番目までを4回表示する
だけでは?と思ってしまうのですが、、、。
また、ためしにgraphics[i]
の[]内を全部[2]や[1]にすると、画面のどこをタッチしても、
動物キャラクターが左下に集まってしまいます。なぜこうなるのでしょうか?
let animals = [ imageLiteral(resourceName: "horse@2x.png"), imageLiteral(resourceName: "elephant@2x.png"), imageLiteral(resourceName: "panda@2x.png"), imageLiteral(resourceName: "pig@2x.png"), imageLiteral(resourceName: "frog@2x.png"), imageLiteral(resourceName: "snail@2x.png")]
var lastPlacePosition = Point(x: 0, y: 0)
func addImage(touch: Touch) {
// Space out the graphics.
let placeDistance = touch.position.distance(from: lastPlacePosition)
if placeDistance < /*#-editable-code*/80/*#-end-editable-code*/ { return }
lastPlacePosition = touch.position
// カラの数列graphicsを作る
var graphics: [Graphic] = []
// animals数列から動物をランダムにピックアップ
let chosenImage = animals.randomItem
// ピックアップした動物をgraphics数列に3つ入れる
for i in 0 ..< 4 {
let graphic = Graphic(image: chosenImage)
graphics.append(graphic)
}
// 画面をタッチした絶対座標を求める
let x = abs(touch.position.x)
let y = abs(touch.position.y)
// 右上・右下・左上・左下の座標を決める
let position1 = Point(x: x, y: y)
let position2 = Point(x: -x, y: y)
let position3 = Point(x: x, y: -y)
let position4 = Point(x: -x, y: -y)
//このforループの意味がわからない
for i in 0 ..< 4 {
if i == 0 {
scene.place(graphics[i], at: position1)
} else if i == 1 {
scene.place(graphics[i], at: position2)
} else if i == 2 {
scene.place(graphics[i], at: position3)
} else if i == 3 {
scene.place(graphics[i], at: position4)
}
}
}