×

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

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


デスクトップアクセサリというのは、パソコンのディスプレイの隅っこに置いておくお遊びソフトです。
かわいいキャラクターが動いて色々やってくれたり、景色を見つめたり、自然音を流したり……というようなものです。
実際に絵を描いて表示させる方が綺麗なものが作れるのですが、ここでは敢えて、Small BasicのGraphicsWindowShapesで描ける図形のみで作っています。
要するに図形表示の練習みたいなものです。w
Small Basicで描けるのは四角形、三角形、円(楕円)、直線くらいです。
これでそれっぽいものがどこまで作れるかという勝負ですね。

せっかくのデスクトップアクセサリなので、動きを付けてみましょう。
Timerで動作を繰り返すのが手っ取り早いです。
デジタル時計のプログラムは、1秒置きに時刻を表示するようにしています。
これに、「1秒でループする図形の動き」を付け足せば、一応、デスクトップアクセサリっぽくなるはずです。
Shapesを使って、こんなのを描いてみました。

GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
GraphicsWindow.Title = "clock"
GraphicsWindow.BackgroundColor = "PowderBlue"

GraphicsWindow.BrushColor = "AliceBlue"
GraphicsWindow.PenColor = "CadetBlue"
maru = Shapes.AddEllipse(180, 120)
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.PenColor = "Black"
migime = Shapes.AddEllipse(4, 18)
hidarime = Shapes.AddEllipse(4, 18)
GraphicsWindow.FontSize = 30
kuchi = Shapes.AddText(Text.GetCharacter(861))
maruX = 8
maruY = 30

Shapes.Move(maru, maruX, maruY)
Shapes.Move(migime, maruX+60, maruY+30)
Shapes.Move(hidarime, maruX+115, maruY+30)
Shapes.Move(kuchi, maruX+80, maruY+45)

アクセサリ

Shapesを4つ使って、おまんじゅう的なマスコットを描いています。
「maru」が胴体(?)、migimeとhidarimeが目で、kuchiは口です。
口部分は、Unicodeの文字コードの中から、「U」みたいな文字を探して作っています。「Text.GetCharacter(861)」が文字表示用のオブジェクトですね。
後はShapes.Moveで各パーツを移動して、それっぽく見えるようにしています。

これを動かしてみます。
このおまんじゅうがぴょんぴょんと跳ねるような動きを作ってみたいです。
つまり、上下移動なので、y座標のみが変化します。
等速で移動してもジャンプしている感じが出せません。
これは高校物理の運動方程式の知識になりますが、y座標の時間毎の変化を二次関数にすれば、重力に逆らって跳ねている感じが出せます。

  For i = -50 To 50
    Shapes.Move(maru, maruX, maruY + 0.02 * i*i)
    Shapes.Move(migime, maruX+60, maruY+30 + 0.02 * i*i)
    Shapes.Move(hidarime, maruX+115, maruY+30 + 0.02 * i*i)
    Shapes.Move(kuchi, maruX+80, maruY+45 + 0.02 * i*i)
  EndFor

For構文でiを-50から50まで変化させて、y座標は0.02×iの2乗としています。
二次関数のグラフの、定数が負の場合を想像してみてください。ボールをぽーんと投げた時みたいな形になっていますね。
それの再現です。

これとデジタル時計をくっつけて、以下のようにしてみました。

GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
GraphicsWindow.Title = "clock"
GraphicsWindow.BackgroundColor = "PowderBlue"

GraphicsWindow.BrushColor = "AliceBlue"
GraphicsWindow.PenColor = "CadetBlue"
maru = Shapes.AddEllipse(180, 120)
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.PenColor = "Black"
migime = Shapes.AddEllipse(4, 18)
hidarime = Shapes.AddEllipse(4, 18)
GraphicsWindow.FontSize = 30
kuchi = Shapes.AddText(Text.GetCharacter(861))
maruX = 8
maruY = 30
Shapes.HideShape(maru)
Shapes.HideShape(migime)
Shapes.HideShape(hidarime)
Shapes.HideShape(kuchi)

GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(25, 1, Clock.Time)

Timer.Tick = marumove
Timer.Interval = 1000

Sub marumove
  GraphicsWindow.BrushColor = "PowderBlue"
  GraphicsWindow.FillRectangle(1, 1, 180, 40)
  GraphicsWindow.BrushColor = "Black"
  GraphicsWindow.DrawText(25, 1, Clock.Time)
  
  Shapes.ShowShape(maru)
  Shapes.ShowShape(migime)
  Shapes.ShowShape(hidarime)
  Shapes.ShowShape(kuchi)
  For i = -50 To 50
    Shapes.Move(maru, maruX, maruY + 0.02 * i*i)
    Shapes.Move(migime, maruX+60, maruY+30 + 0.02 * i*i)
    Shapes.Move(hidarime, maruX+115, maruY+30 + 0.02 * i*i)
    Shapes.Move(kuchi, maruX+80, maruY+45 + 0.02 * i*i)
    Program.Delay(8)
  EndFor
EndSub

アクセサリ

まんじゅうがぴょんぴょんする時計。w
まあこれでも、一応はデスクトップアクセサリみたいなもんです。

次:アクアリウム


▲TOPへ戻る