Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 动画中出现的多个帧-Kotlin_Android_Kotlin_Google Play Games - Fatal编程技术网

Android 动画中出现的多个帧-Kotlin

Android 动画中出现的多个帧-Kotlin,android,kotlin,google-play-games,Android,Kotlin,Google Play Games,我正在为我的大学工作开发一个太空入侵者的副本,但是我在太空船的动画方面遇到了一些麻烦。太空船的移动应该根据玩家触摸的位置从屏幕中心向左或向右移动。但是,当宇宙飞船的位置改变时,后面总是有一些帧跟随真实的宇宙飞船。这里有一个屏幕截图: 有些变量是法语的,让我解释一下: -太空船。移动:显示移动方式:-1,向左移动,0,停止,1,向右移动。 -spaceship.bouge():更改飞船位置的方法。 Spaceship.kt: package com.example.spaceinvaders2

我正在为我的大学工作开发一个太空入侵者的副本,但是我在太空船的动画方面遇到了一些麻烦。太空船的移动应该根据玩家触摸的位置从屏幕中心向左或向右移动。但是,当宇宙飞船的位置改变时,后面总是有一些帧跟随真实的宇宙飞船。这里有一个屏幕截图:

有些变量是法语的,让我解释一下: -太空船。移动:显示移动方式:-1,向左移动,0,停止,1,向右移动。 -spaceship.bouge():更改飞船位置的方法。 Spaceship.kt:

package com.example.spaceinvaders2

import android.content.res.Resources
import android.graphics.*
import android.widget.Toast

class Spaceship(res: Resources) {

    var x : Int =450
    var y : Int =1000
    var width : Int
    var height: Int
    var enMouvement = 0                             //0 : à l'arrêt, -1 : vers la gauche, 1 vers la droite
    var img : Bitmap = BitmapFactory.decodeResource(res, R.drawable.space_ship)
    val paint = Paint()


    init {
        width = img.width
        height = img.height
        width /= 15
        height /= 15

        img = Bitmap.createScaledBitmap(img, width, height, false)

    }

    fun draw(canvas: Canvas){
        canvas.drawBitmap(img, x*1f, y*1f, paint)
    }

    fun bouge(){
        x += 15*enMouvement
    }
}
GameView.kt

package com.example.spaceinvaders2

import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.SurfaceHolder
import android.view.SurfaceView
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_game_view.view.*
import java.lang.Thread.sleep

class GameView @JvmOverloads constructor (context: Context, attributes: AttributeSet? = null,
                                          defStyleAttr: Int = 0): SurfaceView(context, attributes,defStyleAttr), Runnable, SurfaceHolder.Callback{

    lateinit var thread: Thread
    lateinit var canvas: Canvas
    private var drawing = true                      //Si on joue = true, si on ne joue pas = false
    private var spaceship = Spaceship(resources)

    override fun run(){
        while (drawing){
            update()
            draw()
            sleep(17)
        }
    }

    fun resume(){
        //Si l'on revient sur l'application
        drawing = true
        thread = Thread(this)
        thread.start()

    }
    fun pause(){
        //Si l'on sort de l'application
        drawing = false
        thread.join()
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        //Le toucher sur l'écran change le sens du mvt du spaceship
        when (event?.action){
            MotionEvent.ACTION_DOWN ->
                if (event.x < width/2) spaceship.enMouvement = -1
                else if (event.x > width/2)  spaceship.enMouvement = 1
            MotionEvent.ACTION_UP -> spaceship.enMouvement = 0

        }
        return true
    }

    fun update(){
        //Mettre les positions des objets à jour
        spaceship.bouge()
    }

    fun draw(){
        //Dessiner l'écran
        if(holder.surface.isValid){
            canvas = holder.lockCanvas()
            spaceship.draw(canvas)
            holder.unlockCanvasAndPost(canvas)
        }

    }

    override fun surfaceChanged(holder: SurfaceHolder, format : Int, width: Int, height: Int){
    }

    override fun surfaceCreated(holder: SurfaceHolder){
        thread = Thread(this)
        thread.start()
    }
    override fun surfaceDestroyed(holder: SurfaceHolder){
        thread.join()
    }
}

package com.example.spaceinvers2
导入android.content.Context
导入android.graphics.Canvas
导入android.util.AttributeSet
导入android.view.MotionEvent
导入android.view.SurfaceHolder
导入android.view.SurfaceView
导入android.widget.Toast
导入kotlinx.android.synthetic.main.activity\u game\u view.view*
导入java.lang.Thread.sleep
类GameView@JVM重载构造函数(上下文:上下文,属性:AttributeSet?=null,
defStyleAttr:Int=0):SurfaceView(上下文、属性、defStyleAttr)、Runnable、SurfaceHolder.Callback{
lateinit变量线程:线程
lateinit变量画布:画布
专用var绘图=正确//当前状态下的Si=正确,当前状态下的Si=错误
私人var spaceship=宇宙飞船(资源)
覆盖趣味跑(){
while(绘图){
更新()
画()
睡眠(17)
}
}
有趣的简历(){
//关于上一次申请
绘图=真
线程=线程(此)
thread.start()
}
有趣的停顿{
//Si l'on sort de l'应用程序
绘图=错误
thread.join()
}
重写事件(事件:MotionEvent?):布尔值{
//Le toucher sur l'cran change Le sens du mvt du spaceship
何时(事件?.action){
MotionEvent.ACTION\u向下->
如果(event.xwidth/2)spaceship.enmovement=1,则为else
MotionEvent.ACTION\u UP->spaceship.enmovement=0
}
返回真值
}
趣味更新(){
//目前的情况如何
太空船
}
抽奖{
//德西纳莱克兰酒店
if(holder.surface.isValid){
canvas=holder.lockCanvas()
宇宙飞船.绘制(画布)
支架.解锁画布和立柱(画布)
}
}
覆盖有趣的曲面更改(保持架:SurfaceHolder,格式:Int,宽度:Int,高度:Int){
}
覆盖乐趣surfaceCreated(保持架:SurfaceHolder){
线程=线程(此)
thread.start()
}
覆盖乐趣surfaceDestroyed(支架:SurfaceHolder){
thread.join()
}
}