[QT] QT を使用してスーパー マリオを実現するのに 2 か月かかりました。QT はゲームを作成できないと誰が言ったのですか? [ソースコードを添付]

[感情を込めて前に書いたもの] 

        C++ コースのプロジェクトは 2 か月以上かかり、4,000 行以上のコードが書かれ、最終的に QT を使用してスーパー マリオを最初から実装しました。私の能力の限界から、巨匠のソースコード(Master Portal)を参考にさせていただきましたが、巨匠はVSで書き、私はQTで書いており、まだまだ大きな差がある部分があります。最初は本当に必死で、5、6回書き直し、こんな企画を書いていいのかと迷ったこともあったのですが(これが最初の計画の大切さです)、書き終えた時には、ソースコードを参照してコリジョンボックスを作成したところ、このプロジェクトを作成できることがわかりました。次のコードはすべて私が即興で作ったものです。 

        同様にプラットフォームの使い方が上手な他の学生と比較すると、私が費やした時間とコードの量は彼らの 2 ~ 3 倍であるはずです (寮の優秀な男性はプラットフォームで書くのがとても上手ですが、私はそう思います)彼は 1,000 以上の OK しか持っていません)。何が難しいのですか?最初はコリジョン ボックスを構築することです。これが最優先事項です。コリジョン ボックスを処理すると、プロジェクトは半分完成したことになります。2つ目は絵の加工ですが、本作では任天堂のアプローチを参考に、絵を解体してパズルにする手法を採用しています。マリオの絵を集めるのは、下図のように、使用したマリオを「スクリーンショット」という手法で一枚ずつ切り出し、適切な位置に組み立てていくだけなのですが、この作業に時間の8割を占めている気がします。 , なぜなら、この絵はあまり詳細ではないので、段階的に、座標ごとに試すことしかできません。非常に単純な機能を備えた非常に単純なインターフェイスのようなものです。ただし、画像を組み立てるのが非常に面倒なので、さらに時間がかかりました100 行を完了するには 2 時間以上かかります。難しいことはもう書きたくないんですが、書こうと思ったら何千字になっても意味がないと思っていて、レポートを書くのが一番面倒です(笑)。

        最下層を使ってゲームを書くのは時間がかかる割にコード量が多くQTを使うので非常に不便です。しかし、このゲームの開発を通じて、私はゲーム開発のプロセスを一通り経験し、ゲーム開発についてより深く理解することができました(心からの言葉ですが、決まり文句のように感じます)。 write では底の広さに気付かないでしょう (へへ)。

[前に書かれた、プロジェクトの欠陥] 

  • コリジョンボックス:コリジョンボックスの扱いが下手で衝突に問題があるため、マリオは無敵に設定されていますが、死亡アニメーションも書かれています。信じられないならSを押してください。
  • 処理処理:最初はインターフェース()すら書かなかったのですが、後から追加しました。しかし、死んだら再起動はありません、これは非常に簡単なようですが、書かれていません。合否チェックでは先生は何も言わず、結局一番下の層(イケメン)を書いたのは私だけでした。
  • 当時のトラブルを避けるために、ほとんどのパスは絶対パスを使用していたため、プロジェクトを実行する場合は、以下に示すように、パスを独自のパスに置き換える必要があります。

【プロジェクト運営】

        たぶん書く必要も無いと思います。↓←→しゃがむ動作と動作をそれぞれ制御します。Xジャンプ Z弾を発射 

        クール操作:SデスTアップグレード

【プロジェクトショー】

動画が再生できないのでGIFを貼っておきます。

 

 

 

 

 【QTの知識まとめ】

自分自身のために書いたものですが、このプロジェクトでは QT に関する知識の問題もいくつか発生しました。それらを整理してみましょう。

1. 強制型変換(親ローター)

TortoiseKing *M = Dynamic_cast<TortoiseKing*>(b);

 b は親クラスのインスタンスであり、TortoiseKing クラスはサブクラスです。

2. タイムスタンプを計算する

QDateTime::currentMSecsSinceEpoch();//13 桁、ミリ秒まで正確
QDateTime::currentSecsSinceEpoch();//10 桁、秒まで正確
long long int Level::calcTime()
{
//    计算当前的时间戳
    return QDateTime::currentMSecsSinceEpoch();
}

3. 画像の反転

pix = horFilp((pix.toImage());
QPixmap Level::horFilp(QImage image)
{
    image = image.mirrored(true, false);
    QPixmap pix1 =   QPixmap::fromImage(image);
    return pix1;

}

 上と同様に、左向きのものを右向きに、またはその逆に反転します。

4. 画像傍受

marioPix = QPixmap(s);
marioPix = marioPix.copy(x + j * mx, y + i * ny, width, heigh);
marioPix = marioPix.scaled(width*2.5,heigh*2.5);

 分析: 画像 s を marioPix に割り当てます。 copy (a, b, c, d) の機能は、marioPix の a と b の位置から画像を切り出し、c*d サイズの画像を切り取ることです。scaled(a,b)、幅と高さはそれぞれ a 倍と b 倍に拡大されます

1か月以上経ちましたが、まだ整理できていないものがいくつかあります。

【裏面に書き込みます】

QTは本当にゲーム作りには向いてないですね… 描画イベントは扱いにくいので描画イベントを1つしか書きませんでしたが、難しいのはグローバル変数の設定です。ただし、基礎となる実装は学生にとって非常に優れたものであるため、コースの結果はかなり良好です。上位3名!

【ソースコード】

リンク: https://pan.baidu.com/s/1fKZbTg6HQUNZAInXu-cFLw?pwd=qtnb 
抽出コード: qtnb

おすすめ

転載: blog.csdn.net/m0_59792745/article/details/125670499