Meine Funktion
Delphi-Quellcode:
function TSkinSpriteContainer.XXX(ObjID, X, Y: Integer): Integer;
var
Item: Integer;
Angle: Single;
Value: single;
Width, Height: Integer;
Frames: Integer;
function ValueFromAngle(Angle: single): single;
var
RelativeAngle: single;
begin
RelativeAngle := Angle - KNOB_OFFSET_ANGLE;
if RelativeAngle < 0 then
RelativeAngle := RelativeAngle + 2 * pi;
Result := (RelativeAngle) / KNOB_ANGLE_RANGE;
if Result > 1.0 then
begin
if RelativeAngle < 0.5 * KNOB_ANGLE_RANGE + pi then
Result := 1
else
Result := 0;
end;
end;
begin
Result := 0;
Item := gItemFromID(ObjID);
if (Item > -1) then
begin
Frames := g_Obj[Item].x2 div g_Obj[Item].y2;
Height := g_Obj[Item].y2;
Width := g_Obj[Item].x2 div Frames;
X := x - g_Obj[Item].x1;
Y := Y - g_Obj[Item].y1;
Angle := arctan2(Y - (Height div 2), X - (Width div 2));
Value := ValueFromAngle(Angle) * 360;
Result := round(Value);
OutputDebugStringW(PWideChar(IntToStr(Result)));
end;
end;
Mein Problem ist dies, wenn ich in die untere Hälfte des Knob klicke ist die Value 0
klicke ich in die obere hälfte ist sie 180.
Was ich aber erreichen möchte ist das sie oben bei 0 anfängt egal wo ich im Knob klicke.
Wenn ich nach rechts drehe soll sie inkrementieren und nach links von 360 ab dekrementieren.
Bekomme das im Moment nicht gebacken was läuft bei meiner Berechnung falsch?
Delphi-Quellcode:
KNOB_GAP = 45 * pi / 180;
KNOB_ANGLE_RANGE = 2 * pi - KNOB_GAP;
KNOB_OFFSET_ANGLE = 0.5 * pi + 0.5 * KNOB_GAP;
gruss