Bu proje, bir eylem tarafından tetiklenen birden fazla farklı Scene Graph bileşeni kullanır. Bu, bir olay tarafından tetiklenen eylemleri içerir:
Bir örgüyü dönüştürme
Örgünün görünürlüğünü açma/kapatma
Işıkları açma veya kapatma
Örneğin, yukarıdaki görselde bulunan tüm küre ışıkları, triggerable_light_component adlı bir bileşene sahip olan Scene Graph varlıklarıdır. Bu bileşen, tetiklenebilir arayüzü uygulayan bir bileşen sınıfıdır. Oyuncu farklı beyaz platformlara bastığında farklı varlık kombinasyonları tetiklenir.
Birbiriyle ilişkisiz objeler veya eylemler arasındaki ortak fonksiyonları tanımlamak için Verse arayüzlerini kullanabilirsin. Bu örnekte ortak fonksiyon bir eylemi tetiklemektir, ilişkisiz objeler veya eylemler ise örgü görünürlüğü, örgü dönüşümü ve ışıkları açma veya kapatmadır.
Bu sayfada kullanılan Verse dili özellikleri hakkında daha fazla bilgi için bkz.:
Tetiklenebilir arayüzü tanımlama
Öncelikle yeni bir boş Verse dosyası oluşturup Triggerable.verse olarak adlandır. Tetiklenebilir arayüzü tanımlayacaksın. Arayüzlerle varsayılan fonksiyon ve alan değerlerini tanımlayabilir veya tanımlama ve uygulamayı alt sınıflara bırakabilirsin. Daha sonra tetiklenebilir arayüzden devralan bir bileşene sahip Scene Graph varlığının tetiklenip tetiklenmediğini belirtmek için kullanılan bir olay tanımlayacaksın.
Bu dosya, çeşitli arayüz alanlarında
@editableözniteliğini kullanır. Bunu yapmak için /Verse.org/Simulation modülünü ekle:Verseusing { /Verse.org/Simulation }Verse’te arayüzler, alt sınıfların uyguladığı bir eylemi tanımladıkları için sıfattır.
triggerableadlı yeni bir arayüz oluştur:Versetriggerable<public> := interface:Tetiklenebilir bir objenin tetiklenip tetiklenmediğini (örneğin bir ışığın açık veya kapalı olup olmadığını ya da bir örgünün görünür ya da görünmez olduğunu) takip etmek isteyebilirsin. Bir eylemi yalnızca bir kez tetiklemek isteyebilirsin. Bunları takip etmek için aşağıdaki mantık alanlarını
tetiklenebilirarayüzüne ekle:Versevar<protected> Triggered<public>:logic @editable OnlyTriggerOnce<protected>:logic = false var<protected> HasBeenTriggered<protected>:logic = falseTetiklenebilir objeler, bu eğitimin ilerleyen kısımlarında oluşturulan bulmacalarda parça olarak kullanılır. Ayrıca, tetiklenebilir objeleri bir eylem tarafından tetiklenen bir bulmacada, parçaların bulmaca parçası gibi davrandığı ancak tetiklenmiş durumlarının bulmacanın çözülmesine katkıda bulunmadığı veya bulmacanın çözülmesinden bir şey eksiltmediği decoy parçaları olarak kullanmak isteyebilirsin. Bu tetiklenebilir objenin bir bulmaca parçası olup olmadığını takip etmek için bir
PuzzlePiecemantık alanı ekle.Verse@editable PuzzlePiece:logic = falseDaha da fazla esneklik adına, bulmacanın çözülmüş kabul edilmesi için bazı ışıkların açık, bazılarının ise kapalı olduğu bir bulmaca da isteyebilirsin. Bu tetiklenebilir obje bulmaca parçasının tetiklenmiş veya tetiklenmemiş olması hâlinde çözülmüş olarak kabul edilip edilmeyeceğini belirtmek için bir
SolvedStateTriggeredmantık alanı ekle.Verse@editable SolvedStateTriggered:logic = trueÜç fonksiyon bildir:
PerformAction,PerformReverseActionvePostTrigger.triggerablebir arayüz olduğundan ve arayüz bu fonksiyonlar için temel bir uygulama sağlamadığından herhangi birtriggerablealt sınıfının bu fonksiyonlar için kendi uygulamasını sağlaması gerekir.Verse# Action performed when transitioning from not triggered to triggered state PerformAction():void # Action performed when transitioning from triggered to not triggered state PerformReverseAction():void # Action performed after PerformAction or PerformReverseAction is called PostTrigger():voidÜç ek fonksiyon tanımla:
Trigger,InSolvedStateveSetInitialTriggeredState. Bu üç fonksiyonun tümü,tetiklenebilirarayüzde sağlanan temel bir uygulamaya sahiptir.Tetikleyicibu arayüzü uygulayan bileşen için eylemi tetikler,InSolvedStatebileşenin çözülmüş tetiklenmiş durumda olup olmadığına karar verir veSetInitialTriggeredStateoyun başladıktan sonra bir bileşenin ilk tetiklenmiş durumunun ne olacağını belirler.Verse# Trigger the appropriate action Trigger():void = if: (OnlyTriggerOnce? and not HasBeenTriggeredOnce?) or (not OnlyTriggerOnce?) then: if (Triggered?): PerformReverseAction() else: PerformAction() PostTrigger()
Tetiklenmiş Olayı Tanımlama
Bu bulmaca projesi aynı zamanda bir örgüyü dönüştürmek veya bir ışığı açıp kapatmak gibi eylemleri tetiklemek için Scene Graph hiyerarşisinin yukarısına veya aşağısına olaylar göndermek üzere sahne olaylarını kullanır. Bu örnekte, tetiklenebilir bir obje tetiklendiğinde Scene Graph hiyerarşisinde yukarı gönderilen triggered_event adlı bir olay tanımlıyoruz. Bu olay, bir bulmacanın çözülüp çözülmediğini belirlemek için bir Scene Graph bileşeni tarafından işlenir.
Sahne olayları için Scene Graph API’si gerekir. Scene Graph API’sini kullanmak için /Verse.org/SceneGraph modülünü ekle:
Verseusing { /Verse.org/SceneGraph }triggered_event adlı bir sahne olayı ekle:
Versetriggered_event<public> := class(scene_event):Bu olaya, birincisi isteğe bağlı olarak tetiklenen varlığı gösteren, ikincisi ise bu varlığın tetiklenip tetiklenmediğini gösteren bir mantık olan iki alan ekle:
VerseTriggeredEntity:?entity = false Triggered:logic = false
Sonraki Adımlar
Bundan sonra, bir bulmacayı yönetmek ve sorunun ne zaman çözüldüğünü belirlemek için bulmaca bileşenini oluşturacaksın.
Triggerable.verse İçin Nihai Kod
<#
Interface for triggering an action on a component.
Any component that you want to be triggered when the touch_component has it's Touch function called
must implement this interface.
#>
using { /Verse.org/Simulation }
OnlyTriggerOnceToolTip<public><localizes>:message="Whether this triggerable component should only ever be triggered once."
SolvedStateTriggeredToolTip<public><localizes>:message="Whether this puzzle pieces solved state is the triggered state. Note: Only relevant if PuzzlePiece is set to true."
PuzzlePieceToolTip<public><localizes>:message="Whether this entity is part of a puzzle solution."