×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

デスクトップアクセサリ(その2)


デスクトップアクセサリその2、アクアリウム(のようなもの)を作ってみます。
中の魚を泳がせるのと、泡はTimerのループで動かしてみましょう。
魚や泡も含めて、その他、アクアリウムの中にありそうなものをひたすらShapesを使って描画します。
水槽の水については、ちょっとだけグラデーションを入れてみます。
GraphicsWindow.GetColorFromRGB(red, green, blue)
という、3つの数字で色の指定の方法があるのですが、この中のgreenとblueの色を少しずつ変化させると、水っぽいグラデーションが作れます。
具体的にどんな風に変化させるとどんな色になるかは色々と実験してみると面白いです。
水は、以下のようにしてみました。

'水
For i = 1 To 50
  colorset = GraphicsWindow.GetColorFromRGB(50, 200 - 3*i, 255 - 2*i)
  GraphicsWindow.BrushColor = colorset
  GraphicsWindow.PenColor = colorset
  mizu[i] = Shapes.AddRectangle(400, 5)
  Controls.Move(mizu[i], 5, 5*i)
EndFor

For構文で、まず色を作って、幅400ピクセル、高さ5ピクセルの細長い四角形をひたすら並べていくというプログラムです。

アクセサリ

この、いい感じのグラデーションが出来るまでかなり試行錯誤しました……w

次に、動く部分、魚と泡を考えてみます。
泡の描画自体は、Shapes.AddEllipseで円を描くだけなので簡単ですが、魚は楕円と三角形を組み合わせ、位置も計算しなければなりません。
魚については右向きと左向きの時のことも考える必要があります。
ひとまず魚の一例として。

'魚
GraphicsWindow.BrushColor = "LightBlue"
GraphicsWindow.PenColor = "LightBlue"
sakana_a[1] = Shapes.AddEllipse(60, 20)
sakana_a[2] = Shapes.AddTriangle(0, 10, 5, 0, 5, 20)
sakana_a[3] = Shapes.AddTriangle(0, 10, -5, 0, -5, 20)
Shapes.HideShape(sakana_a[3])
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "DarkSlateGray"
sakana_a[4] = Shapes.AddEllipse(8, 8)
Controls.Move(sakana_a[1], 0+200, 0+100)
Controls.Move(sakana_a[2], 60+200, 0+100)
Controls.Move(sakana_a[4], 8+200, 5+100)
Shapes.Animate(sakana_a[1], 0+100, 0+100, 3000)
Shapes.Animate(sakana_a[2], 60+100, 0+100, 3000)
Shapes.Animate(sakana_a[4], 8+100, 5+100, 3000)

アクセサリ

sakana_a[1]が魚の胴体、sakana_a[2]が魚の尾、sakana_a[4]が目です。
上は魚が左向きの時です。
右向きの時は、sakana_a[3]が尾になります。
また、右向き時は目の位置を直す必要がありますね。

後は、泡も足して、Timerで動かしてみます。
位置の指定がひたすらめんどくさい。
メモを取るなりして、座標を把握しながら書いていきます。
Timer内にたまにProgram.Delayを入れているのは、少し時間をズラして泡を出す方が自然っぽく見えるからです。

'泡
GraphicsWindow.BrushColor = "White"
GraphicsWindow.PenColor = "White"
awa[1] = Shapes.AddEllipse(5, 5)
awa[2] = Shapes.AddEllipse(7, 7)
awa[3] = Shapes.AddEllipse(6, 6)
awa[4] = Shapes.AddEllipse(7, 7)
awa[5] = Shapes.AddEllipse(4, 4)
awa[6] = Shapes.AddEllipse(7, 7)
awa[7] = Shapes.AddEllipse(5, 5)
awa[8] = Shapes.AddEllipse(6, 6)
awa[9] = Shapes.AddEllipse(8, 8)

'魚
GraphicsWindow.BrushColor = "LightBlue"
GraphicsWindow.PenColor = "LightBlue"
sakana_a[1] = Shapes.AddEllipse(60, 20)
sakana_a[2] = Shapes.AddTriangle(0, 10, 5, 0, 5, 20)
sakana_a[3] = Shapes.AddTriangle(0, 10, -5, 0, -5, 20)
Shapes.HideShape(sakana_a[3])
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "DarkSlateGray"
sakana_a[4] = Shapes.AddEllipse(8, 8)
Controls.Move(sakana_a[1], 0+200, 0+100)
Controls.Move(sakana_a[2], 60+200, 0+100)
Controls.Move(sakana_a[4], 8+200, 5+100)
Shapes.Animate(sakana_a[1], 0+100, 0+100, 3000)
Shapes.Animate(sakana_a[2], 60+100, 0+100, 3000)
Shapes.Animate(sakana_a[4], 8+100, 5+100, 3000)

GraphicsWindow.BrushColor = "DarkBlue"
GraphicsWindow.PenColor = "DarkBlue"
sakana_b[1] = Shapes.AddEllipse(60, 20)
sakana_b[2] = Shapes.AddTriangle(0, 10, 5, 0, 5, 20)
sakana_b[3] = Shapes.AddTriangle(0, 10, -5, 0, -5, 20)
Shapes.HideShape(sakana_b[3])
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "DarkSlateGray"
sakana_b[4] = Shapes.AddEllipse(8, 8)
Controls.Move(sakana_b[1], 0+280, 0+70)
Controls.Move(sakana_b[2], 60+280, 0+70)
Controls.Move(sakana_b[4], 8+280, 5+70)
Shapes.Animate(sakana_b[1], 0+120, 0+70, 3000)
Shapes.Animate(sakana_b[2], 60+120, 0+70, 3000)
Shapes.Animate(sakana_b[4], 8+120, 5+70, 3000)

'魚と泡のループ
Timer.Tick = Move
Timer.Interval = 5000
Sub Move
  Shapes.HideShape(sakana_a[2])
  Shapes.ShowShape(sakana_a[3])
  Controls.Move(sakana_a[1], 0+100, 0+100)
  Controls.Move(sakana_a[3], 0+100, 0+100)
  Controls.Move(sakana_a[4], 45+100, 5+100)
  Shapes.Animate(sakana_a[1], 0+200, 0+100, 2500)
  Shapes.Animate(sakana_a[3], 0+200, 0+100, 2500)
  Shapes.Animate(sakana_a[4], 45+200, 5+100, 2500)

  Shapes.HideShape(sakana_b[2])
  Shapes.ShowShape(sakana_b[3])
  Controls.Move(sakana_b[1], 0+120, 0+70)
  Controls.Move(sakana_b[3], 0+120, 0+70)
  Controls.Move(sakana_b[4], 45+120, 5+70)
  Shapes.Animate(sakana_b[1], 0+280, 0+70, 2000)
  Shapes.Animate(sakana_b[3], 0+280, 0+70, 2000)
  Shapes.Animate(sakana_b[4], 45+280, 5+70, 2000)
  
  Controls.Move(awa[1], 20, 250)
  Shapes.Animate(awa[1], 20, -5, 3000)
  Program.Delay(500)
  Controls.Move(awa[2], 40, 250)
  Shapes.Animate(awa[2], 40, -5, 2000)
  Program.Delay(800)
  Controls.Move(awa[3], 20, 250)
  Shapes.Animate(awa[3], 20, -5, 1500)
  Controls.Move(awa[4], 30, 250)
  Shapes.Animate(awa[4], 30, -5, 2400)
  Program.Delay(500)
  Controls.Move(awa[5], 50, 250)
  Shapes.Animate(awa[5], 50, -5, 2900)
  Controls.Move(awa[6], 10, 250)
  Shapes.Animate(awa[6], 10, -5, 1000)
  Program.Delay(800)
  Controls.Move(awa[7], 25, 250)
  Shapes.Animate(awa[7], 25, -5, 1400)
  
  Shapes.HideShape(sakana_a[3])
  Shapes.ShowShape(sakana_a[2])
  Controls.Move(sakana_a[1], 0+200, 0+100)
  Controls.Move(sakana_a[2], 60+200, 0+100)
  Controls.Move(sakana_a[4], 8+200, 5+100)
  Shapes.Animate(sakana_a[1], 0+100, 0+100, 1500)
  Shapes.Animate(sakana_a[2], 60+100, 0+100, 1500)
  Shapes.Animate(sakana_a[4], 8+100, 5+100, 1500)
  Shapes.ShowShape(sakana_b[2])
  Shapes.HideShape(sakana_b[3])
  Controls.Move(sakana_b[1], 0+280, 0+70)
  Controls.Move(sakana_b[2], 60+280, 0+70)
  Controls.Move(sakana_b[4], 45-40+280, 5+70)
  Shapes.Animate(sakana_b[1], 0+120, 0+70, 2000)
  Shapes.Animate(sakana_b[2], 60+120, 0+70, 2000)
  Shapes.Animate(sakana_b[4], 45-40+120, 5+70, 2000)
  Program.Delay(500)
  Controls.Move(awa[8], 45, 250)
  Shapes.Animate(awa[8], 45, -5, 1800)
  Controls.Move(awa[9], 105, 250)
  Shapes.Animate(awa[9], 105, -5, 1200)
EndSub

アクセサリ

なんとなく、それっぽい感じになりました。
後は水槽っぽさを増やせばOK。

Microsoft Small Basic Program Listing : ZNR597

アクセサリ

これが水槽っぽいかどうかは……各自の判断で。w
水の音っぽい環境音でも流せば更に癒やされる? かもしれません。


▲TOPへ戻る