Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

astah* community UML作成

前回は、astah*のダウンロードまでやりましたので、今回は作図を行おうと思います。
感想としては、オープンソースとして。。。を抜きにしても使いやすいと思います。

今回作成したのはラズパイにデプロイして画面をディスプレイに表示するアプリの設計を行いました。

線を引く、ノートを書く、クラス図(オブジェクト)を書くなどが直感的にわかるUIでした。
マウスを乗っけてやると名前が表示されるのが素晴らしい☆

f:id:Takunoji:20170406220024p:plain

苦労的なものはなく、難なく以下の様なオブジェクト図を作成できました。

f:id:Takunoji:20170406220126p:plain

1.ラズパイに画面を起動するアプリケーションを配置
2.設定を読み込みアクセスするサーバー(ローカルフォルダ)の動画ファイルを表示する

という様なシンプルなアプリケーションの設計になります。
オブジェクトの配置図なので詳細部分がわからないと思います。

 

次回は、ステートマシン図を作成したいと思います。

takunoji.hatenablog.com

設計ツール astah* インストール

for  Mac

eclipse UML DesingnerでのUML作成にてシーケンス図が書けなかったので「astah*」を

インストールしてやり直そうと考えております。

ダウンロードは左記のサイト

Login | ChangeVision Members

結局のところ、ユーザー登録が必要です。
ダウンロードするのは astah_communityになる、迷ったが無料と書いてありました。
mac版、windows版、Linux版までありました。
今回はmac版のインストールを行いました。

f:id:Takunoji:20170403215029p:plain

 

UMLを使う

UMLは、プログラム設計を一定のルールをもってみんなにわかる様にしたものです。

早い話が、みんなにわかるプログラム設計が出来るという事です。

ちょいと言いかたを変えると

考えを絵にできる

という事が出来るという事です。

どーゆー事ですか?って質問に答えるとプログラム設計、もしくはプログラム作成では、「何を」「どーして」「何をするのか」を導き出す事に終始します。

それを絵にするという事は…

という事です。これを出来る様になると生きていくのが少し楽になりました。

是非是非、理解して使える様な人が増えたら良いな…と思う次第です。

しかしながら、提案書とか企画書はUMLで書く事は出来ないのが残念です。分類としてはプログラミング言語と同じなので…

 

でわでわ。。。

Gitへソースを追加する

Gitの設定ができたら、今度はリポジトリに資源(ソースとか画像ファイル)を追加します。
対象のファイルをコミット(ローカルリポジトリへのコミットになります。)
そして、コミットしたファイルをリモートリポジトリへとプッシュします。

f:id:Takunoji:20170402114018p:plain

プッシュ後の確認

f:id:Takunoji:20170402114151p:plain

Gitは、リポジトリをローカル(自分のpc)とリモート(Git hubのサーバー)の2つを使って資源の管理を行います。

ローカルとリモートに分ける事で、サーバーの負担を減らし、資源の管理をよりやりやすくします。

余談

昔は、CVSというのがありました。これもバージョン管理システムですが時代とともに、CVSSVN→Gitと進化してきました。現状(2019年)は落ち着いて来ていて付随する(連携する)アプリが増えてきました。

そのうちの有名なものは

  1. Redmineとは — Redmine.JP
  2. Jenkins

などがあり、連携する事でチーム開発をスムーズに行うことができます。

個人的に利用している人もいて、アイデア次第で楽しい事が出来るかもしれません。

次回は、UML作成に着手します。

でわでわ。。。

takunoji.hatenablog.com



TortoiseGitのセットアップ

for Windows

Qtのセットアップが完了したので、資源(ソース)管理の準備をしたいと思います。
下記のサイトからMSIファイルを落とします。

Download – TortoiseGit – Windows Shell Interface to Git

MSIファイルを叩きます。

f:id:Takunoji:20170402111532p:plain

f:id:Takunoji:20170402111546p:plain

f:id:Takunoji:20170402111659p:plain

このままNextを押します。下の赤線を確認してFinish

f:id:Takunoji:20170402111740p:plain

セットアップが走ります。このまま初期値でNextを押します。

f:id:Takunoji:20170402112430p:plain

Git.exeがあることを確認してください。

f:id:Takunoji:20170402112449p:plain

あとは初期値でNext...
インストールが終わったら設定を確認

f:id:Takunoji:20170402112834p:plain

リモートリポジトリが指定のリポジトリ(GitHub)に設定されていることを確認します。

f:id:Takunoji:20170402113023p:plain

これで、準備OK☆次回はソースの登録方法です。

takunoji.hatenablog.com

関連ページ

PGボックス〜ゲームとプロジェクトとプログラミング基礎〜

PGボックス〜ゲームとプロジェクトとプログラミング基礎〜

PGボックス〜ゲームとプロジェクトとプログラミング基礎〜

Qt Test GoogleTesting Framework

悪戦苦闘の末、結局「Windows10 Iot Core」はあきらめました。が。。。
※古いラズパイは使えないようだ。バージョンなど確認する必要があるのかも?

Qt開発は引き続き・・・

テストを行いながら、テスト駆動型開発でやっていこうと考えております。
なので、テストコードから先に作成していきます。

使用するのは表題の「Google Testing Framework」です。

Running Autotests | Qt Creator Manualを参考にして作成いたします。

Testプロジェクトを作成します。
ファイル→ファイル/プロジェクトの作成→そのほかのプロジェクト

f:id:Takunoji:20170402093707p:plain

f:id:Takunoji:20170402093721p:plain

f:id:Takunoji:20170402093742p:plain

上記のように作成します。
途中、バージョン管理用のリポジトリ設定がありますが、今回は割愛いたします。

作成した、プロジェクトは以下のように表示されます。

f:id:Takunoji:20170402094110p:plain

対象プロジェクト/UnitTestの構成でUTプロジェクトを作成しております。
そのほうが管理が楽だと思ったので(笑)

Windows 10 Iot Core 3度目の正直。。。やっぱりできませんでした。

以前途中まで記載しました。記事よりダウンロード、SDカードのフォーマット
を行いました。

【失敗していた点】SDカードへの書き込みはWindows10を使用しております。

1.SDカードをフォーマットしたつもりだったが、できていなかった
  →フォーマッターを使用する、そしてSDカードの抜きさしをする(リロード)

   ※筆者はSDカードの抜きさしもやっていませんでした。。。
   SD Card formatter for Windows Download - SD Association

2.NOOBSのダウンロードはLiteでやったらWindows10 iot coreがなかった・・・
  右のサイトから改めてダウンロードStep 1 of 4 - Get the tools | Windows IoT

  ファイル名が「NOOBS_lite。。。」まぁよし!

【再度インストール方法を確かめる】

・以前使用した「setup.exe」はSDカードのフォーマットがダメだったので再度
  setup.exeでインストール!!
 ラズパイをLANケーブルに接続して起動。。。フォーマットがよくてもダメ!!!

【ISOをダウンロードして
・結局は、こちらのページより、(Confirmを押下した後に)ISOをダウンロード!!!!
 ダウンロードに30分くらいかかりました。
 ISOをマウントして・・・下のサイトを参考にしました。

Windows 10標準の機能でISOをマウントする/アンマウントする方法 - ぼくんちのTV 別館

 そして、できたmsiファイルをSDカードへコピー&msiファイル起動!!!

f:id:Takunoji:20170331213317p:plain

f:id:Takunoji:20170331213341p:plain

f:id:Takunoji:20170331213358p:plain

ん?!インストールがCドライブ??
起動したのは「setup.exe」と同じ画面。。。とにかく続行!!!

f:id:Takunoji:20170331214208p:plain

やっぱり駄目だった~~~~~~~自分のデバイスが見つからない。。。

f:id:Takunoji:20170331215038p:plain

結論としては、ラズパイが古いのでIotCoreは使用できないと判断しました。

 

結局、ふつーにRasbainをインストールしました。
手順は、NOOBSをダウンロード→SDカードにコピー→SDカードをRPiにセット
→RPiを起動→インストーラが走るから選択してインストール

したのサイトからダウンロードできます。

f:id:Takunoji:20170331220931p:plain

難なくインストールが走っております。
Qtでソースを作成して、Windowsでテスト、最後にRPiで起動確認をする。
こんな手順でやりますか・・・



 

Windows10 Iot core install 注意点

www.raspberrypi.org

1.NOOBSを使用して(ダウンロードして)インストールする

www.raspberrypi.org

2.使用するSDカードはFATでフォーマットするとNOOBSが起動しない

3.setup.exeファイルとか使用したが全部ダメだった、ラズパイの古いものだと起動しないのかもしれない…

 

取り敢えずマックでSDカードをフォーマットして、NOOBSを再度入れてやり直す。

Qt Nmake U1073 エラー

表題のエラー対応方法

エラーログが出力される

f:id:Takunoji:20170328210341p:plain

U1073: don't know how to make~とエラーメッセージが出力されます。

nmake.exeの場所が悪いんじゃないか?(パスにスペースが入っているとか・・・)

いろいろと意見があったが偶然解決、デバック → リリースに変更
※nmake.exeをVCの下から違う(パスの通った)場所へコピーした後

f:id:Takunoji:20170328210614p:plain

起動!

f:id:Takunoji:20170328210751p:plain

デバック、リリースで何が違うのかわからなかったが解決
今後の注意点として覚えておきたい。

 

Qt UI部分の作成2 Label プロパティ HorizontalLayout

途中に、QSettingクラスの調査を行いましたが。。。

Qt UI部分の作成 - Takunojiの日記でやったとこの詳細です。

画面のパレット部分(赤線部分)よりLabel、Layoutをドラッグ&ドロップします。

f:id:Takunoji:20170328200746p:plain

配置した、Labelのプロパティを変更します。 → プログラムで使用するので(笑)

f:id:Takunoji:20170328200938p:plainobjectName:Object名
プログラムで使用するときのオブジェクト名を指定します。

f:id:Takunoji:20170328201531p:plain


サイズなど実際に触ってみるのが一番理解できます。

そして、「HorizontalLayout」ですが。。。したがプロパティ(設置値)

f:id:Takunoji:20170328201541p:plain

【追加方法】

f:id:Takunoji:20170328202617p:plain

f:id:Takunoji:20170328202715p:plain

f:id:Takunoji:20170328202737p:plain

Layoutの比率を「1:1:1」にする

f:id:Takunoji:20170328202640p:plain

同じ要領でListView,Widget, Buttonを追加します。

f:id:Takunoji:20170328203428p:plain

そして、全体のウィジェット(MainWindow)にレイアウトを指定します。
すると上のような感じになります。

Qtサンプル OpenGLを使用する実装

Qtデザイナーでの画面作成ができたので(作り方が大雑把に分かったくらいですが。。)

今度は、実装する内容について調べたいと思います。
サンプルを見るのが一番でしょう(笑)

Cubeを作成したサンプルです。

ヘッダファイルでいろいろとインクルードして。。。赤線部は継承
【イベント処理】マウス タイマー

【描画処理】GL初期処理 リサイズ シェーダ? テクスチャ...

一部わからないものもありましたがそんなことは日常的な事なので(笑)

それでも、プログラムなので処理は、
1「メインメソッドが動く」
2「上から下へ処理が走る」

のでそれを読んでいくだけです。。。がすべては読んでいられませんので

C++の優れているところ、「ヘッダとソースに分かれている」ことを考慮に入れて
ヘッダファイルから見ていきます。

↓ヘッダファイル

f:id:Takunoji:20170323205447p:plain

赤線部分より...
OpenGL使ってんなぁ」
protected:より
「マウス押下、マウスのボタンを離す」イベント。
OpenGLの初期化」「リサイズ」「シェーダ?」「テクスチャ」の処理があるだなぁ

CPPファイル※長いので抜粋します。
コメント書いてあるじゃん(笑)
//! [0]

void MainWidget::mousePressEvent(QMouseEvent *e)
{
    // Save mouse press position
    mousePressPosition = QVector2D(e->localPos());
}
 
void MainWidget::mouseReleaseEvent(QMouseEvent *e)
{
    // Mouse release position - mouse press position
    QVector2D diff = QVector2D(e->localPos()) - mousePressPosition;
 
    // Rotation axis is perpendicular to the mouse position difference
    // vector
    QVector3D n = QVector3D(diff.y(), diff.x(), 0.0).normalized();
 
    // Accelerate angular speed relative to the length of the mouse sweep
    qreal acc = diff.length() / 100.0;
 
    // Calculate new rotation axis as weighted sum
    rotationAxis = (rotationAxis * angularSpeed + n * acc).normalized();
 
    // Increase angular speed
    angularSpeed += acc;
}

(ヘッダファイルより)QVector2D = > mousePressPosition なので
マウスイベントを受け取りマウスのポジションを取得しているようだ。。。
のように読み進める大雑把にマウスポインタの座標計算してるなぁと認識しておく(笑)

じゃ、画面の初期表示は何をしているの?と思いました。
クラスが起動するとき、基本的にコンストラクタが起動します。
※もちろん例外もあり、コンストラクタが起動しないことも多々あります。

コンストラクタは以下のように各メンバを初期化しています。
MainWidget::MainWidget(QWidget *parent) :

    QOpenGLWidget(parent),
    geometries(0),
    texture(0),
    angularSpeed(0)
{
}

とりあえず、QOpenGLWidgetがわかりませんなぁ(笑)
じゃ調べよう※上のリンクにドキュメントがあるのでそれで調べました。
ははぁ「initializeGL()」をオーバーライドしているのね。。。

「QOpenGLWidgetクラスが起動するときにinitializeGL()が呼ばれますので
このメソッドに初期化処理を記述してくださいよ」という設計になっているようだ。
(・_・D フムフムちょいとわかってたかな?

次回は、その中身を理解していきたいと思います。