Swiftのカジュアルブランク

画像



こんにちは、swift-eの兄弟。 私はこの鳥の言語を習得しなければなりませんでしたが、ぼろぼろのiPhoneで動作するソフトウェア製品を作ることを学ぶよりも良い方法はありません。 長い間、私は難しい数学的なパズルに悩まされていましたが、ここでもまた! そして突然。 提示されたコードはいくつかの場所ではおかしく見えますが、理解できます。 ゲームアルゴリズム自体については説明しませんが、111を3つに分割する方法を知らないローカルモデレーターにとっては複雑すぎますが、カジュアルゲーム開発者にとって便利な機能の例を次に示します。



ランダムネス



まず、すべてのゲームには、整数のランダムシーケンスの独自のジェネレーターが必要です。 繰り返しレイアウトなどを生成します。

Java、JS、Cのジェネレーターの関数のコードが同じに見える場合(結局、ゲームはすべての言語で書かれますか?)、Swiftでは、入力することでコードを何度もやり直す必要がありました。 2行ではなく、4行を取り始めました。



var holdrand = 0 func microsoft_rnd()->Int { var k = Int.multiplyWithOverflow(holdrand, 214013) k = Int.addWithOverflow(k.0, 2531011) holdrand = k.0 return Int((holdrand >> 16) & 0x7FFF) } func microsoft_rand(number:Int)->Int { return microsoft_rnd() % number }
      
      







そして、15年前にMSVCから引き裂かれたMixophotovセンサーのC番目のバージョンは次のようになりました。

 - (int)microsoft_rnd { holdrand = holdrand * 214013 + 2531011; return ((holdrand >> 16) & 0x7FFF); } - (int) microsoft_rand:(int) number{ return [self microsoft_rnd] % number; }
      
      







ご覧のとおり、Swiftはオーバーフローに対して非常に厳格であり、開発者に頭痛の種を追加しますが、ランタイムユーザーのストレスを軽減するようです。 同時に、Obj-Cはストレスや頭痛もなく完璧に機能しました。



だからここ。 holdrand変数を定義します(holdrand = 25など)。パズルのすべてのバリエーションで、条件付きレベル25のレイアウトを明らかに繰り返します。サーバーで再生するためにPHPで記述されているか、iPhoneで再生するためにSwiftで記述されています。 これは、プレイヤーに兄弟愛の感覚を与えます-彼らはすべてオフラインですが、同時に同じレイアウトで不在で競います。 ブリッジトーナメントのように聞こえます。 ところで、私は長い間ブリッジをプレイしていません。



練習に移りましょう。 Xcodeを使用して簡単なSwiftプロジェクトを作成しましょう。 File-> New-> Project ...-> Single View Applicationボタンをクリックして 、完成したドラフトプロジェクトを取得します。AppDelegate.swiftのメインクラスは驚くほどシンプルに見えます



 import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. } }
      
      







Obj-Cから何が変わったのですか? まず、2つのファイルの代わりに、1つになりました。 これを承認します。

さらに、テキストに奇妙な「?」文字が表示されました。 および「!」。 心配しないでください。変数x:Float!の場合、これらは変数の型の兆候です。 -次にx:Floatの場合、正確にFloat? -作成者は、この変数が常にFloatであるかどうかはわかりません。



正直なところ、Xcode自体が必要に応じてこれらの文字を置き換え、4時間のコーディングの後、ばかげた文字を使用するロジックを理解し始めます。



広告



では、ゲーム開発者にとって2番目に必要なものは何ですか? もちろん、広告。 追加する必要があるのは、このクラスAppDelegateです。 Swiftを使用してGoogleMobileAdsの最新バージョンをダウンロードし、プロジェクトに追加して、いくつかの機能を記述します



 import UIKit import GoogleMobileAds @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var bannerView: GADBannerView! var iPhone5 = true func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { startAds() return true } func startAds() { bannerView = GADBannerView(adSize: kGADAdSizeBanner) print("Google Mobile Ads SDK version: " + GADRequest.sdkVersion()) bannerView.adUnitID = yourAdMobID bannerView.rootViewController = self.window?.rootViewController let adViewHeight = bannerView.frame.size.height print("adViewHeight: \(adViewHeight)") let screenSize: CGRect = UIScreen.mainScreen().bounds let screenHeight = screenSize.height bannerView.frame.origin = CGPointMake(0, screenHeight - adViewHeight) let request = GADRequest() request.testDevices = [kGADSimulatorID ] self.window?.rootViewController!.view.addSubview(bannerView) bannerView.loadRequest(request) //    ,  2    iPhone5 = screenHeight >= heightOfScreenOfiPhone5AndMoreInLogicalPixels } func bringAdsToFront() { self.window?.rootViewController!.view.bringSubviewToFront(bannerView) } }
      
      







startAds()呼び出しは、メイン関数の本体に現れました。

bringAdsToFront()関数は実際には必要ありませんが、広告ウィンドウが表示されたときにオーバーラップする非標準のViewControllerを使用すると便利な場合があります。 この場合、このプロシージャを呼び出すことにより、バナーをすべてのビューにプルする必要があります。



iOSの2つのアスペクト比は有効ですが、iPhone5変数は空気のように非常に必要です。 人口の5%がまだ4台のiPhoneを使用していることを思い出してください。その割合はすべての最新モデルとは異なります。 さらに、アプリケーションがiPhoneのみである場合、iPadで起動すると、古い320 x 480ピクセルモードに戻ります。



なぜこのようなバナーを配置するのですか? 私は電話を片手で地下鉄をプレイするアプリケーションを持っているので、彼のために動作モード- ポートレートは永遠に定義されています。 そして、画面の下に320x50の広告を下げて、収益を2倍にします。 記事の公開時点で、私はすでに40 USセントを稼いでいました。



基本的に、Swiftでプログラミングすることを学びました。





最も原始的であっても、ゲームには他に何が必要ですか? ムーの音。



2つの関数と1つのクラスを追加します。



 import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var soundLib: SoundController? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { soundLib = SoundController.init() } func setVolume(v:Double) { soundLib?.setVolume(v*v) } func playSound(i:Int) { soundLib?.playSound(i) } }
      
      







さらに、Googleから取得した12個のmp3ファイルとcafファイルをプロジェクトに追加し、別のファイルにSoundControllerクラスを作成します

SoundController.swift
 // Created by Vadim Bashurov on 3/19/16. // import UIKit import AVFoundation class SoundController { let audioFiles: [String: String] = [ "Ashley_glad_1": "caf", "star_first": "caf", "star_third": "caf", "bouncer":"caf", "bird shot-a3":"mp3", "ball_bounce":"mp3", "bird_a4":"mp3", "HittingBasketBoard":"mp3", "piglette_a1":"mp3", ] var players : [AVAudioPlayer] = [] var volume = 0.0 init () { for (name, ext) in audioFiles { let a1 = self.setupAudioPlayerWithFile(name, type:ext) players.append(a1!) } } func setVolume(v:Double) { volume = v for audioPlayer in players { audioPlayer.volume = Float(volume) } } func playSound(i:Int) { let audioPlayer = players[i] audioPlayer.play() } func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer? { let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String) let url = NSURL.fileURLWithPath(path!) var audioPlayer:AVAudioPlayer? do { try audioPlayer = AVAudioPlayer(contentsOfURL: url) audioPlayer!.prepareToPlay() } catch { print("Player not available") } return audioPlayer } }
      
      









もちろん、iOSの4つのオーディオ再生オプションすべてを調べました。 システムサウンドはプログラムで再生レベルを制御しないため、ゲーム開発には適していません。 SwiftのOALライブラリのAudioServiceは、十分な知識と時間ではなく、私によって書き換えられていません。 AudioQueryの速度が低下します。 将来的には、 プリロード機能にもかかわらず、プログラムの起動時にAVAudioPlayerが遅れるため、Obj-Cライブラリからブリッジをスローします。



そして、デザートにはジャンパー!



ジャンパー





妖精の世界の本物のオブジェクトのように、すべての碑文ボタンと写真が画面に表示されます。 影とジャークから飛び出すか、飛び出します。 iOS 8以降、Appleはアニメーションをバウンスするための左側の機能を提案しています。



ここに例があります

  UIView.animateWithDuration(1.2, delay: 0.1, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: { box1.center = CGPointMake(box2.center.x,box2.center.y) }, completion: {finished in self.showFingers() })
      
      







関数の動作の結果、ボックス1はボックス2に落ちます(これは私のパズルのプロットです)だけでなく、おかしいジャンプで落ち着きます。

ジャンプの物理は、3つのパラメーター(プロセス全体の時間)によって変化させることができます。私のテキストでは1.2秒です。2番目のパラメーターは、落下開始までの遅延(遅延:0.1)は、バウンスにまったく影響しません。

ただし、3および4パラメーターの値は0〜1であり、ジャンプの品質を決定します。 それらを1に設定すると、リバウンドはありません。 ゼロの場合、ボックスは枝のシラミのようにジャンプします。



自分で実験してください。このアクティビティはとても楽しいです。



これで、Swiftで簡単な小さなゲームを書いて、ビールで数ドル稼ぐ準備ができました。

チャオ!



All Articles