libgdx-表格项在窗口中的位置错误

问题描述

我重新编辑类,例如。

我正在尝试使用我的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)
}

}

GitHub: https://github.com/lercon9875/RPGgame/tree/master/core/src/com/ss/rpggame?fbclid=IwAR0iyfaxE9d2j7OWPBWncO1tFojm4UzZO6vzeE5f7Szd42-Qaa8akbBM6_8

error image position

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)