问题描述
我重新编辑类,例如。
我正在尝试使用我的create类将“广告位”放入窗口中的表中。
我收到一个错误的Slot,因此我删除了将要转到错误位置的库存。
如果我不使用表格,只需在窗口中添加“库存广告位”,它就可以转到正确的位置。
为什么??请帮助我解决问题!
abstract class DragAndDrop(x:Float,y:Float,stage: Stage) : BaseActor(x,y,stage) {
companion object{
private val TAG = DragAndDrop::class.java.simpleName
val dropArray = GdxArray<DropArea>()
}
//val self = this
private var grabOffsetX = 0f
private var grabOffsetY = 0f
private var startPositionX = 0f
private var startPositionY = 0f
var dropTarget: DropTarget? = null
var draggable = true
val duration = 0.25f
private lateinit var listener: ClickListener
init {
listener = object : ClickListener() {
override fun touchDown(event: InputEvent,x: Float,y: Float,pointer: Int,button: Int): Boolean {
if (!this@DragAndDrop.draggable) return false
toFront()
grabOffsetX = x
grabOffsetY = y
startPositionX = this@DragAndDrop.x
startPositionY = this@DragAndDrop.y
Actions.scaleto(1.5f,1.5f,duration)
onDragStart()
return true
}
override fun touchDragged(event: InputEvent,pointer: Int) {
val deltaX = x - grabOffsetX
val deltaY = y - grabOffsetY
/*
if (rotation != 0f) {
deltaX = Gdx.input.x.toFloat() - width / 2
deltaY = Gdx.graphics.height.toFloat() - Gdx.input.y.toFloat() - height / 2
addAction(Actions.moveto(deltaX,deltaY,0.1f,Interpolation.pow3))
} else moveBy(deltaX,deltaY)
*/
moveBy(deltaX,deltaY)
}
override fun touchUp(event: InputEvent,button: Int) {
this@DragAndDrop.dropTarget= null
// keep track of distance to closest object
var closetdistance = Float.MAX_VALUE
for (dropArea in dropArray) {
Gdx.app.log(TAG,"name:${dropArea.customBackgroundDecal} \t dropTarget:${Vector2(dropArea.x,dropArea.y)}\t")
//val target = dropTarget as DropTarget
if (dropArea.targetable && this@DragAndDrop.overlaps(dropArea)) {
val currentdistance = Vector2.dst(this@DragAndDrop.x,this@DragAndDrop.y,dropArea.x,dropArea.y)
// check if this target is even closer
if (currentdistance < closetdistance) {
this@DragAndDrop.dropTarget = dropArea
closetdistance = currentdistance
}
}
}
addAction(Actions.scaleto(1.0f,1.0f,duration))
val area = this@DragAndDrop.dropTarget ?:return
area as DropArea
Gdx.app.log(TAG,"dropTarget:${area.customBackgroundDecal}\t")
onDrop()
}
}
addListener(listener)
}
fun movetoActor(other : BaseActor){
val duration = 0.5f
val x = other.x + (other.width - this.width) /2
val y = other.y + (other.height - this.height) /2
addAction(Actions.moveto(x,duration,Interpolation.pow3))
}
fun movetoStart(){
val duration = 0.5f
addAction(Actions.moveto(startPositionX,startPositionY,Interpolation.pow3))
}
open fun onDragStart(){}
open fun onDrop(){}
override fun act(delta: Float) {
super.act(delta)
setPosition(x,y)
}
}
class DropArea(
x:Float,stage: Stage,private var filterItemType: Int = 0,var customBackgroundDecal:TextureAtlas.AtlasRegion = Utility.ITEMS_TEXTURE_ATLAS.findRegion("empty")
):DropTarget(x,y,stage){
companion object{
private val TAG = DropArea::class.java.simpleName
}
private val stack = Stack()
private var _numItemsVal : Int = 0
private val _numItemsLabel : Label = Label(_numItemsVal.toString(),Utility.STATUS_UI_SKIN,"inventory-item-count")
val image = loadAtlasRegion(customBackgroundDecal)
private val boarder = Image(NinePatch(Utility.STATUS_UI_TEXTURE_ATLAS.createPatch("dialog")))
init {
_numItemsLabel.apply {
setFillParent(true)
setAlignment(Align.bottomright)
setFontScale(1.5f)
isVisible = true
}
stack.apply {
setFillParent(true)
add(boarder)
add(_numItemsLabel)
}
stack.toBack()
addActor(stack)
setSize(width,height)
setBoundaryRectangle()
DragAndDrop.dropArray.add(this)
}
override fun act(delta: Float) {
super.act(delta)
setPosition(x,y)
}
}
class InventoryUI(x:Float,stage) {
companion object{
private val TAG = InventoryUI::class.java.simpleName
private const val slotWidth : Float = 52f
private const val slotHeight : Float = 52f
}
private val numSlots : Int = 50
private val rowSlots : Int = 5
private val colSlots : Int = 10
private val lengthSlotRow : Int = 10
private val playerSlotsTable : Table = Table()
private val inventorySlotsTable : Table = Table()
private val equipSlotsTable : Table = Table()
var window : Window = Window("Dialog",STATUS_UI_SKIN,"solidbackground")
private var headSlot : DropArea = DropArea(450f,0f,stage,DropItem.ItemUseType.ARMOR_HELMET.itemUseType,Utility.ITEMS_TEXTURE_ATLAS.findRegion("inv_helmet"))
private var leftArmSlot : DropArea = DropArea(0f,DropItem.ItemUseType.WEAPON_ONE_HAND.itemUseType or
DropItem.ItemUseType.WEAPON_TWO_HAND.itemUseType or
DropItem.ItemUseType.ARMOR_SHIELD.itemUseType or
DropItem.ItemUseType.WAND_ONE_HAND.itemUseType or
DropItem.ItemUseType.WAND_TWO_HAND.itemUseType,Utility.ITEMS_TEXTURE_ATLAS.findRegion("inv_weapon"))
private var rightArmSlot : DropArea = DropArea(0f,Utility.ITEMS_TEXTURE_ATLAS.findRegion("inv_shield"))
private var chestSlot : DropArea = DropArea(0f,DropItem.ItemUseType.ARMOR_CHEST.itemUseType,Utility.ITEMS_TEXTURE_ATLAS.findRegion("inv_chest"))
private var legsSlot : DropArea = DropArea(0f,DropItem.ItemUseType.ARMOR_FEET.itemUseType,Utility.ITEMS_TEXTURE_ATLAS.findRegion("inv_boot"))
var item : DropItem = DropItem(450f,100f,DropItem.ItemUseType.ARMOR_HELMET,Utility.ITEMS_TEXTURE_ATLAS.findRegion("HELMET01"))
init {
inventorySlotsTable.name = "Inventory_Slot_Table"
equipSlotsTable.name = "Equipment_Slot_Table"
equipSlotsTable.defaults().space(10f)
equipSlotsTable.apply{
add()
add(headSlot)
row()
add(leftArmSlot)
add(chestSlot)
add(rightArmSlot)
row()
add()
right().add(legsSlot)
pack()
debugall()
}
playerSlotsTable.background = Image(NinePatch(Utility.STATUS_UI_TEXTURE_ATLAS.createPatch("dialog"))).drawable
playerSlotsTable.apply {
add(equipSlotsTable)
pack()
}
inventorySlotsTable.add(item)
window.apply {
add(playerSlotsTable)
row()
add(item)
pack()
debugall()
}
stage.addActor(window)
}
override fun act(delta: Float) {
super.act(delta)
window.setPosition(x,y)
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)