Moin,
ich steh momentan vor einem mMn eigenartigem Problem.
Ich möchte nämlich das OnMouseEnter bzw. OnMouseLeave Event bei meinen Buttons implementieren.
Laut meinem Visual Studio scheint es diese Events / Methoden nicht zu geben, laut der Dokumentation allerdings schon.
Dort ist es aber als "Overridden from SWidget" beschrieben.
Wie bring ich das ganze nun zusammen ?
Versuch ich das zu Implementieren haut er mit raus, das SWidget nicht zu FArgument gehört - durchaus verständlich.
Ich glaub aber irgendwie schon, das es eine Möglichkeit gibt das zu verbinden - nur wie hoffe ich irgendwie durch euch zu erfahren.
Sonst muss ich wieder Stunden rum experimentieren, das möchte ich dann doch irgendwo vermeiden
//Edit: Hab's lösen können und zwar wie folgt:
Die Buttons habe ich via SAssignNew SButton Variablen zugewiesen und das ganze im Tick abgefangen und dort Funktionen zugewiesen.
Im Header:
// Deklaration
void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime);
void OnMouseEnterOption();
void OnMouseLeaveOption();
struct Buttons
{
TSharedPtr<SButton> Option;
bool OptionHover = false;
};
Alles anzeigen
In der CPP
// Deklaration
SLemonadeUI::Buttons MenuButtons;
// Buttonlayout
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(FMargin(0.0f, 10.0f, 0.0f, 0.0f))
[
SAssignNew(MenuButtons.Option, SButton)
.Cursor(EMouseCursor::Hand)
.HAlign(EHorizontalAlignment::HAlign_Center)
.VAlign(EVerticalAlignment::VAlign_Center)
.OnClicked(this, &SLemonadeUI::OptionClicked)
[
SNew(STextBlock)
.Text(FText::FromString("Optionen"))
.Font(FSlateFontInfo(FPaths::GameContentDir() / TEXT("Main/PIECES_OF_EIGHT.TTF"), 30))
]
]
// Tick Funktion
void SLemonadeUI::Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime)
{
if (MenuButtons.Option->IsHovered())
{
if (MenuButtons.OptionHover == false)
{
SLemonadeUI::OnMouseEnterOption();
MenuButtons.OptionHover = true;
return;
}
}
else
{
if (MenuButtons.OptionHover == true)
{
SLemonadeUI::OnMouseLeaveOption();
MenuButtons.OptionHover = false;
return;
}
}
}
// "Callbacks / Events"
void SLemonadeUI::OnMouseEnterOption()
{
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 3.f, FColor::Yellow, TEXT("Entered Option Button"));
}
}
void SLemonadeUI::OnMouseLeaveOption()
{
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 3.f, FColor::Yellow, TEXT("Left Option Button"));
}
}
Alles anzeigen
Ich hab einiges in eine Struktur gepackt, ich finde das so angenehmer, da hat man gleich alles auf einem Fleck