2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Delphi で KUSO アプリを作った件

KUSO APPLICATION

去年はクソアプリ Advent Calendar で、クソアプリを作りましたが、あれは Windows / macOS だけでしか動きませんでした!

モバイルファーストの時代にこれはマズい!!

ということで、今回は Android / iOS 用のクソアプリを作りました。
まずはコレをご覧ください。

スクリーンショット

kuso.png

動画

動画は代表して iOS のものを。
減色&フレームレート落としたのでガビガビでガクガクだけど本当はもっとキレイにくるくる回るよ!

…え?何かに似てる??馬鹿な!
LEGACY っぽいフォント探すの苦労したよ!

機能

  • 右に回すとカウントアップ
  • 左に回すとカウントダウン

ただそれだけ!!
だってクソアプリだからね!!
でも!メモリが許す限りカウントアップできるから一生涯回せるよ!たぶん!!

技術的解説

相変わらず Delphi で制作しています。

あと自作の BigInteger 構造体を組み込んでいるので(Delphi には標準で BigInteger がない。ただし BCD 演算用の TBCD があり64桁までの計算ならこれで事足りる)メモリの許す限りカウントアップ可能!
BigInteger の解説は Delphi Avent Calendar の方に…

こちらでは 3D の話を

FireMonkey

Delphi には FireMonkey というライブラリが標準搭載されているのですが、こいつはイカれたライブラリで、コントロールを DirectX / Metal / OpenGL を使って自前描画しています。
そのため、ネイティブのコントロールに縛られない描画が可能です。
たとえば、以前の記事で書いた、こんな風に画像にエフェクトをかけたり、UI パーツを自由に変形したりできます。
nekochan.png

image.png
そして更にイカれているのは、3D も扱えるということなのです。

FireMonkey3D

FireMonkey の 3D 機能については FireMonkey3D という名前で呼ばれていますが、特に 2D / 3D の間に垣根があるわけではないです(以前はありました)

TViewport3D

TViewport3D は 3D でレンダリングするベースとなる部分です。
↓今回の KUSO APPLICATION の設計時の画面ですが、3D の部分は viewportUnko の子として存在しています。
image.png

TLayer3D

また、面白いのが TLayer3D で、このコントロールはその上に通常の FireMonkey の 2D 用コントロールを乗せられます。
これを使って今回は TImage を乗せました。
当初は TText を乗せていたのですが、Android の「💩」フォントが予想以上に気持ち悪かったので、画像にしました。
上の設計時の画面では、imgTitle, imgMtL, imgMtR, imgUnko を乗せています。

こんな風に 2D / 3D をまぜこぜにしたアプリを作れるのは Delphi の面白い部分です。

まとめ

Delphi を使えば 3D も簡単に使えるし、Android / iOS の開発も楽ちんだよ!
ホントだよ!

ソースは下記に
https://bitbucket.org/freeonterminate/filpunko/src/master/

Windows / macOS でも動くけど計算をサボっているからグリッドのラインが上と合わないよ!
ごめんね!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
2
Help us understand the problem. What are the problem?