Xamarin. Mac 'te OpenTK 'ye giriş
OpenTK (açık araç seti), OpenGL, OpenCL ve OpenAL ile çalışmayı kolaylaştıran gelişmiş, alt düzey bir C# kitaplığıdır. OpenTK, Oyunlar, bilimsel uygulamalar veya 3B grafikler, ses veya hesaplama işlevselliği gerektiren diğer projeler için kullanılabilir. Bu makalede, bir Xamarin. Mac uygulamasında OpenTK kullanmaya yönelik kısa bir giriş sunulmaktadır.
Bu makalede, bir Xamarin. Mac uygulamasında OpenTK 'nin temel bilgileri ele alınacaktır. Bu makalede kullanacağımız temel kavramları ve teknikleri kapsadığından, ilk olarak Hello, Mac makalesi, özellikle de xcode ve Interface Builder ve diğer ve eylemler bölümlerine giriş yapmanız önerilir.
Exposing C# classes / methods to Objective-CExposing C# classes / methods to Objective-C belgesinin bölümüne de göz atmak Isteyebilirsiniz, RegisterExport C# sınıflarınızı Objective-C nesneler ve Kullanıcı Arabirimi öğelerine bağlamak için kullanılan ve komutlarını açıklamaktadır.
OpenTK hakkında
Yukarıda belirtildiği gibi, OpenTK (açık araç seti), OpenGL, OpenCL ve OpenAL ile çalışmayı kolaylaştıran gelişmiş, alt düzey bir C# kitaplığıdır. Xamarin. Mac uygulamasında OpenTK 'nin kullanılması aşağıdaki özellikleri sağlar:
- Hızlı geliştirme -opentk, kodlama iş akışınızı geliştirmek ve hataları daha kolay ve daha çabuk yakalamak için güçlü veri türleri ve satır içi belgeler sağlar.
- Kolay tümleştirme -opentk, .NET uygulamalarıyla kolayca tümleştirilecek şekilde tasarlanmıştır.
- Izin veren lisans -OPENTK, MIT/X11 lisansları kapsamında dağıtılır ve tamamen ücretsizdir.
- Zengin, Type-Safe bağlamaları -opentk, otomatik Uzantı yükleme, hata denetimi ve satır içi belgeleri olan OpenGL, OpenGL | ES, OpenAL ve OpenCL 'nin en son sürümlerini destekler.
- Esnek GUI seçenekleri -opentk, Oyunlar ve Xamarin. Mac için özel olarak tasarlanan yerel ve yüksek performanslı oyun penceresi sağlar.
- Tam olarak yönetilen, CLS-Compliant Code -opentk, yönetilmeyen kitaplıklar olmadan macos 32-bit ve 64 bit sürümlerini destekler.
- 3B matematik araç seti Opentk ,
Matrix,QuaternionveBezierözelliklerini 3B matematik araç seti aracılığıyla sağlar.
OpenTK, Oyunlar, bilimsel uygulamalar veya 3B grafikler, ses veya hesaplama işlevselliği gerektiren diğer projeler için kullanılabilir.
Daha fazla bilgi için lütfen Açık araç seti Web sitesine bakın.
OpenTK hızlı başlangıç
Bir Xamarin. Mac uygulamasında OpenTK kullanmaya hızlı bir giriş olarak, oyun görünümü açan basit bir uygulama oluşturacağız, bu görünümde basit bir üçgen çizer ve Kullanıcı üçgenini görüntülemek için oyunun görünümünü Mac uygulamasının ana penceresine ekleyeceğiz.
Yeni bir Project başlatılıyor
Mac için Visual Studio başlatın ve yeni bir Xamarin. Mac çözümü oluşturun. MacuygulamasıgenelCocoa uygulamasınıseçin:
MacOpenTKMacOpenTKiçin girin:
Yeni projeyi derlemek için Oluştur düğmesine tıklayın.
OpenTK dahil
Xamarin. Mac uygulamasında açık TK 'yi kullanabilmeniz için, OpenTK derlemesine bir başvuru eklemeniz gerekir. Çözüm Gezgini, Başvurular klasörüne sağ tıklayın ve başvuruları Düzenle...seçeneğini belirleyin.
Bir denetim yerleştirip OpenTKOpenTK düğmesine tıklayın:
OpenTK kullanma
Yeni proje oluşturulduğunda, öğesini MainWindow.cs düzenlenmek üzere açmak için MainWindow.cs dosyayı çift tıklatın. MainWindowSınıfın aşağıdaki gibi görünmesini sağlayın:
using System;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Platform.MacOS;
using Foundation;
using AppKit;
using CoreGraphics;
namespace MacOpenTK
{
public partial class MainWindow : NSWindow
{
#region Computed Properties
public MonoMacGameView Game { get; set; }
#endregion
#region Constructors
public MainWindow (IntPtr handle) : base (handle)
{
}
[Export ("initWithCoder:")]
public MainWindow (NSCoder coder) : base (coder)
{
}
#endregion
#region Override Methods
public override void AwakeFromNib ()
{
base.AwakeFromNib ();
// Create new Game View and replace the window content with it
Game = new MonoMacGameView(ContentView.Frame);
ContentView = Game;
// Wire-up any required Game events
Game.Load += (sender, e) =>
{
// TODO: Initialize settings, load textures and sounds here
};
Game.Resize += (sender, e) =>
{
// Adjust the GL view to be the same size as the window
GL.Viewport(0, 0, Game.Size.Width, Game.Size.Height);
};
Game.UpdateFrame += (sender, e) =>
{
// TODO: Add any game logic or physics
};
Game.RenderFrame += (sender, e) =>
{
// Setup buffer
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(MatrixMode.Projection);
// Draw a simple triangle
GL.LoadIdentity();
GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 4.0);
GL.Begin(BeginMode.Triangles);
GL.Color3(Color.MidnightBlue);
GL.Vertex2(-1.0f, 1.0f);
GL.Color3(Color.SpringGreen);
GL.Vertex2(0.0f, -1.0f);
GL.Color3(Color.Ivory);
GL.Vertex2(1.0f, 1.0f);
GL.End();
};
// Run the game at 60 updates per second
Game.Run(60.0);
}
#endregion
}
}
Şimdi bu kodun ayrıntılarını aşağıda bulabilirsiniz.
Gerekli API 'Ler
Bir Xamarin. Mac sınıfında OpenTK 'yi kullanmak için çeşitli başvurular gereklidir. Tanımın başlangıcında aşağıdaki using deyimleri ekledik:
using System;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Platform.MacOS;
using Foundation;
using CoreGraphics;
Bu minimum küme, OpenTK kullanan herhangi bir sınıf için gerekli olacaktır.
Oyun görünümü ekleme
Ardından, OpenTK ile etkileşimimizi içeren bir oyun görünümü oluşturmamız ve sonuçları görüntüliyoruz. Aşağıdaki kodu kullandık:
public MonoMacGameView Game { get; set; }
...
// Create new Game View and replace the window content with it
Game = new MonoMacGameView(ContentView.Frame);
ContentView = Game;
Burada, oyun görünümünü ana Mac penceremiz ile aynı boyutta yaptık ve pencerenin Içerik görünümünü yeni olarak değiştirdik MonoMacGameView . varolan pencere içeriğini değiştirdiğimiz için, ana Windows yeniden boyutlandırılırken verdiğimiz görünümümüzde otomatik olarak yeniden boyutlandırılacağız.
Olaylara yanıt verme
Her oyun görünümünün yanıtlaması gereken birkaç varsayılan olay vardır. Bu bölümde, gereken ana olaylar ele alınacaktır.
Yükleme olayı
LoadOlay, resimler, dokular veya müzikler gibi diskten kaynak yükleme yerdir. Basit, test uygulamamız için olayı kullanmıyoruz Load , ancak buna başvuru için dahil edilmiştir:
Game.Load += (sender, e) =>
{
// TODO: Initialize settings, load textures and sounds here
};
Yeniden boyutlandırma olayı
ResizeHer oyun görünümü yeniden boyutlandırılırken olay çağrılmalıdır. Örnek uygulamamız için, GL Görünüm penceresini oyun Görünümümüzle aynı boyutta hale getirdik (Mac ana penceresi tarafından otomatik olarak yeniden boyutlandırılır) ve aşağıdaki kodla birlikte verilmiştir:
Game.Resize += (sender, e) =>
{
// Adjust the GL view to be the same size as the window
GL.Viewport(0, 0, Game.Size.Width, Game.Size.Height);
};
UpdateFrame olayı
UpdateFrameOlay, Kullanıcı girişini işlemek, nesne konumlarını güncelleştirmek, fizik veya AI hesaplamalarını çalıştırmak için kullanılır. Basit, test uygulamamız için olayı kullanmıyoruz UpdateFrame , ancak buna başvuru için dahil edilmiştir:
Game.UpdateFrame += (sender, e) =>
{
// TODO: Add any game logic or physics
};
Önemli
OpenTK 'nin Xamarin. Mac uygulamasını içermez Input API , bu nedenle klavye ve fare desteği eklemek Için Apple tarafından sunulan API 'leri kullanmanız gerekir. İsteğe bağlı olarak, özel bir örneği oluşturabilir MonoMacGameView ve KeyDown ve yöntemlerini geçersiz kılabilirsiniz KeyUp .
RenderFrame olayı
RenderFrameOlay, grafiklerinizi (çizmek) oluşturmak için kullanılan kodu içerir. Örnek uygulamamız için oyun görünümünü basit bir üçgenle dolduruyoruz:
Game.RenderFrame += (sender, e) =>
{
// Setup buffer
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(MatrixMode.Projection);
// Draw a simple triangle
GL.LoadIdentity();
GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 4.0);
GL.Begin(BeginMode.Triangles);
GL.Color3(Color.MidnightBlue);
GL.Vertex2(-1.0f, 1.0f);
GL.Color3(Color.SpringGreen);
GL.Vertex2(0.0f, -1.0f);
GL.Color3(Color.Ivory);
GL.Vertex2(1.0f, 1.0f);
GL.End();
};
Genellikle işleme kodu, GL.Clear Yeni öğeleri çizmeden önce varolan tüm öğeleri kaldırmak için öğesine yapılan bir çağrı ile yapılır.
Önemli
OpenTK 'nin Xamarin. Mac sürümü için, MonoMacGameView oluşturma kodunuzun sonunda örneğinizin yöntemini çağırmayın. Bunun yapılması, oyun görünümünün işlenmiş görünümünüzü görüntülemek yerine hızla hızla çalışmasına neden olur.
Oyun görünümünü çalıştırma
Uygulamamızın ana Mac penceresine eklenmiş tüm gerekli olaylar tanımlanır ve oyun görünümü, oyun görünümünü çalıştırmak ve grafiklerimizi görüntülemek için okuuyoruz. Aşağıdaki kodu kullanın:
// Run the game at 60 updates per second
Game.Run(60.0);
Oyun görünümünün ' de güncelleştirilmesini istediğimizi istediğiniz kare hızına geçiririz. bizim örneğimizde 60 kare/saniye (normal TV ile aynı yenileme hızı) seçilir.
Uygulamamızı çalıştırıp çıktıyı görelim:
Penceremizi yeniden boyutlandırdık oyun görünümü de yer alır ve üçgenin de gerçek zamanlı olarak yeniden boyutlandırılacağını ve güncelleştirilmesini sağlayabilirsiniz.
Nereden Ileri?
Bir Xamarin. Mac uygulamasında OpenTk ile çalışmanın temelleri tamamlandığında, daha sonra denemeye yönelik bazı öneriler aşağıda verilmiştir:
- Ve olayları içindeki oyun görünümünün arka plan rengini ve üçgenin rengini değiştirmeyi deneyin
LoadRenderFrame. - Kullanıcı
UpdateFrameve olaylardaki bir tuşa bastığınızdaRenderFrameveya kendi özelMonoMacGameViewsınıfınızı, ve yöntemlerini geçersiz kıldığınızda üçgenKeyUpdeğişiklik rengini yapınKeyDown. - Olaydaki duyarlı anahtarları kullanarak üçgenin ekranda hareket etmelerini sağlayın
UpdateFrame. İpucu: yöntemini kullanarakMatrix4.CreateTranslationbir çeviri matrisi oluşturun veGL.LoadMatrixolaya yüklemek için yöntemini çağırınRenderFrame. forOlayda çeşitli üçgenler işlemek için bir döngü kullanınRenderFrame.- 3B alanda üçgenin farklı bir görünümünü vermek için kamerayı döndürün. İpucu: yöntemini kullanarak
Matrix4.CreateTranslationbir çeviri matrisi oluşturun veGL.LoadMatrixyükleme yöntemini çağırın.Vector2Vector3Vector4Matrix4Kamera düzenlemeleri için, ve sınıflarını da kullanabilirsiniz.
daha fazla örnek için lütfen opentk örneklerine GitHub depoya bakın. OpenTK kullanma örneklerinin resmi bir listesini içerir. Bu örnekleri OpenTK 'nin Xamarin. Mac sürümü ile birlikte kullanmak için uyarlamanız gerekir.
OpenTK uygulamasının daha karmaşık bir Xamarin. Mac örneği için lütfen Monomacgameview örneğimize bakın.
Özet
Bu makale, Xamarin. Mac uygulamasında OpenTK ile çalışmaya hızlı bir bakış gerçekleştirmiştir. Bir oyun penceresi oluşturmayı, oyun penceresini bir Mac penceresine eklemeyi ve oyun penceresinde basit bir şeklin nasıl işleneceğini gördük.



