ラベル C# の投稿を表示しています。 すべての投稿を表示
ラベル C# の投稿を表示しています。 すべての投稿を表示

Livesplit のソースコードをコンパイルする手順

世界中の Speedrun・RTA プレイヤーに広く使われているタイマーアプリの Livesplit はオープンソースソフトウェアです。

基本的には公式リポジトリで説明されている手順の通りに操作すればコンパイルすることができます。この記事では、個人的につまづきやすいと思ったポイントを紹介します。

GraphicsPath のマーカーについて

System.Drawing.Drawing2D 名前空間にある GraphicsPath クラスには、マーカーを作成する SetMarkers() メソッドやマーカーを削除する ClearMarkers() メソッドが用意されています。

私の探し方が悪いのかかつてはあったのか、このマーカーについて解説した日本語資料がほとんど見当たらなかったので記事として残そうと思います。

Livesplit コンポーネント開発での動作確認時のチェックポイント

コンポーネントの仕様や性質によっては必ずしもここで挙げている全ての項目を確認する必要はないと思います。 必要に応じて必要な項目を確認しましょう。

チェックシートとして使うにはやや抽象度が高いと思います。 また、注目している点が違うだけで意味としては重複している項目があるかもしれません。 確認項目の参考資料とかチェックシートの土台くらいの気持ちでご利用ください。

動的計画法を用いた巡回セールスマン問題の解法による、Donut Dodo のドーナツ取得順の最適化

Donut Dodo という、画面内の小さなドーナツを全て集めて最後に大きいドーナツに触れるとステージクリアできるアクションゲームについて、ドーナツの取得する最速の順番をアルゴリズムを用いて計算してみようと思い、やってみました。

LibVLCSharp を利用した Windows Form アプリ作成の覚書

LibVLCSharp を使う際のポイントなどを自分なりにまとめてみようと思います。

LibVLCSharp は、VLC の LibVLC ライブラリをベースにした .NET 用のクロスプラットフォームのオーディオ・ビデオを扱う API です。
(libvlcsharp の Github ページにある説明文より)
  1. 基本的な情報
  2. 始めの一歩
  3. コントロール
  4. コード
  5. LibVLCSharp 関連の日本語情報
  6. それぞれのライセンス
  7. LibVLCSharp と Vlc.DotNet

チェック付きリストボックスのチェックと、全選択用のチェックボックスのチェックを連動させる

Visual Studio C# コントロール
  1. 個別にチェックできる複数の項目を持つチェック付きリストボックス
  2. a.の全項目のチェック ON / OFF を一括で行うためのチェックボックス
    動作
  1. b にチェックを付けると、a の全てにチェックが付く
  2. b のチェックを外すと、a の全てのチェックが外れる
  3. a の全てのチェックが外れていると、b のチェックも外れる
  4. a の全てにチェックを付けると、b もチェックが付く
  5. a に 1 つ以上かつ全選択未満のチェックが付いていると、b は中間状態になる
  6. b を直接操作しても、b は中間状態にはならない

Livesplit用コンポーネントの作り方

コンポーネント開発に興味を持った方が開発に必要な情報を調べようとした時に少しでも助けになればと思い、私が調べた情報などを紹介するためにこの記事を書きました。

この記事はコンポーネント開発に必要な全ての情報を記載している訳ではありませんが、公式のソースコードを読み解くための参考資料として活用していただけると幸いです。

この記事の中で My~ と書いている部分は開発するコンポーネント名と考えてください。

もくじ

  1. 開発資料リンク
  2. あらかじめ知っておきたい C# の知識
    1. C# の仕様関連で知っていると便利なこと
    2. 標準ライブラリ関連で知っていると便利なこと
  3. コンポーネント開発の始めに
    1. 環境構築
    2. コンポーネントのプロジェクトに含まれるファイル
    3. コンポーネント開発の始めの一歩
    4. プロジェクトのプロパティ設定
  4. コンポーネント開発で利用する定番クラス
  5. コンポーネントの処理の流れ
    1. クラスの実体化やメソッド呼び出しのタイミング・順序
    2. コンポーネントで発生した例外
  6. タイマー画面への描画
  7. 設定画面
    1. AutoScaleMode に注意
    2. MyComponentSettings ユーザーコントロール
    3. 配置するコントロール類
    4. 設定画面に関係するイベント
    5. 設定項目の値
  8. 実際にタイムの値が格納されている場所
    1. LiveSplitState からアクセスできるタイム
    2. 計測中のタイム
    3. 自己ベストタイム
    4. 履歴タイム
    5. 比較対象タイム
  9. 比較対象タイム Comparison の生成
    1. タイムを生成する ComparisonGenerator
    2. Comparison の名前の設定
    3. LivesplitState に含まれている各 Comparison
    4. 注意したい Splits コンポーネント、Subsplits コンポーネントの仕様
  10. 各種イベント
    1. LiveSplitState
    2. TimerModel
    3. Run
    4. その他
  11. コンポーネントのデバッグ
  12. 自動更新

フォルダごとの紹介・説明

  1. LiveSplit.Core/UI/Components
  2. LiveSplit.Core/UI
  3. LiveSplit.Core/Model
  4. LiveSplit.Core/TimeFormatters
  5. LiveSplit.Core/Model/Comparisons
  6. LiveSplit.Core/Model/RunSavers
  7. LiveSplit.Core/Model/RunFactories
  8. LiveSplit.Core/Options
  9. LiveSplit.View/View
  10. UpdateManager

C#初心者の私がGUIアプリケーションに挑戦した際に参考にしたサイト等(サウンド関連)

音楽ファイルを再生する場合、複数の選択肢があるが、選択する基準や妥協点を決めないと泥沼になる恐れがある
 今回、音楽ファイルの再生についての優先順位は次のようにした
優先順位:高
BGM と SE が同時再生できる
再生を実行してから実際に音が鳴るまでの遅れが小さい
音楽ファイルを exe ファイルに埋め込める
(配布フォルダ内に音楽ファイルを置きたくない)
優先順位:中
VisualStudio c# に用意されている標準の機能のみで実現できる
(配布フォルダ内に dll 等を置きたくない)
(今回は c# の勉強のためという側面もあるため、Unity 等の使用も考えない)
優先順位:低
複数の SE を同時再生できる
(音の扱い方によっては SE 同時再生しないほうが耳に優しい場合も)
(最初は優先順位高かったが、音が重なりすぎても耳障りなので順位が低くなっていった)
exe ファイルに埋め込んだまま音楽ファイルを使用できる
(埋め込む方が優先)
  1. 今回、音楽再生で主に参考にしたサイト
  2. ループ再生
  3. MCI でリソースに埋め込んだファイルを再生する
  4. mciSendString のエラーメッセージ

C#初心者の私がGUIアプリケーションに挑戦した際に参考にしたサイト等

プログラミングそのものに対しては完全な初心者ではなく、
  • C言語の知識あり
    (関数のポインタやマルチバイト文字用の関数なども使ったことがある)
  • データ構造の知識あり
    (スタック、キュー、連結リストなど勉強のためにC言語で実装した経験あり)
  • バイナリデータ処理アプリケーション制作経験あり
    (C言語、CUI、一時ファイルの利用など)
  • GUIのアプリケーション制作経験あり(C言語+Win32API)
  • GUIミニゲームの制作経験あり(HSP)
  • その他、VB、VBAでの制作経験あり
という知識・経験があるので、完全に初心者の方には参考にならないものもあるかも

  1. 全体的な参考
  2. 表示位置がズレてサンプル画像のようにならない
  3. ゲームループ処理
  4. foreach 文
  5. 基底クラスから派生クラスのプロパティやメソッドを利用する
  6. セーブデータの保存場所
  7. リソース
  8. アイコン